fix image alpha set bug.
authorCarsten Haitzler <raster@rasterman.com>
Fri, 7 Sep 2012 05:57:22 +0000 (05:57 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Fri, 7 Sep 2012 05:57:22 +0000 (05:57 +0000)
SVN revision: 76277

legacy/evas/ChangeLog
legacy/evas/NEWS
legacy/evas/src/modules/engines/gl_cocoa/evas_engine.c
legacy/evas/src/modules/engines/gl_common/evas_gl_image.c
legacy/evas/src/modules/engines/gl_sdl/evas_engine.c
legacy/evas/src/modules/engines/gl_x11/evas_engine.c
legacy/evas/src/modules/engines/software_generic/evas_engine.c
legacy/evas/src/modules/engines/wayland_egl/evas_engine.c

index 5583bb2..bf5ff5c 100644 (file)
 
        * Fix EGL/GLES bug when setting up rgba dest alpha windows where they
        cease to be rendered to. use a shared context and it works.
+
+2012-09-07  Carsten Haitzler (The Rasterman)
+
+       * Fix image alpha set bug if the image data has not been loaded
+       yet from disk. Fixes across software and gl engines needed.
index 871a260..d7c69ac 100644 (file)
@@ -16,6 +16,7 @@ Fixes:
 
    * Fix segmentation fault with the esvg loader.
    * Fix EGL/GLES dest alpha rendering bug (no rendering).
+   * Fix evas_object_image_alpha_set when image data not loaded yet.
 
 Evas 1.7.0
 
index 245de0f..abcc43d 100644 (file)
@@ -446,6 +446,8 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
      {
         Evas_GL_Image *im_new;
         
+        if (!im->im->image.data)
+          evas_cache_image_load_data(&im->im->cache_entry);
         im_new = evas_gl_common_image_new_from_copied_data
            (im->gc, im->im->cache_entry.w, im->im->cache_entry.h, 
                im->im->image.data,
index 581de65..44b4ef6 100644 (file)
@@ -314,6 +314,7 @@ evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha)
    if (im->alpha == alpha) return im;
    im->alpha = alpha;
    if (!im->im) return im;
+   evas_cache_image_load_data(&im->im->cache_entry);
    im->im->cache_entry.flags.alpha = alpha ? 1 : 0;
    if (im->tex)
      {
@@ -321,7 +322,16 @@ evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha)
         im->tex = NULL;
      }
    if (!im->tex)
-     im->tex = evas_gl_common_texture_new(im->gc, im->im);
+     {
+        if (im->tex_only)
+          im->tex = evas_gl_common_texture_native_new(im->gc, im->w, im->h,
+                                                      im->alpha, im);
+        else
+          {
+             im->tex = evas_gl_common_texture_new(im->gc, im->im);
+             evas_gl_common_texture_update(im->tex, im->im);
+          }
+     }
    return im;
 }
 
index c032ad1..8a27f1f 100644 (file)
@@ -390,6 +390,8 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
      {
         Evas_GL_Image *im_new;
         
+        if (!im->im->image.data)
+          evas_cache_image_load_data(&im->im->cache_entry);
         im_new = evas_gl_common_image_new_from_copied_data(im->gc, im->im->cache_entry.w, im->im->cache_entry.h, im->im->image.data,
                                                            eng_image_alpha_get(data, image),
                                                            eng_image_colorspace_get(data, image));
index ff4a3d3..f41e6a2 100644 (file)
@@ -1741,6 +1741,8 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
      {
         Evas_GL_Image *im_new;
 
+        if (!im->im->image.data)
+          evas_cache_image_load_data(&im->im->cache_entry);
         im_new = evas_gl_common_image_new_from_copied_data
            (im->gc, im->im->cache_entry.w, im->im->cache_entry.h,
                im->im->image.data,
index e166bec..adce37f 100644 (file)
@@ -569,6 +569,7 @@ eng_image_alpha_set(void *data __UNUSED__, void *image, int has_alpha)
        im->cache_entry.flags.alpha = 0;
        return im;
      }
+   if (!im->image.data) evas_cache_image_load_data(&im->cache_entry);
    im = (RGBA_Image *) evas_cache_image_alone(&im->cache_entry);
    im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
    evas_common_image_colorspace_dirty(im);
index 82bb062..c955730 100644 (file)
@@ -1265,6 +1265,8 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
      {
         Evas_GL_Image *im_new;
 
+        if (!im->im->image.data)
+          evas_cache_image_load_data(&im->im->cache_entry);
         im_new = evas_gl_common_image_new_from_copied_data
            (im->gc, im->im->cache_entry.w, im->im->cache_entry.h,
                im->im->image.data,