evas_textblock: fix clipper bug related with textblock 14/196214/1
authorJiyoun Park <jy0703.park@samsung.com>
Wed, 26 Dec 2018 08:14:10 +0000 (17:14 +0900)
committerJiyoun Park <jy0703.park@samsung.com>
Wed, 26 Dec 2018 08:14:10 +0000 (17:14 +0900)
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

src/lib/evas/canvas/evas_object_textblock.c

index a2c77f0..8c873f6 100644 (file)
@@ -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);