forked from enlightenment/efl
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:
parent
c515ee36e6
commit
79b283ab94
|
@ -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; }
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue