jpeg pushed a commit to branch master.

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

commit 7243b71a19500e72780dc684bd7b2094b9bd5050
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Thu Jul 20 14:35:48 2017 +0900

    evas: Restore flag pre_render_done in render_mapped
    
    Some objects don't go through render_pre (unchanged, child
    of mapped parents), even though they will go through
    evas_render_mapped. Those were marked as pre_render_done
    inside evas_render_mapped since it seemed to fix some issues
    a long time ago.
    
    Unfortunately, if those objects are changed their flag may
    not be reset to false, which means they never go through
    render_pre, leading to render issues.
    
    I believe simply restoring the value of the pre_render_done
    flag should be good enough. I don't know why it is set to
    true inside evas_render_mapped but I also don't want to find
    out :)
    
    See 9ac13e4aec83ea6dadfa62e4253b1db4ffe167e8 (old)
    See 87e5e70a9d888ce93ed807bb0d39d1738241ad9b (older)
    
    Patch made with @jiin.moon
---
 src/lib/evas/canvas/evas_render.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/src/lib/evas/canvas/evas_render.c 
b/src/lib/evas/canvas/evas_render.c
index b994aa29cd..1f2602adbc 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -1725,6 +1725,7 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object 
*eo_obj,
    Evas_Object_Protected_Data *obj2;
    Eina_Bool clean_them = EINA_FALSE;
    Eina_Bool proxy_src_clip = EINA_TRUE;
+   Eina_Bool was_pre_render_done = obj->pre_render_done;
    void *ctx;
 
    if (!proxy_render_data)
@@ -1876,12 +1877,7 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object 
*eo_obj,
         sw = obj->cur->geometry.w;
         sh = obj->cur->geometry.h;
         RD(level, "  surf size: %ix%i\n", sw, sh);
-        if ((sw <= 0) || (sh <= 0))
-          {
-             RD(level, "}\n");
-             eina_evlog("-render_object", eo_obj, 0.0, NULL);
-             return clean_them;
-          }
+        if ((sw <= 0) || (sh <= 0)) goto end;
 
         changed = evas_object_map_update(eo_obj, off_x, off_y, sw, sh, sw, sh);
 
@@ -2298,8 +2294,10 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object 
*eo_obj,
 on_empty_clip:
         ENFN->context_free(ENDT, ctx);
      }
-   RD(level, "}\n");
 
+end:
+   RD(level, "}\n");
+   obj->pre_render_done = was_pre_render_done;
    eina_evlog("-render_object", eo_obj, 0.0, NULL);
    return clean_them;
 }

-- 


Reply via email to