evas vg: check object changed as well 2 88/244288/1
authorShinwoo Kim <cinoo.kim@samsung.com>
Thu, 17 Sep 2020 01:40:24 +0000 (10:40 +0900)
committerHermet Park <chuneon.park@samsung.com>
Thu, 17 Sep 2020 01:43:58 +0000 (10:43 +0900)
Summary:
evas cannot render vg object if Efl_Canvas_Vg_Node_Data flag is not
EFL_GFX_CHANGE_FLAG_NONE and Evas_Object_Protected_Data.changed is FALSE,
when vg object marks its node as changed.

Above case could be possible if vg object render_pre is not called, and
only nd->vd->obj->changed is set to false by evas_object_change_reset.

Reviewers: Hermet, jsuya, herb

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

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

Change-Id: I628b3596c282354005ae2a36209460d68bb43c01

src/lib/evas/canvas/efl_canvas_vg_node.c

index a076136..f2bead5 100644 (file)
@@ -19,7 +19,15 @@ static const Efl_Canvas_Vg_Interpolation interpolation_identity = {
 static void
 _node_change(Efl_VG *obj, Efl_Canvas_Vg_Node_Data *nd)
 {
-   if (!nd || nd->flags != EFL_GFX_CHANGE_FLAG_NONE) return;
+   if (!nd) return;
+   if (nd->flags != EFL_GFX_CHANGE_FLAG_NONE)
+     {
+       if ((nd->vd && nd->vd->obj) &&
+           (!nd->vd->obj || !nd->vd->obj->changed))
+         efl_canvas_vg_object_change(nd->vd);
+
+       return;
+     }
    nd->flags = EFL_GFX_CHANGE_FLAG_ALL;
 
    Eo *p = obj;