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
This commit is contained in:
Jiyoun Park 2018-12-26 19:28:59 +09:00 committed by Hermet Park
parent 7c38c0c915
commit e4e415d957
1 changed files with 10 additions and 9 deletions

View File

@ -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);