if (pd->user_entry && pd->user_entry->root)
{
efl_canvas_vg_node_vg_obj_set(pd->user_entry->root, NULL, NULL);
- efl_parent_set(pd->user_entry->root, NULL);
+ efl_replace(&pd->user_entry->root, NULL);
}
if (root_node)
}
}
pd->user_entry->w = pd->user_entry->h = 0;
- pd->user_entry->root = root_node;
- // set the parent so that vg canvas can render it.
- efl_parent_set(pd->user_entry->root, pd->root);
+ efl_replace(&pd->user_entry->root, root_node);
efl_canvas_vg_node_vg_obj_set(root_node, eo_obj, pd);
}
else if (pd->user_entry)
}
EOLIAN static void
-_efl_canvas_vg_object_efl_object_destructor(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd)
+_efl_canvas_vg_object_efl_object_invalidate(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd)
{
+ Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
Evas *e = evas_object_evas_get(eo_obj);
efl_event_callback_del(e, EFL_CANVAS_SCENE_EVENT_RENDER_POST, _cleanup_reference, pd);
efl_unref(pd->root);
pd->root = NULL;
- if (pd->user_entry) free(pd->user_entry);
+ if (pd->user_entry)
+ {
+ Vg_User_Entry *user_entry = pd->user_entry;
+
+ ENFN->ector_surface_cache_drop(ENC, user_entry->root);
+ free(pd->user_entry);
+ }
pd->user_entry = NULL;
evas_cache_vg_entry_del(pd->vg_entry);
- efl_destructor(efl_super(eo_obj, MY_CLASS));
+ efl_invalidate(efl_super(eo_obj, MY_CLASS));
}
EOLIAN static Eo *
/* default root node */
pd->obj = obj;
- pd->root = efl_add_ref(EFL_CANVAS_VG_CONTAINER_CLASS, NULL);
+ pd->root = efl_add_ref(EFL_CANVAS_VG_CONTAINER_CLASS, eo_obj);
eina_array_step_set(&pd->cleanup, sizeof(pd->cleanup), 8);
_efl_canvas_vg_object_efl_object_finalize(Eo *obj, Efl_Canvas_Vg_Object_Data *pd)
{
Evas *e = evas_object_evas_get(obj);
- efl_parent_set(pd->root, obj);
// TODO: If we start to have to many Evas_Object_VG per canvas, it may be nice
// to actually have one event per canvas and one array per canvas to.