From 98149c4c2ba448ee6685d456109b2d4b7f12e335 Mon Sep 17 00:00:00 2001 From: Jiyoun Park Date: Mon, 5 Nov 2018 14:20:42 +0900 Subject: [PATCH] evas_render: fix objects change occured withoout real rendering. Summary: : condition of problem - rectangle object of RECT part(BASE part of below edje) - mapped - has clipper and clipper is ed's base clipper. 1. _evas_render_phase1_object_process is called of rect object if rect is mapped, not changed, it call _evas_render_phase1_object_mapped. 2. _evas_render_phase1_object_mapped when _evas_render_phase1_object_mapped is called, condition is src_changed=0 , is_active=0 , obj_changed=0 hmap=0 => because map of this object is only enabled once and not changed. in this case, rect object's clipper always changed and it cause useless randering so only call _evas_render_phase1_object_map_clipper_fix when obj is changed. first time of map set, evas object always be changed, so it maybe ok we call clipper_fix only obj is chaned. below is sample of edj. group { name: "elm/notify/center/default"; parts { part { name: "anim_start"; scale: 1; type: SPACER; description { .. perspective { zplane: -100; focal: 1000; } } } part { name: "anim_stop"; scale: 1; type: SPACER; description { .. perspective { zplane: 0; focal: 1000; } } } part { name: "base"; scale: 1; type: RECT; description { state: "default" 0.0; .. map { on: 1; perspective_on: 1; perspective: "anim_stop"; } } } Reviewers: raster, Hermet Reviewed By: Hermet Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7219 --- src/lib/evas/canvas/evas_render.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 814666cde2..a97d2b0be2 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -780,10 +780,11 @@ _evas_render_phase1_object_mapped(Phase1_Context *p1ctx, Evas_Object *eo_obj = obj->object; RD(level, " obj mapped\n"); + if (!obj_changed) return; + if (!hmap && obj->cur->clipper) // Fix some bad clipping issues before an evas map animation starts _evas_render_phase1_object_map_clipper_fix(eo_obj, obj); - if (!obj_changed) return; _evas_render_object_map_change_update(p1ctx->e, obj, EINA_TRUE, hmap, &(p1ctx->redraw_all)); if (!((is_active) &&