evas: Restore flag pre_render_done in render_mapped 95/139695/2
authorjiin.moon <jiin.moon@samsung.com>
Thu, 20 Jul 2017 06:39:55 +0000 (15:39 +0900)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Fri, 21 Jul 2017 05:37:48 +0000 (05:37 +0000)
Author:     Jean-Philippe Andre <jp.andre@samsung.com>
AuthorDate: Thu Jul 20 14:35:48 2017 +0900
Commit:     Jean-Philippe Andre <jp.andre@samsung.com>
CommitDate: Thu Jul 20 15:17:36 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

Change-Id: I18cba0e979bc7fe50952ff33b01b9bc4160087a5

src/lib/evas/canvas/evas_render.c

index 2c45a32..b5cf6a7 100644 (file)
@@ -1336,6 +1336,8 @@ 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)
@@ -1475,11 +1477,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");
-             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);
 
@@ -1879,7 +1877,9 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj,
 on_empty_clip:
         ENFN->context_free(ENDT, ctx);
      }
+end:
    RD(level, "}\n");
+   obj->pre_render_done = was_pre_render_done;
 
    return clean_them;
 }