forked from enlightenment/efl
recursively hide edje group objects on edje hide
this massively improves edje performance when using groups, which previously would continue calculating their parts even when their parent object was hidden CPU usage in my test case went from 20-30% to 1%. @fix
This commit is contained in:
parent
0b33a142b1
commit
385326b8e4
|
@ -3915,7 +3915,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
|
|||
eo_do(ep->typedata.swallow->swallowed_object,
|
||||
evas_obj_position_set(ed->x + pf->final.x, ed->y + pf->final.y),
|
||||
evas_obj_size_set(pf->final.w, pf->final.h),
|
||||
evas_obj_visibility_set(EINA_TRUE));
|
||||
evas_obj_visibility_set(evas_object_visible_get(ed->obj)));
|
||||
}
|
||||
else evas_object_hide(ep->typedata.swallow->swallowed_object);
|
||||
mo = ep->typedata.swallow->swallowed_object;
|
||||
|
|
|
@ -899,7 +899,9 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch
|
|||
obj);
|
||||
if (rp->part->type == EDJE_PART_TYPE_GROUP)
|
||||
{
|
||||
ed->groups = eina_list_append(ed->groups, _edje_fetch(child_obj));
|
||||
Edje *edg = _edje_fetch(child_obj);
|
||||
ed->groups = eina_list_append(ed->groups, edg);
|
||||
evas_object_data_set(child_obj, "\377 edje.part_obj", rp);
|
||||
_edje_real_part_swallow(ed, rp, child_obj, EINA_TRUE);
|
||||
_edje_subobj_register(ed, child_obj);
|
||||
source = NULL;
|
||||
|
@ -1965,4 +1967,4 @@ _cb_signal_repeat(void *data, Evas_Object *obj, const char *sig, const char *sou
|
|||
if (ed_parent)
|
||||
_edje_util_message_send(ed_parent, EDJE_QUEUE_SCRIPT,
|
||||
EDJE_MESSAGE_SIGNAL, 0, &emsg);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -272,6 +272,9 @@ _edje_evas_smart_resize(Eo *obj EINA_UNUSED, Edje *ed, Evas_Coord w, Evas_Coord
|
|||
EOLIAN static void
|
||||
_edje_evas_smart_show(Eo *obj, Edje *ed)
|
||||
{
|
||||
Eina_List *l;
|
||||
Edje *edg;
|
||||
|
||||
eo_do_super(obj, MY_CLASS, evas_obj_smart_show());
|
||||
if (evas_object_visible_get(obj)) return;
|
||||
if (_edje_script_only(ed))
|
||||
|
@ -284,12 +287,27 @@ _edje_evas_smart_show(Eo *obj, Edje *ed)
|
|||
_edje_lua_script_only_show(ed);
|
||||
return;
|
||||
}
|
||||
if (eina_list_count(ed->groups) > 1)
|
||||
{
|
||||
EINA_LIST_FOREACH(ed->groups, l, edg)
|
||||
{
|
||||
Edje_Real_Part *rp;
|
||||
|
||||
if (edg == ed) continue;
|
||||
rp = evas_object_data_get(edg->obj, "\377 edje.part_obj");
|
||||
if (rp->chosen_description->visible)
|
||||
evas_object_show(edg->obj);
|
||||
}
|
||||
}
|
||||
_edje_emit(ed, "show", NULL);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_edje_evas_smart_hide(Eo *obj, Edje *ed)
|
||||
{
|
||||
Eina_List *l;
|
||||
Edje *edg;
|
||||
|
||||
eo_do_super(obj, MY_CLASS, evas_obj_smart_hide());
|
||||
if (!evas_object_visible_get(obj)) return;
|
||||
if (_edje_script_only(ed))
|
||||
|
@ -302,6 +320,8 @@ _edje_evas_smart_hide(Eo *obj, Edje *ed)
|
|||
_edje_lua_script_only_hide(ed);
|
||||
return;
|
||||
}
|
||||
EINA_LIST_FOREACH(ed->groups, l, edg)
|
||||
if (edg != ed) evas_object_hide(edg->obj);
|
||||
_edje_emit(ed, "hide", NULL);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue