diff --git a/legacy/evas/ChangeLog b/legacy/evas/ChangeLog index 5583bb20c3..bf5ff5ccbc 100644 --- a/legacy/evas/ChangeLog +++ b/legacy/evas/ChangeLog @@ -1029,3 +1029,8 @@ * 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. diff --git a/legacy/evas/NEWS b/legacy/evas/NEWS index 871a260f86..d7c69ac43b 100644 --- a/legacy/evas/NEWS +++ b/legacy/evas/NEWS @@ -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 diff --git a/legacy/evas/src/modules/engines/gl_cocoa/evas_engine.c b/legacy/evas/src/modules/engines/gl_cocoa/evas_engine.c index 245de0f19a..abcc43d553 100644 --- a/legacy/evas/src/modules/engines/gl_cocoa/evas_engine.c +++ b/legacy/evas/src/modules/engines/gl_cocoa/evas_engine.c @@ -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, diff --git a/legacy/evas/src/modules/engines/gl_common/evas_gl_image.c b/legacy/evas/src/modules/engines/gl_common/evas_gl_image.c index 581de65f32..44b4ef64e4 100644 --- a/legacy/evas/src/modules/engines/gl_common/evas_gl_image.c +++ b/legacy/evas/src/modules/engines/gl_common/evas_gl_image.c @@ -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; } diff --git a/legacy/evas/src/modules/engines/gl_sdl/evas_engine.c b/legacy/evas/src/modules/engines/gl_sdl/evas_engine.c index c032ad14b6..8a27f1f94b 100644 --- a/legacy/evas/src/modules/engines/gl_sdl/evas_engine.c +++ b/legacy/evas/src/modules/engines/gl_sdl/evas_engine.c @@ -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)); diff --git a/legacy/evas/src/modules/engines/gl_x11/evas_engine.c b/legacy/evas/src/modules/engines/gl_x11/evas_engine.c index ff4a3d3c14..f41e6a239d 100644 --- a/legacy/evas/src/modules/engines/gl_x11/evas_engine.c +++ b/legacy/evas/src/modules/engines/gl_x11/evas_engine.c @@ -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, diff --git a/legacy/evas/src/modules/engines/software_generic/evas_engine.c b/legacy/evas/src/modules/engines/software_generic/evas_engine.c index e166bec93e..adce37f7df 100644 --- a/legacy/evas/src/modules/engines/software_generic/evas_engine.c +++ b/legacy/evas/src/modules/engines/software_generic/evas_engine.c @@ -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); diff --git a/legacy/evas/src/modules/engines/wayland_egl/evas_engine.c b/legacy/evas/src/modules/engines/wayland_egl/evas_engine.c index 82bb06221d..c955730a63 100644 --- a/legacy/evas/src/modules/engines/wayland_egl/evas_engine.c +++ b/legacy/evas/src/modules/engines/wayland_egl/evas_engine.c @@ -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,