evas vg: check vg changed 70/244770/1
authorShinwoo Kim <cinoo.kim@samsung.com>
Thu, 24 Sep 2020 03:16:49 +0000 (12:16 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Thu, 24 Sep 2020 06:20:26 +0000 (15:20 +0900)
Summary:
It is not able to render even though vg object has a chance to render,
because evas_object_smart_changed_get checks only Evas_Object_Protected_Data,
when Efl_Canvas_Vg_Object_Data.changed is TRUE.

Reviewers: Hermet, jsuya, herb

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12152

Change-Id: Ic318e176e18a97bbb015f2e50008b70ffc565211

src/lib/evas/canvas/efl_canvas_vg_object.c
src/lib/evas/canvas/evas_object_smart.c
src/lib/evas/include/evas_private.h

index 41fd73b..0b24645 100644 (file)
@@ -384,6 +384,7 @@ _efl_canvas_vg_object_efl_object_constructor(Eo *eo_obj, Efl_Canvas_Vg_Object_Da
    obj->func = &object_func;
    obj->private_data = efl_data_ref(eo_obj, MY_CLASS);
    obj->type = o_type;
+   obj->is_vg_object = EINA_TRUE;
 
    /* default root node */
    pd->obj = obj;
@@ -1176,5 +1177,12 @@ evas_object_vg_fill_mode_get(const Evas_Object *obj)
    return _efl_ui_canvas_object_vg_fill_mode_to_evas_object_vg_fill_mode(efl_canvas_vg_object_fill_mode_get(obj));
 }
 
+Eina_Bool
+evas_object_vg_changed_get(Evas_Object_Protected_Data *obj)
+{
+   Efl_Canvas_Vg_Object_Data *pd = obj->private_data;
+   return pd->changed;
+}
+
 #include "efl_canvas_vg_object.eo.c"
 #include "efl_canvas_vg_object_eo.legacy.c"
index ba0ebce..4e8377d 100644 (file)
@@ -1396,7 +1396,10 @@ evas_object_smart_changed_get(Evas_Object_Protected_Data *obj)
         if (has_map)
           {
              if ((obj->need_surface_clear && obj->changed && !obj->is_smart) ||
-                 ((obj->changed_pchange) && (obj->changed_map)))
+                 ((obj->changed_pchange) && (obj->changed_map)) ||
+                 /* A condition for a rare case which has obj->changed is FALSE,
+                    but Efl_Canvas_Vg_Object_Data.changed is TRUE. */
+                 (obj->is_vg_object && evas_object_vg_changed_get(obj)))
                return EINA_TRUE;
           }
      }
index 99184cf..bda9b5e 100755 (executable)
@@ -831,6 +831,7 @@ struct _Evas_Object_Protected_Data
    Eina_Bool                   events_filter_enabled : 1;
    Eina_Bool                   is_pointer_inside_legacy : 1;
    Eina_Bool                   is_filter_object : 1;
+   Eina_Bool                   is_vg_object : 1;
 };
 
 struct _Evas_Data_Node
@@ -1266,6 +1267,7 @@ void evas_call_smarts_calculate(Evas *e);
 void evas_object_smart_bounding_box_update(Evas_Object_Protected_Data *obj);
 void evas_object_smart_need_bounding_box_update(Evas_Smart_Data *o, Evas_Object_Protected_Data *obj);
 Eina_Bool evas_object_smart_changed_get(Evas_Object_Protected_Data *obj);
+Eina_Bool evas_object_vg_changed_get(Evas_Object_Protected_Data *obj);
 void evas_object_smart_attach(Evas_Object *eo_obj, Evas_Smart *s);
 void _evas_post_event_callback_call_real(Evas *e, Evas_Public_Data* e_pd, int min_event_id);
 #define _evas_post_event_callback_call(e, pd, id) do { \