diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index 78777f2199..d905cc5885 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -2849,8 +2849,8 @@ evas_object_image_render_pre(Evas_Object *obj) if ((o->cur.fill.w < 1) || (o->cur.fill.h < 1)) { - ERR("%p has invalid fill size: %dx%d. Ignored", - obj, o->cur.fill.w, o->cur.fill.h); + ERR("%p has invalid fill size: %dx%d. Ignored", + obj, o->cur.fill.w, o->cur.fill.h); return; } @@ -2862,13 +2862,12 @@ evas_object_image_render_pre(Evas_Object *obj) obj->cur.clipper->func->render_pre(obj->cur.clipper); } /* Proxy: Do it early */ - if (o->cur.source && o->cur.source->proxy.redraw) + if (o->cur.source && + (o->cur.source->proxy.redraw || o->cur.source->changed)) { /* XXX: Do I need to sort out the map here? */ - obj->changed = 1; - evas_add_rect(&e->clip_changes, - obj->cur.geometry.x, obj->cur.geometry.y, - obj->cur.geometry.w, obj->cur.geometry.h); + evas_object_render_pre_prev_cur_add(&e->clip_changes, obj); + goto done; } /* now figure what changed and add draw rects */ @@ -3161,6 +3160,7 @@ evas_object_image_is_opaque(Evas_Object *obj) if (!o->engine_data) return 0; o->cur.opaque = 1; } + // FIXME: use proxy if (o->cur.source) return 0; /* FIXME: Should go poke at the object */ if ((obj->cur.map) && (obj->cur.usemap)) return 0; if (obj->cur.render_op == EVAS_RENDER_COPY) return 1; @@ -3194,6 +3194,7 @@ evas_object_image_was_opaque(Evas_Object *obj) if (!o->engine_data) return 0; o->prev.opaque = 1; } + // FIXME: use proxy if (o->prev.source) return 0; /* FIXME: Should go poke at the object */ if (obj->prev.usemap) return 0; if (obj->prev.render_op == EVAS_RENDER_COPY) return 1; @@ -3222,6 +3223,7 @@ evas_object_image_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y) if ((x < 0) || (y < 0) || (x >= w) || (y >= h)) return 0; if (!o->cur.has_alpha) return 1; + // FIXME: proxy needs to be honored if (obj->cur.map) { x = obj->cur.map->mx; diff --git a/legacy/evas/src/lib/canvas/evas_object_main.c b/legacy/evas/src/lib/canvas/evas_object_main.c index c7e555e71f..9e803f75e2 100644 --- a/legacy/evas/src/lib/canvas/evas_object_main.c +++ b/legacy/evas/src/lib/canvas/evas_object_main.c @@ -98,6 +98,10 @@ evas_object_change(Evas_Object *obj) { EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) evas_object_change(obj2); } + EINA_LIST_FOREACH(obj->proxy.proxies, l, obj2) + { + evas_object_change(obj2); + } if (obj->smart.parent) evas_object_change(obj->smart.parent); } diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index e20ec12e97..6a6b38460b 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -152,6 +152,22 @@ _evas_render_phase1_direct(Evas *e, Evas_Object *proxy; RD(" [--- PHASE 1 DIRECT\n"); + for (i = 0; i < active_objects->count; i++) + { + Evas_Object *obj; + + obj = eina_array_data_get(active_objects, i); + if (obj->changed) + { + /* Flag need redraw on proxy too */ + evas_object_clip_recalc(obj); + if (obj->proxy.proxies) + { + EINA_LIST_FOREACH(obj->proxy.proxies, l, proxy) + proxy->proxy.redraw = 1; + } + } + } for (i = 0; i < render_objects->count; i++) { Evas_Object *obj; @@ -167,7 +183,14 @@ _evas_render_phase1_direct(Evas *e, { obj->proxy.redraw = 1; EINA_LIST_FOREACH(obj->proxy.proxies, l, proxy) - proxy->func->render_pre(proxy); + { + proxy->func->render_pre(proxy); + _evas_render_prev_cur_clip_cache_add(e, proxy); + } + } + else if (obj->proxy.redraw) + { + _evas_render_prev_cur_clip_cache_add(e, obj); } if (obj->pre_render_done) {