hermet pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=85cf0ce88369c3d0e4fffb66b5c0fdbb94688052
commit 85cf0ce88369c3d0e4fffb66b5c0fdbb94688052 Author: Shinwoo Kim <[email protected]> Date: Wed Aug 14 12:39:36 2019 +0900 evas_map: draw what map did not draw before. Summary: When a map property is changed, map draws it. Before drawing, evas_object_map_update updates map->spans which is data for actual drawing. But if changed_map is false, then evas_object_map_update does not update map->spans. Usually mapped object has following step. (1) change map data (evas_map_point_coord_set) (2) render_pre (3) evas_object_map_update updates map->spans if changed_map is true. (4) render (5) render_post -> evas_object_cur_prev -> "map->prev = map->cur" But if mapped object hides at step(1), then step(3),(4) does not happen. But step(4) map->prev keeps changed map data. After this point, If same map data comes, then map does not draw it. Because the new data is same with map->prev. The issue occurs with following step. (A) point_coord_set with point A. (B) (2)(3)(4)(5) works. (C) point_coord_set with point B. And hide. (D) (2)(5) wokrs. (E) point_coord_set with point A. still hide, so none of (2)(3)(4)(5) work. (F) point_coord_set with point B. And show. (G) (2)(3)(4)(5) works. BUT step(3) does not update map->spans because changed_map is false. So you can see image of point A. The changed_map is changed to false after updating map->spans at step(3). So usually changed_map is false before deciding changed_map of next render. In case of not rendering (but render_pre/post) after map data is changed, the changed_map keeps true. So this patch was suppose to make changed_map false if changed_map is already ture before _evas_map_calc_map_geometry decides changed_map which occurs step(1). true changed_map indicates that you need to draw even though new map data is same with previous map data. Test Plan: {F3739770} Reviewers: Hermet, jsuya Reviewed By: Hermet Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D9476 --- src/lib/evas/canvas/evas_map.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib/evas/canvas/evas_map.c b/src/lib/evas/canvas/evas_map.c index 19a85d9995..0ac75c7a07 100644 --- a/src/lib/evas/canvas/evas_map.c +++ b/src/lib/evas/canvas/evas_map.c @@ -90,7 +90,12 @@ _evas_map_calc_map_geometry(Evas_Object *eo_obj) obj->map->cur.map->normal_geometry.y = yy1; obj->map->cur.map->normal_geometry.w = (x2 - x1); obj->map->cur.map->normal_geometry.h = (yy2 - yy1); - obj->changed_map = ch; + + /* if change_map is true, it means that the prev map data + did not render before. even though both prev and cur + has same map points we need to draw it */ + obj->changed_map |= ch; + // This shouldn't really be needed, but without it we do have case // where the clip is wrong when a map doesn't change, so always forcing // it, as long as someone doesn't find a better fix. --
