commit 56074fd579a6bd0395948464cc15cb9f5818450e 01/76601/1
authorHermet Park <hermet@hermet.pe.kr>
Fri, 24 Jun 2016 10:04:32 +0000 (19:04 +0900)
committerHermet Park <hermet@hermet.pe.kr>
Fri, 24 Jun 2016 10:04:32 +0000 (19:04 +0900)
Author: Hermet Park <hermet@hermet.pe.kr>
Date:   Fri Jun 24 18:51:38 2016 +0900

    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.

Change-Id: I8d0f71e1766595ab4b0e31464e885364ba2db519

src/lib/evas/canvas/evas_object_smart.c

index d9f8a89..16a2e79 100644 (file)
@@ -1013,8 +1013,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)