From 56074fd579a6bd0395948464cc15cb9f5818450e Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 24 Jun 2016 18:51:38 +0900 Subject: [PATCH] evas canvas: fix a proxy+map rendering issue. This fix is wrt the non-updation of the proxy object. If a source of a proxy object has mapped objects among its children, Rendering frame won't be correct while they were keeping changing. The reason is, evas_object_smart_changed_get() couldn't figure those changes out correctly because of cached-clip visibility. Cached-clip of smart member can't be used for map surface updation, because cached-clip includes the visiblity status out of the smart object. So, loose the criteria to make it rendering smart members in map. --- src/lib/evas/canvas/evas_object_smart.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index 832babc07f..2f1252b744 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c @@ -1036,8 +1036,18 @@ evas_object_smart_changed_get(Evas_Object *eo_obj) Evas_Object_Protected_Data *o2; Eina_Bool has_map = EINA_FALSE; - if (!evas_object_is_visible(eo_obj, obj) && - !evas_object_was_visible(eo_obj, obj)) + /* If object is invisible, it's meaningless to figure out changed state + for rendering. */ + + //a. Object itself visibility + if (obj->no_render || !(obj->prev->visible && obj->cur->visible) || + ((obj->prev->color.a == 0) && (obj->cur->color.a == 0))) + return EINA_FALSE; + + //b. Object clipper visibility + if (!(obj->prev->clipper->cur->visible && obj->cur->clipper->cur->visible) || + ((obj->prev->clipper->cur->color.a == 0) && + (obj->prev->clipper->prev->color.a == 0))) return EINA_FALSE; if (!obj->clip.clipees)