From: Jiyoun Park Date: Wed, 26 Dec 2018 08:14:10 +0000 (+0900) Subject: evas_textblock: fix clipper bug related with textblock X-Git-Tag: submit/tizen/20181227.084356~39 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6176ed699c963258ca055c137614ee55181d8118;p=platform%2Fupstream%2Fefl.git evas_textblock: fix clipper bug related with textblock 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 https://phab.enlightenment.org/D7512 Change-Id: I3624b85c39d0d79b0175965d26739a3a91505c97 --- diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index a2c77f0..8c873f6 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -15497,6 +15497,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)) { @@ -15527,15 +15537,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);