From 8ea3844c85be125e3008862fe785cf503aa3d4ea Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 28 Apr 2010 14:38:46 +0000 Subject: [PATCH] fix fill render bug cedric reported. :) SVN revision: 48393 --- .../evas/src/lib/canvas/evas_object_image.c | 2 ++ legacy/evas/src/lib/canvas/evas_render.c | 25 +++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index bbda40c37a..b3e938d492 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -2682,6 +2682,7 @@ evas_object_image_render_pre(Evas_Object *obj) /* if it changed geometry - and obviously not visibility or color */ /* caluclate differences since we have a constant color fill */ /* we really only need to update the differences */ +#if 0 // XXX: maybe buggy? if (((obj->cur.geometry.x != obj->prev.geometry.x) || (obj->cur.geometry.y != obj->prev.geometry.y) || (obj->cur.geometry.w != obj->prev.geometry.w) || @@ -2704,6 +2705,7 @@ evas_object_image_render_pre(Evas_Object *obj) obj->prev.geometry.h); if (!o->pixel_updates) goto done; } +#endif if (((obj->cur.geometry.x != obj->prev.geometry.x) || (obj->cur.geometry.y != obj->prev.geometry.y) || (obj->cur.geometry.w != obj->prev.geometry.w) || diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index b84dc0126b..9ec59d0ee6 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -722,8 +722,21 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface, } } else - obj->func->render(obj, e->engine.data.output, ctx, - obj->cur.map->surface, off_x, off_y); + { + int x = 0, y = 0, w = 0, h = 0; + + w = obj->cur.map->surface_w; + h = obj->cur.map->surface_h; + RECTS_CLIP_TO_RECT(x, y, w, h, + obj->cur.cache.clip.x + off_x, + obj->cur.cache.clip.y + off_y, + obj->cur.cache.clip.w, + obj->cur.cache.clip.h); + e->engine.func->context_clip_set(e->engine.data.output, + ctx, x, y, w, h); + obj->func->render(obj, e->engine.data.output, ctx, + obj->cur.map->surface, off_x, off_y); + } e->engine.func->context_free(e->engine.data.output, ctx); } @@ -1011,6 +1024,14 @@ evas_render_updates_internal(Evas *e, } if (((w > 0) && (h > 0)) || (obj->smart.smart)) { + if (!obj->smart.smart) + { + RECTS_CLIP_TO_RECT(x, y, w, h, + obj->cur.cache.clip.x + off_x, + obj->cur.cache.clip.y + off_y, + obj->cur.cache.clip.w, + obj->cur.cache.clip.h); + } e->engine.func->context_clip_set(e->engine.data.output, e->engine.data.context, x, y, w, h);