evas_render: add restacked mapped obj to redraws rect 46/209046/2
authorShinwoo Kim <cinoo.kim@samsung.com>
Tue, 2 Jul 2019 02:44:08 +0000 (11:44 +0900)
committerHermet Park <chuneon.park@samsung.com>
Tue, 2 Jul 2019 07:29:28 +0000 (07:29 +0000)
Summary:
We are adding A object area to the redraws rect when object stack is changed
from (1) to (2) if A object is not mapped.

(1)
 ┌────────┐
 │Object A│┐
 └────────┘│
  └────────┘

(2)
 ┌────────┐
 │┌────────┐
 └│Object B│
  └────────┘

But if A object is mapped, then we are adding only part of A object area.

(part of A)
 ┌────────┐
 │┌───────┘
 └┘

So the result of stack change is (1) not (2).
This patch set is adding restacked mapped object to the restack_objects array,
after changing the stack of mapped object to add correct redraws rect.

Test Plan: Attached example code

Reviewers: Hermet, jsuya

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9183

Change-Id: I571461a9dbf4dd67dd95d68ce47bf7ebef435a7a

src/lib/evas/canvas/evas_render.c

index 4cd326b..b241664 100644 (file)
@@ -810,6 +810,11 @@ _evas_render_phase1_object_mapped(Phase1_Context *p1ctx,
         _evas_render_phase1_object_process(p1ctx, obj2, obj->restack,
                                            EINA_TRUE, src_changed, level + 1);
      }
+
+   /* Restacked mapped object should be used as a redraw rect.
+      The "phase 2. force updates for restack" will use restack_objects. */
+   if (EINA_UNLIKELY(obj->restack))
+     OBJ_ARRAY_PUSH(p1ctx->restack_objects, obj);
 }
 
 static void