summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJiyoun Park <jy0703.park@samsung.com>2019-02-13 11:16:16 +0900
committerHermet Park <hermetpark@gmail.com>2019-02-13 11:16:16 +0900
commite8fe0c9c92386595da0143793e1554c47c17c660 (patch)
tree2fab7f767205aa4e84cba816b239dc64120b71b0 /src
parent3b262340babc57058f3e97b10ca56c0adb1c3efe (diff)
evas_image: fix pixels_dirty_set(False) makes wrong object-change-list.
Summary: evas_object_image_pixels_dirty_set(img B, False) means 1. app want to mark image object's data is not dirty anymore 2. app don't want to be called get_pixels callback. that does not mean image need to be redraw. evas_object_image_pixels_dirty_set(img B, True) means 1. image object's data is dirty, so image object need to be redraw. 2. app want to be called get_pixels callback. but pixels_dirty_set(img B, FALSE) function also set o->changed to true, it cause problem related with rendering Below case is the example of problem. 1. Smart object A 2. Child image object B 3. app call pixels_dirty_set(FALSE) inside pixels_get_callback pixels_get_callback is called inside the image object B's rendering. enlightenment's e_comp_object_render do upper job. After adding preload fetch, evas_object_image_render_post can call evas_object_change. https://phab.enlightenment.org/D7157 evas_render_updates_internal 0. enlightenment call evas_object_image_pixels_dirty_set(img B, TRUE) o->changed = 1; evas_object_change(img B) 1. smart obj A is in render_objects 2. evas_object_image_render_pre B, o->change=0 3. evas_render_mapped (Smart A) 3-1. evas_render_mapped (img B) : enlightenment call evas_object_image_pixels_dirty_set(img B, False) : o->changed=1 3-2. evas_object_change_reset(img B) 4. pending_change(img B) 4-1. evas_object_image_render_post(img B) o->changed=1 (3-1 step) evas_object_change(img B)->evas_object_change(Smart A) 5. render_post_reset smart A is chaged(4-1 step), so, called evas_object_change_reset(Smart A) ###smart A is reset(5 step), img B is changed(4-1 step). after this case, img B never get change to be redraw. Reviewers: Hermet, cedric, zmike, ManMower Reviewed By: Hermet Subscribers: zmike, ManMower, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7821
Diffstat (limited to '')
-rw-r--r--src/lib/evas/canvas/evas_image_legacy.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/lib/evas/canvas/evas_image_legacy.c b/src/lib/evas/canvas/evas_image_legacy.c
index 6fa92672d3..9891a68b15 100644
--- a/src/lib/evas/canvas/evas_image_legacy.c
+++ b/src/lib/evas/canvas/evas_image_legacy.c
@@ -549,9 +549,13 @@ evas_object_image_pixels_dirty_set(Eo *eo_obj, Eina_Bool dirty)
549 Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); 549 Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
550 550
551 evas_object_async_block(obj); 551 evas_object_async_block(obj);
552 if (dirty) o->dirty_pixels = EINA_TRUE; 552 if (dirty)
553 {
554 o->dirty_pixels = EINA_TRUE;
555 o->changed = EINA_TRUE;
556 }
553 else o->dirty_pixels = EINA_FALSE; 557 else o->dirty_pixels = EINA_FALSE;
554 o->changed = EINA_TRUE; 558
555 evas_object_change(eo_obj, obj); 559 evas_object_change(eo_obj, obj);
556} 560}
557 561