diff options
author | Shinwoo Kim <cinoo.kim@samsung.com> | 2019-08-14 12:39:36 +0900 |
---|---|---|
committer | Hermet Park <hermetpark@gmail.com> | 2019-08-14 12:39:58 +0900 |
commit | 85cf0ce88369c3d0e4fffb66b5c0fdbb94688052 (patch) | |
tree | ca8f96c22c773f69ef504f06053adcab42a1d10a | |
parent | b8d174738216a8a188aa03eb99cb171aa2f32a7e (diff) | |
download | efl-85cf0ce88369c3d0e4fffb66b5c0fdbb94688052.tar.gz |
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
-rw-r--r-- | src/lib/evas/canvas/evas_map.c | 7 |
1 files changed, 6 insertions, 1 deletions
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. |