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); 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 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) _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]] [[Get all children of container]]
return: iterator<Efl.Canvas.Vg.Node> @move @no_unused; [[Iterator to children]] 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 { implements {
Efl.Object.constructor; Efl.Object.constructor;

View File

@ -378,11 +378,11 @@ _reset_vg_tree(Efl_VG *node)
//Hide all nodes visibility //Hide all nodes visibility
if (efl_isa(node, EFL_CANVAS_VG_CONTAINER_CLASS)) 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; Efl_VG* child;
Eina_Iterator *itr = efl_canvas_vg_container_children_get(node); EINA_LIST_FOREACH(list, list2, child)
EINA_ITERATOR_FOREACH(itr, child)
_reset_vg_tree(child); _reset_vg_tree(child);
if (itr) eina_iterator_free(itr);
} }
efl_gfx_entity_visible_set(node, EINA_FALSE); efl_gfx_entity_visible_set(node, EINA_FALSE);
} }