From a0d8db000e340454efe2f4e2c2b37fefb91cd7d5 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 19 Aug 2010 05:18:17 +0000 Subject: [PATCH] and make dynamic hint actually work when we have zero-copy texture support. fully ok now for argb8888. SVN revision: 51380 --- .../evas/src/lib/canvas/evas_object_image.c | 59 ++++++++++--------- .../modules/engines/gl_common/evas_gl_image.c | 6 -- .../src/modules/engines/gl_x11/evas_engine.c | 15 +++-- 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index 08a4452739..d5d94f2abb 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -803,7 +803,6 @@ evas_object_image_size_set(Evas_Object *obj, int w, int h) o->engine_data = obj->layer->evas->engine.func->image_new_from_copied_data (obj->layer->evas->engine.data.output, w, h, NULL, o->cur.has_alpha, o->cur.cspace); - printf("size set %i %i -> %p\n", w, h, o->engine_data); if (o->engine_data) { @@ -1080,9 +1079,12 @@ evas_object_image_data_get(const Evas_Object *obj, Eina_Bool for_writing) o->engine_data, for_writing, &data); - if (obj->layer->evas->engine.func->image_stride_get) - obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output, - o->engine_data, &o->cur.image.stride); + if (o->engine_data) + { + if (obj->layer->evas->engine.func->image_stride_get) + obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output, + o->engine_data, &o->cur.image.stride); + } o->pixels_checked_out++; if (for_writing) { @@ -2003,20 +2005,20 @@ evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint) MAGIC_CHECK_END(); if (o->scale_hint == hint) return; #ifdef EVAS_FRAME_QUEUING - if (o->scale_hint != hint) - { - if (o->engine_data) - evas_common_pipe_op_image_flush(o->engine_data); - } + if (o->engine_data) + evas_common_pipe_op_image_flush(o->engine_data); #endif o->scale_hint = hint; - if (obj->layer->evas->engine.func->image_scale_hint_set) - obj->layer->evas->engine.func->image_scale_hint_set - (obj->layer->evas->engine.data.output, - o->engine_data, o->scale_hint); - if (obj->layer->evas->engine.func->image_stride_get) - obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output, - o->engine_data, &o->cur.image.stride); + if (o->engine_data) + { + if (obj->layer->evas->engine.func->image_scale_hint_set) + obj->layer->evas->engine.func->image_scale_hint_set + (obj->layer->evas->engine.data.output, + o->engine_data, o->scale_hint); + if (obj->layer->evas->engine.func->image_stride_get) + obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output, + o->engine_data, &o->cur.image.stride); + } } /** @@ -2065,21 +2067,20 @@ evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hin MAGIC_CHECK_END(); if (o->content_hint == hint) return; #ifdef EVAS_FRAME_QUEUING - if (o->content_hint != hint) - { - if (o->engine_data) - evas_common_pipe_op_image_flush(o->engine_data); - } + if (o->engine_data) + evas_common_pipe_op_image_flush(o->engine_data); #endif - printf("content hint!!!!\n"); o->content_hint = hint; - if (obj->layer->evas->engine.func->image_content_hint_set) - obj->layer->evas->engine.func->image_content_hint_set - (obj->layer->evas->engine.data.output, - o->engine_data, o->content_hint); - if (obj->layer->evas->engine.func->image_stride_get) - obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output, - o->engine_data, &o->cur.image.stride); + if (o->engine_data) + { + if (obj->layer->evas->engine.func->image_content_hint_set) + obj->layer->evas->engine.func->image_content_hint_set + (obj->layer->evas->engine.data.output, + o->engine_data, o->content_hint); + if (obj->layer->evas->engine.func->image_stride_get) + obj->layer->evas->engine.func->image_stride_get(obj->layer->evas->engine.data.output, + o->engine_data, &o->cur.image.stride); + } } /** 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 0bfd102036..83c9641bc2 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 @@ -276,19 +276,13 @@ evas_gl_common_image_scale_hint_set(Evas_GL_Image *im, int hint) void evas_gl_common_image_content_hint_set(Evas_GL_Image *im, int hint) { - printf("xxxx1\n"); if (im->content_hint == hint) return; im->content_hint = hint; - printf("xxxx2\n"); if (!im->gc) return; - printf("xxxx3\n"); if (!im->gc->shared->info.sec_image_map) return; - printf("xxxx4\n"); if (!im->gc->shared->info.bgra) return; - printf("xxxx5\n"); // does not handle yuv yet. if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return; - printf("xxxx6\n"); if (im->content_hint == EVAS_IMAGE_CONTENT_HINT_DYNAMIC) { if (im->cs.data) 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 f8a7f9fc63..4fffd309dd 100644 --- a/legacy/evas/src/modules/engines/gl_x11/evas_engine.c +++ b/legacy/evas/src/modules/engines/gl_x11/evas_engine.c @@ -783,12 +783,19 @@ eng_image_alpha_set(void *data, void *image, int has_alpha) re = (Render_Engine *)data; if (!image) return NULL; im = image; + if (im->alpha == has_alpha) return image; if (im->native.data) { im->alpha = has_alpha; return image; } eng_window_use(re->win); + if ((im->tex) && (im->tex->pt->dyn.img)) + { + im->alpha = has_alpha; + im->tex->alpha = im->alpha; + return image; + } /* FIXME: can move to gl_common */ if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im; if ((has_alpha) && (im->im->cache_entry.flags.alpha)) return image; @@ -1632,13 +1639,13 @@ eng_image_content_hint_get(void *data __UNUSED__, void *image) return gim->content_hint; } -static int -eng_image_stride_get(void *data, void *image) +static void +eng_image_stride_get(void *data, void *image, int *stride) { Render_Engine *re = (Render_Engine *)data; Evas_GL_Image *im = image; - if ((im->tex) && (im->tex->pt->dyn.img)) return im->tex->pt->dyn.w; - return im->w; + *stride = im->w; + if ((im->tex) && (im->tex->pt->dyn.img)) *stride = im->tex->pt->dyn.w; } static void