From e4e415d9573f01f49b0658237f7bc89cb3b68e2b Mon Sep 17 00:00:00 2001 From: Jiyoun Park Date: Wed, 26 Dec 2018 19:28:59 +0900 Subject: [PATCH] evas textblock: fix render_pre bug related with clipper Summary: assumtion: textblock A has the clipper rect B. 1. evas_render_updates_internal start : evas_object_clip_dirty_do( rect B) : evas_object_textblock_render_pre( textblock A) - if textlock A's o->redraw is EINA_TRUE (o->changed=1 is also same case) - textblock A's vis 1->0 - clipper rect B lose the chance to call render_pre function. - clipper rect B's evas_render_mapped function is not called : pending_change(Rect B) - obj->pre_render_done = 0, so rect cannot be get the change to call evas_object_change_reset when rect b remained the pending list and changed value is EINA_TRUE, it cause textblock's rendering problem Reviewers: raster, Hermet, kimcinoo Reviewed By: Hermet Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7512 --- src/lib/evas/canvas/evas_object_textblock.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 644aa79d80..339d153f83 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -14783,6 +14783,16 @@ evas_object_textblock_render_pre(Evas_Object *eo_obj, /* then when this is done the object needs to figure if it changed and */ /* if so what and where and add the appropriate redraw textblocks */ + /* if someone is clipping this obj - go calculate the clipper */ + if (obj->cur->clipper) + { + if (obj->cur->cache.clip.dirty) + evas_object_clip_recalc(obj->cur->clipper); + obj->cur->clipper->func->render_pre(obj->cur->clipper->object, + obj->cur->clipper, + obj->cur->clipper->private_data); + } + //evas_object_textblock_coords_recalc(eo_obj, obj, obj->private_data); if (!_relayout_if_needed(eo_obj, o)) { @@ -14813,15 +14823,6 @@ evas_object_textblock_render_pre(Evas_Object *eo_obj, was_v = evas_object_was_visible(eo_obj, obj); goto done; } - /* if someone is clipping this obj - go calculate the clipper */ - if (obj->cur->clipper) - { - if (obj->cur->cache.clip.dirty) - evas_object_clip_recalc(obj->cur->clipper); - obj->cur->clipper->func->render_pre(obj->cur->clipper->object, - obj->cur->clipper, - obj->cur->clipper->private_data); - } /* now figure what changed and add draw rects */ /* if it just became visible or invisible */ is_v = evas_object_is_visible(eo_obj, obj);