evas: Fix not to clean and re-render if position of object enabled map is changed
authorJaehyun Cho <jae_hyun.cho@samsung.com>
Thu, 7 Aug 2014 06:32:39 +0000 (15:32 +0900)
committerChunEon Park <hermet@hermet.pe.kr>
Thu, 7 Aug 2014 06:32:40 +0000 (15:32 +0900)
Summary: Fix not to clean and re-render if the position of an object enabled map is changed.

Reviewers: raster, cedric, Hermet

Reviewed By: Hermet

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D1220

src/lib/evas/canvas/evas_object_main.c
src/lib/evas/canvas/evas_object_smart.c
src/lib/evas/include/evas_private.h

index 97d6bec..61e24e9 100644 (file)
@@ -100,6 +100,7 @@ evas_object_change_reset(Evas_Object *eo_obj)
    obj->changed_color = EINA_FALSE;
    obj->changed_pchange = EINA_FALSE;
    obj->changed_src_visible = EINA_FALSE;
+   obj->need_surface_clear = EINA_FALSE;
 }
 
 void
@@ -223,6 +224,7 @@ evas_object_change(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
         movch = EINA_TRUE;
         obj->changed_move = EINA_FALSE;
      }
+   else obj->need_surface_clear = EINA_TRUE;
 
    if (obj->changed) return;
 
index 0b93a81..42da500 100644 (file)
@@ -973,6 +973,7 @@ evas_object_smart_changed_get(Evas_Object *eo_obj)
 {
    Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
    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))
@@ -980,16 +981,18 @@ evas_object_smart_changed_get(Evas_Object *eo_obj)
 
    if (!obj->clip.clipees)
      {
-        if (obj->changed && !obj->is_smart) return EINA_TRUE;
-        if (_evas_render_has_map(eo_obj, obj))
+        has_map = _evas_render_has_map(eo_obj, obj);
+        if (obj->changed && !obj->is_smart && !has_map) return EINA_TRUE;
+
+        if (has_map)
           {
-             if (((obj->changed_pchange) && (obj->changed_map)) ||
-                 (obj->changed_color)) return EINA_TRUE;
+             if (obj->need_surface_clear || ((obj->changed_pchange) && (obj->changed_map)))
+               return EINA_TRUE;
           }
      }
 
    EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), o2)
-     if (evas_object_smart_changed_get(o2->object)) return EINA_TRUE;
+      if (evas_object_smart_changed_get(o2->object)) return EINA_TRUE;
 
    return EINA_FALSE;
 }
index 2adac27..f216221 100644 (file)
@@ -920,6 +920,7 @@ struct _Evas_Object_Protected_Data
    Eina_Bool                   changed_map : 1;
    Eina_Bool                   changed_pchange : 1;
    Eina_Bool                   changed_src_visible : 1;
+   Eina_Bool                   need_surface_clear : 1;
    Eina_Bool                   del_ref : 1;
 
    Eina_Bool                   is_frame : 1;