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;
 }

-- 


Reply via email to