summaryrefslogtreecommitdiff
path: root/src/lib/evas
diff options
context:
space:
mode:
authorShinwoo Kim <cinoo.kim@samsung.com>2018-11-27 11:21:51 +0900
committerHermet Park <hermetpark@gmail.com>2018-11-27 11:21:52 +0900
commit8a7817cdd9e3a347c301370c2d401a4c5691b6d8 (patch)
tree0914ed801ca0ff86d9dceb3067a276962aa562e8 /src/lib/evas
parent6e92042845d69757782a97aaed2791ca5c1c3030 (diff)
evas map: calc map geometry when it is out of screen
Summary: The map geometry(cur.map->normal_geometry) is calculated only if evas_render_updates_internal_loop calls evas_render_mapped as below. evas_render_mapped -> evas_object_map_update -> evas_object_map_update -> _evas_map_calc_map_geometry If the mapped object is not on screen, then evas_render_updates_internal_loop does not call evas_render_mapped, because the mapped object is not active. The mapped object is not active(i.e. is_active is 0) always because cache.clip data including visilbe and geometry is not updated after the object goes out of screen. Usually the unmapped object updates its cache.clip data with updated geometry even though it is out of screen as below. _efl_canvas_object_efl_gfx_entity_position_set -> evas_object_recalc_clippees -> evas_object_clip_recalc -> evas_object_clip_recalc_do So the mapped object geometry(cur.map->normal_geometry) should be updated in evas_object_clip_recalc_do if it is out of screen. Test Plan: Sample code {F3455674} {F3455673} {F3455672} {F3455671} Reviewers: Hermet, jypark Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7344
Diffstat (limited to 'src/lib/evas')
-rw-r--r--src/lib/evas/canvas/evas_object_main.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c
index e0f02da945..69e2fcf219 100644
--- a/src/lib/evas/canvas/evas_object_main.c
+++ b/src/lib/evas/canvas/evas_object_main.c
@@ -364,11 +364,29 @@ evas_object_clip_recalc_do(Evas_Object_Protected_Data *obj, Evas_Object_Protecte
364 int cx, cy, cw, ch, cr, cg, cb, ca; 364 int cx, cy, cw, ch, cr, cg, cb, ca;
365 int nx, ny, nw, nh, nr, ng, nb, na; 365 int nx, ny, nw, nh, nr, ng, nb, na;
366 Eina_Bool cvis, nvis; 366 Eina_Bool cvis, nvis;
367 Evas_Public_Data *e;
367 368
368 evas_object_coords_recalc(obj->object, obj); 369 evas_object_coords_recalc(obj->object, obj);
369 370
370 if (EINA_UNLIKELY((!!obj->map) && (obj->map->cur.map) && (obj->map->cur.usemap))) 371 if (EINA_UNLIKELY((!!obj->map) && (obj->map->cur.map) && (obj->map->cur.usemap)))
371 { 372 {
373 e = obj->layer->evas;
374 if (!evas_object_is_active(obj->object, obj) &&
375 ((obj->map->cur.map->normal_geometry.x +
376 obj->map->cur.map->normal_geometry.w <= 0) ||
377 (obj->map->cur.map->normal_geometry.y +
378 obj->map->cur.map->normal_geometry.h <= 0) ||
379 (obj->map->cur.map->normal_geometry.x >= e->output.w) ||
380 obj->map->cur.map->normal_geometry.y >= e->output.h))
381 {
382 /* out of screen, but need to calc map geometry to update cache */
383 cy = obj->map->cur.map->normal_geometry.y;
384 cx = obj->map->cur.map->normal_geometry.x;
385 cw = obj->cur->geometry.w;
386 ch = obj->cur->geometry.h;
387 evas_object_map_update(obj->object, cx, cy, cw, ch, cw, ch);
388 }
389
372 cx = obj->map->cur.map->normal_geometry.x; 390 cx = obj->map->cur.map->normal_geometry.x;
373 cy = obj->map->cur.map->normal_geometry.y; 391 cy = obj->map->cur.map->normal_geometry.y;
374 cw = obj->map->cur.map->normal_geometry.w; 392 cw = obj->map->cur.map->normal_geometry.w;