evas_render: add restacked mapped obj to redraws rect

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:
{F3727281}

{F3727280}

{F3727279}

(1) Build and Run attached example on software_x11 engine
(2) Mouse down on upper image - the image starts to use map.
(3) Then mouse up - upper image should go under the below image.
But, the changed result is NOT rendered.

Reviewers: Hermet, jsuya, zmike

Reviewed By: zmike

Subscribers: zmike, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9183
This commit is contained in:
Shinwoo Kim 2019-07-09 12:01:22 +09:00
parent 9b1152b0cc
commit c8827c0dcc
1 changed files with 5 additions and 0 deletions

View File

@ -804,6 +804,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