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.
This commit is contained in:
Cedric BAIL 2018-03-29 13:58:00 -07:00
parent c515ee36e6
commit 79b283ab94
2 changed files with 14 additions and 7 deletions

View File

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

View File

@ -260,6 +260,18 @@ _efl_canvas_vg_node_efl_object_constructor(Eo *obj,
return 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)
{
@ -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)