hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b3d900e748f64c7cdbd60009780d54ec8c6e2087

commit b3d900e748f64c7cdbd60009780d54ec8c6e2087
Author: Jaehyun Cho <jae_hyun....@samsung.com>
Date:   Thu Aug 7 15:32:39 2014 +0900

    evas: Fix not to clean and re-render if position of object enabled map is 
changed
    
    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  |  2 ++
 src/lib/evas/canvas/evas_object_smart.c | 13 ++++++++-----
 src/lib/evas/include/evas_private.h     |  1 +
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_main.c 
b/src/lib/evas/canvas/evas_object_main.c
index 97d6bec..61e24e9 100644
--- a/src/lib/evas/canvas/evas_object_main.c
+++ b/src/lib/evas/canvas/evas_object_main.c
@@ -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;
 
diff --git a/src/lib/evas/canvas/evas_object_smart.c 
b/src/lib/evas/canvas/evas_object_smart.c
index 0b93a81..42da500 100644
--- a/src/lib/evas/canvas/evas_object_smart.c
+++ b/src/lib/evas/canvas/evas_object_smart.c
@@ -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;
 }
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index 2adac27..f216221 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -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;

-- 


Reply via email to