evas vg: add an new interface efl_canvas_vg_container_children_direct_get()

Summary: We need an efficient method to navigate children faster.

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D10989
This commit is contained in:
Hermet Park 2019-12-31 14:15:49 +09:00
parent d79693d1a9
commit 174c593c70
3 changed files with 13 additions and 3 deletions

View File

@ -304,6 +304,12 @@ _efl_canvas_vg_container_children_get(Eo *obj EINA_UNUSED, Efl_Canvas_Vg_Contain
return eina_list_iterator_new(pd->children);
}
static const Eina_List *
_efl_canvas_vg_container_children_direct_get(Eo *obj EINA_UNUSED, Efl_Canvas_Vg_Container_Data *pd)
{
return pd->children;
}
static Eina_Bool
_efl_canvas_vg_container_efl_gfx_path_interpolate(Eo *obj, Efl_Canvas_Vg_Container_Data *pd, const Efl_VG *from, const Efl_VG *to, double pos_map)
{

View File

@ -13,6 +13,10 @@ class @beta Efl.Canvas.Vg.Container extends Efl.Canvas.Vg.Node
[[Get all children of container]]
return: iterator<Efl.Canvas.Vg.Node> @move @no_unused; [[Iterator to children]]
}
children_direct_get {
[[Get all children of container]]
return: const(list<Efl.Canvas.Vg.Node>) @no_unused; [[List to children]]
}
}
implements {
Efl.Object.constructor;

View File

@ -378,11 +378,11 @@ _reset_vg_tree(Efl_VG *node)
//Hide all nodes visibility
if (efl_isa(node, EFL_CANVAS_VG_CONTAINER_CLASS))
{
Eina_List *list = (Eina_List*) efl_canvas_vg_container_children_direct_get(node);
Eina_List *list2;
Efl_VG* child;
Eina_Iterator *itr = efl_canvas_vg_container_children_get(node);
EINA_ITERATOR_FOREACH(itr, child)
EINA_LIST_FOREACH(list, list2, child)
_reset_vg_tree(child);
if (itr) eina_iterator_free(itr);
}
efl_gfx_entity_visible_set(node, EINA_FALSE);
}