diff options
author | Shinwoo Kim <cinoo.kim@samsung.com> | 2021-03-03 16:44:28 +0900 |
---|---|---|
committer | Hermet Park <chuneon.park@samsung.com> | 2021-03-03 16:44:28 +0900 |
commit | 9da41a50cb3e149f15e61b44223bcb24a09d809c (patch) | |
tree | d45c85f1355eba900870af74a1eeee46f1e1ef6b /src/lib/evas | |
parent | 91f07de8905584fed2d2cb7fd9eaf7ea04da9dd5 (diff) |
Summary:
If current clipper object is equal to previous clipper object,
then the value of visible (or alpha) is same, because it is same object.
But there is a case that current visible value is different with
previous visible, when clipper object is same.
I added this patch to cover above case to draw childern of map.
See following flow.
evas_render_mapped
> if (_evas_render_has_map(obj) && !_evas_render_can_map(obj))
> if (!changed) changed = evas_object_smart_changed_get(obj);
The evas_object_smart_changed_get returned FALSE, even though
current visible value is different with previous one in the same
clipper object.
Reviewers: raster, Hermet, herb, jsuya
Reviewed By: Hermet
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D12250
Diffstat (limited to 'src/lib/evas')
-rw-r--r-- | src/lib/evas/canvas/evas_object_smart.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index 012a7f4374..a9e654bdcb 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c | |||
@@ -1377,12 +1377,27 @@ evas_object_smart_changed_get(Evas_Object_Protected_Data *obj) | |||
1377 | return EINA_FALSE; | 1377 | return EINA_FALSE; |
1378 | 1378 | ||
1379 | //b. Object clipper visibility | 1379 | //b. Object clipper visibility |
1380 | if ((obj->prev->clipper && obj->cur->clipper) && | 1380 | if (obj->prev->clipper && obj->cur->clipper) |
1381 | ((!obj->prev->clipper->cur->visible && | 1381 | { |
1382 | !obj->cur->clipper->cur->visible) || | 1382 | if (obj->prev->clipper != obj->cur->clipper) |
1383 | ((obj->prev->clipper->cur->color.a == 0) && | 1383 | { |
1384 | (obj->cur->clipper->cur->color.a == 0)))) | 1384 | /* check between prev clipper and current clipper */ |
1385 | return EINA_FALSE; | 1385 | if ((!obj->prev->clipper->cur->visible && |
1386 | !obj->cur->clipper->cur->visible) || | ||
1387 | ((obj->prev->clipper->cur->color.a == 0) && | ||
1388 | (obj->cur->clipper->cur->color.a == 0))) | ||
1389 | return EINA_FALSE; | ||
1390 | } | ||
1391 | else | ||
1392 | { | ||
1393 | /* check between prev value and current value of clipper */ | ||
1394 | if ((!obj->cur->clipper->prev->visible && | ||
1395 | !obj->cur->clipper->cur->visible) || | ||
1396 | ((obj->cur->clipper->prev->color.a == 0) && | ||
1397 | (obj->cur->clipper->cur->color.a == 0))) | ||
1398 | return EINA_FALSE; | ||
1399 | } | ||
1400 | } | ||
1386 | 1401 | ||
1387 | if (!obj->clip.clipees) | 1402 | if (!obj->clip.clipees) |
1388 | { | 1403 | { |