hermet pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=9fcd03952ee51d34871794cb95585f3e589a3bb9
commit 9fcd03952ee51d34871794cb95585f3e589a3bb9 Author: Hermet Park <hermetp...@gmail.com> Date: Wed May 23 22:57:16 2018 +0900 evas: fix a map rendering problem. When map of a smart object is turned off, redraw-updation area could be incorrect. This results in a mirror image problem. for fixing this, let smart object request update-area in render_pre() properly only in case of map changed. Thanks to akanad for reviewing together. @fix --- src/lib/evas/canvas/evas_object_main.c | 1 - src/lib/evas/canvas/evas_object_smart.c | 12 ++++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index d4a2040e84..f336b915ec 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -831,7 +831,6 @@ evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *eo_obj, in if (!obj) return; if (!obj->layer) return; - if (obj->is_smart) goto end; /* FIXME: was_v isn't used... why? */ if (!obj->clip.clipees) { diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index c8c4441254..b5265331b4 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c @@ -1702,11 +1702,19 @@ evas_object_smart_render_pre(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, void *type_private_data EINA_UNUSED) { + int is_v, was_v; + if (obj->pre_render_done) return; if (obj->changed_map || obj->changed_src_visible) - evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, - eo_obj, obj); + { + evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, + eo_obj, obj); + is_v = evas_object_is_visible(eo_obj, obj); + was_v = evas_object_was_visible(eo_obj,obj); + evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, + eo_obj, is_v, was_v); + } obj->pre_render_done = EINA_TRUE; } --