cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=79b283ab94a463c99a3ffeaedda2f4f268479a01

commit 79b283ab94a463c99a3ffeaedda2f4f268479a01
Author: Cedric BAIL <[email protected]>
Date:   Thu Mar 29 13:58:00 2018 -0700

    evas: fix lifecycle of Ector renderer.
    
    Ector renderer are created by a factory pattern which return a reference.
    The possible logic improvement from here would be to rely on setting the
    parent of the object to the Ector_Surface and manage a cache by intercepting
    efl_noref to trigger an efl_del of the object or a temporary cache of it.
    That's for later.
---
 src/lib/evas/canvas/efl_canvas_vg_node.eo |  1 +
 src/lib/evas/canvas/evas_vg_node.c        | 20 +++++++++++++-------
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/lib/evas/canvas/efl_canvas_vg_node.eo 
b/src/lib/evas/canvas/efl_canvas_vg_node.eo
index 0296a4185b..a273afab9e 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_node.eo
+++ b/src/lib/evas/canvas/efl_canvas_vg_node.eo
@@ -65,6 +65,7 @@ abstract Efl.Canvas.VG.Node (Efl.Object, Efl.Gfx, 
Efl.Gfx.Color, Efl.Gfx.Stack,
       Efl.Object.name { set; }
       Efl.Object.parent { set; }
       Efl.Object.constructor;
+      Efl.Object.invalidate;
       Efl.Object.destructor;
       Efl.Gfx.visible { get; set; }
       Efl.Gfx.Color.color { get; set; }
diff --git a/src/lib/evas/canvas/evas_vg_node.c 
b/src/lib/evas/canvas/evas_vg_node.c
index 569e77b5f9..d950aa8e75 100644
--- a/src/lib/evas/canvas/evas_vg_node.c
+++ b/src/lib/evas/canvas/evas_vg_node.c
@@ -261,6 +261,18 @@ _efl_canvas_vg_node_efl_object_constructor(Eo *obj,
 }
 
 static void
+_efl_canvas_vg_node_efl_object_invalidate(Eo *obj, Efl_Canvas_VG_Node_Data *pd)
+{
+   if (pd->renderer)
+     {
+        efl_unref(pd->renderer);
+        pd->renderer = NULL;
+     }
+
+   efl_invalidate(efl_super(obj, MY_CLASS));
+}
+
+static void
 _efl_canvas_vg_node_efl_object_destructor(Eo *obj, Efl_Canvas_VG_Node_Data *pd)
 {
    if (pd->m)
@@ -268,12 +280,6 @@ _efl_canvas_vg_node_efl_object_destructor(Eo *obj, 
Efl_Canvas_VG_Node_Data *pd)
         free(pd->m);
         pd->m = NULL;
      }
-
-   if (pd->renderer)
-     {
-        efl_del(pd->renderer);
-        pd->renderer = NULL;
-     }
    if (pd->intp)
      {
         free(pd->intp);
@@ -651,7 +657,7 @@ _efl_canvas_vg_node_efl_gfx_path_interpolate(Eo *obj,
    tod = efl_data_scope_get(to, EFL_CANVAS_VG_NODE_CLASS);
    from_map = 1.0 - pos_map;
 
-   efl_del(pd->renderer);
+   efl_unref(pd->renderer);
    pd->renderer = NULL;
 
    if (fromd->m || tod->m)

-- 


Reply via email to