forked from enlightenment/enlightenment
e menu - remove excessive events and eo calls from menu init
so dropping a bit of overhead/latency for e menus here - this isn't to the extent of a cache for menu objects/items... but it's just nuking useless calls to do things not used or that can be done in fewer calls as well as ordering things to we don't emit events and handle them multiple times or calc min size multiple times etc. etc. - adds a test case we can enable for perf testing too.
This commit is contained in:
parent
1967257dc7
commit
5b5b3005f6
|
@ -783,8 +783,8 @@ e_menu_item_submenu_set(E_Menu_Item *mi, E_Menu *sub)
|
|||
e_theme_edje_object_set(o, "base/theme/menus",
|
||||
"e/widgets/menu/default/submenu");
|
||||
evas_object_pass_events_set(o, 1);
|
||||
evas_object_show(o);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
evas_object_show(o);
|
||||
edje_object_size_min_calc(mi->submenu_object, &ww, &hh);
|
||||
mi->submenu_w = ww;
|
||||
mi->submenu_h = hh;
|
||||
|
@ -1400,19 +1400,18 @@ _e_menu_item_realize(E_Menu_Item *mi)
|
|||
mi->separator_object = o;
|
||||
e_theme_edje_object_set(o, "base/theme/menus",
|
||||
"e/widgets/menu/default/separator");
|
||||
evas_object_show(o);
|
||||
edje_object_size_min_calc(mi->separator_object, &ww, &hh);
|
||||
E_FILL(mi->separator_object);
|
||||
mi->separator_w = ww;
|
||||
mi->separator_h = hh;
|
||||
evas_object_size_hint_min_set(mi->separator_object, ww, hh);
|
||||
elm_box_pack_end(mi->menu->container_object, mi->separator_object);
|
||||
evas_object_show(o);
|
||||
}
|
||||
else
|
||||
{
|
||||
o = edje_object_add(mi->menu->evas);
|
||||
mi->bg_object = o;
|
||||
evas_object_name_set(o, "mi->bg_object");
|
||||
evas_object_data_set(o, "e_menu_item", mi);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, _e_menu_cb_item_in, mi);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_OUT, _e_menu_cb_item_out, mi);
|
||||
evas_object_intercept_move_callback_add(o, _e_menu_cb_intercept_item_move, mi);
|
||||
|
@ -1429,11 +1428,7 @@ no_submenu_item:
|
|||
e_theme_edje_object_set(mi->bg_object, "base/theme/menus",
|
||||
"e/widgets/menu/default/item_bg");
|
||||
}
|
||||
evas_object_show(o);
|
||||
|
||||
o = elm_box_add(e_comp->elm);
|
||||
evas_object_name_set(o, "mi->container_object");
|
||||
elm_box_homogeneous_set(o, 0);
|
||||
mi->container_object = o;
|
||||
elm_box_horizontal_set(o, 1);
|
||||
evas_object_show(o);
|
||||
|
@ -1442,39 +1437,36 @@ no_submenu_item:
|
|||
if (mi->check)
|
||||
{
|
||||
o = edje_object_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->toggle_object");
|
||||
mi->toggle_object = o;
|
||||
e_theme_edje_object_set(o, "base/theme/menus",
|
||||
"e/widgets/menu/default/check");
|
||||
evas_object_show(o);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
edje_object_size_min_calc(mi->toggle_object, &ww, &hh);
|
||||
mi->toggle_w = ww;
|
||||
mi->toggle_h = hh;
|
||||
E_WEIGHT(mi->toggle_object, 0, 1);
|
||||
E_FILL(mi->toggle_object);
|
||||
evas_object_size_hint_min_set(mi->toggle_object, ww, hh);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
evas_object_show(o);
|
||||
}
|
||||
else if (mi->radio)
|
||||
{
|
||||
o = edje_object_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->toggle_object");
|
||||
mi->toggle_object = o;
|
||||
e_theme_edje_object_set(o, "base/theme/menus",
|
||||
"e/widgets/menu/default/radio");
|
||||
evas_object_show(o);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
edje_object_size_min_calc(mi->toggle_object, &ww, &hh);
|
||||
mi->toggle_w = ww;
|
||||
mi->toggle_h = hh;
|
||||
E_WEIGHT(mi->toggle_object, 0, 1);
|
||||
E_FILL(mi->toggle_object);
|
||||
evas_object_size_hint_min_set(mi->toggle_object, ww, hh);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
evas_object_show(o);
|
||||
}
|
||||
else
|
||||
{
|
||||
o = evas_object_rectangle_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->toggle_object");
|
||||
mi->toggle_object = o;
|
||||
evas_object_color_set(o, 0, 0, 0, 0);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
|
@ -1487,9 +1479,7 @@ no_submenu_item:
|
|||
if (e_theme_edje_object_set(o, "base/theme/menus",
|
||||
"e/widgets/menu/default/icon"))
|
||||
{
|
||||
evas_object_name_set(o, "mi->icon_bg_object");
|
||||
mi->icon_bg_object = o;
|
||||
evas_object_show(o);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1519,7 +1509,6 @@ no_submenu_item:
|
|||
if (edje_object_file_set(o, mi->icon, mi->icon_key))
|
||||
{
|
||||
mi->icon_object = o;
|
||||
evas_object_name_set(o, "mi->icon_object");
|
||||
edje_object_size_max_get(o, &iww, &ihh);
|
||||
icon_w = iww;
|
||||
icon_h = ihh;
|
||||
|
@ -1533,7 +1522,6 @@ no_submenu_item:
|
|||
if (!mi->icon_object)
|
||||
{
|
||||
o = e_icon_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->icon_object");
|
||||
mi->icon_object = o;
|
||||
e_icon_scale_size_set(o, e_util_icon_size_normalize(96 * e_scale));
|
||||
e_icon_preload_set(mi->icon_object, 1);
|
||||
|
@ -1560,28 +1548,28 @@ no_submenu_item:
|
|||
edje_object_size_min_calc(mi->icon_bg_object, &ww, &hh);
|
||||
mi->icon_w = ww;
|
||||
mi->icon_h = hh;
|
||||
elm_box_pack_end(mi->container_object, mi->icon_bg_object);
|
||||
evas_object_size_hint_min_set(mi->icon_bg_object, ww, hh);
|
||||
E_WEIGHT(mi->icon_bg_object, 0, 1);
|
||||
E_FILL(mi->icon_bg_object);
|
||||
evas_object_size_hint_min_set(mi->icon_bg_object, ww, hh);
|
||||
elm_box_pack_end(mi->container_object, mi->icon_bg_object);
|
||||
evas_object_show(mi->icon_bg_object);
|
||||
}
|
||||
else
|
||||
{
|
||||
o = edje_object_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->icon_bg_object");
|
||||
e_icon_size_get(mi->icon_object, &icon_w, &icon_h);
|
||||
mi->icon_w = icon_w;
|
||||
mi->icon_h = icon_h;
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
E_WEIGHT(mi->icon_object, 0, 1);
|
||||
E_FILL(mi->icon_bg_object);
|
||||
evas_object_size_hint_min_set(mi->icon_object, ww, hh);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
evas_object_show(o);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
o = evas_object_rectangle_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->icon_object");
|
||||
mi->icon_object = o;
|
||||
evas_object_color_set(o, 0, 0, 0, 0);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
|
@ -1590,25 +1578,23 @@ no_submenu_item:
|
|||
if (mi->label)
|
||||
{
|
||||
o = edje_object_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->label_object");
|
||||
mi->label_object = o;
|
||||
e_theme_edje_object_set(o, "base/theme/menus",
|
||||
"e/widgets/menu/default/label");
|
||||
/* default label */
|
||||
edje_object_part_text_set(o, "e.text.label", mi->label);
|
||||
evas_object_show(o);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
edje_object_size_min_calc(mi->label_object, &ww, &hh);
|
||||
mi->label_w = ww;
|
||||
mi->label_h = hh;
|
||||
evas_object_size_hint_min_set(mi->label_object, ww, hh);
|
||||
E_EXPAND(mi->label_object);
|
||||
E_FILL(mi->label_object);
|
||||
evas_object_size_hint_min_set(mi->label_object, ww, hh);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
evas_object_show(o);
|
||||
}
|
||||
else
|
||||
{
|
||||
o = evas_object_rectangle_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->label_object");
|
||||
mi->label_object = o;
|
||||
evas_object_color_set(o, 0, 0, 0, 0);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
|
@ -1616,23 +1602,21 @@ no_submenu_item:
|
|||
if ((mi->submenu) || (mi->submenu_pre_cb.func))
|
||||
{
|
||||
o = edje_object_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->submenu_object");
|
||||
mi->submenu_object = o;
|
||||
e_theme_edje_object_set(o, "base/theme/menus",
|
||||
"e/widgets/menu/default/submenu");
|
||||
evas_object_show(o);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
edje_object_size_min_calc(mi->submenu_object, &ww, &hh);
|
||||
mi->submenu_w = ww;
|
||||
mi->submenu_h = hh;
|
||||
E_WEIGHT(mi->submenu_object, 0, 1);
|
||||
E_FILL(mi->submenu_object);
|
||||
evas_object_size_hint_min_set(mi->submenu_object, ww, hh);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
evas_object_show(o);
|
||||
}
|
||||
else
|
||||
{
|
||||
o = evas_object_rectangle_add(mi->menu->evas);
|
||||
evas_object_name_set(o, "mi->submenu_object");
|
||||
mi->submenu_object = o;
|
||||
evas_object_color_set(o, 0, 0, 0, 0);
|
||||
elm_box_pack_end(mi->container_object, o);
|
||||
|
@ -1642,6 +1626,8 @@ no_submenu_item:
|
|||
mi->container_object);
|
||||
|
||||
elm_box_pack_end(mi->menu->container_object, mi->bg_object);
|
||||
evas_object_show(mi->container_object);
|
||||
evas_object_show(mi->bg_object);
|
||||
}
|
||||
if (mi->active) e_menu_item_active_set(mi, 1);
|
||||
if (mi->toggle) e_menu_item_toggle_set(mi, 1);
|
||||
|
@ -1665,7 +1651,6 @@ _e_menu_realize(E_Menu *m)
|
|||
|
||||
o = edje_object_add(m->evas);
|
||||
m->bg_object = o;
|
||||
evas_object_name_set(o, "menu->bg_object");
|
||||
e_theme_edje_object_set(o, "base/theme/menus", "e/widgets/menu/default/background");
|
||||
if (m->header.title)
|
||||
{
|
||||
|
@ -1675,28 +1660,25 @@ _e_menu_realize(E_Menu *m)
|
|||
}
|
||||
|
||||
m->comp_object = e_comp_object_util_add(o, E_COMP_OBJECT_TYPE_MENU);
|
||||
evas_object_data_set(m->comp_object, "E_Menu", m);
|
||||
if (!m->parent_item)
|
||||
e_comp_object_util_autoclose(m->comp_object, _e_menu_cb_mouse_evas_down, _e_menu_cb_key_down, m);
|
||||
evas_object_name_set(m->comp_object, "m->comp_object");
|
||||
evas_object_event_callback_add(m->comp_object, EVAS_CALLBACK_HIDE, _e_menu_hide_cb, m);
|
||||
evas_object_layer_set(m->comp_object, E_LAYER_MENU);
|
||||
evas_object_move(m->comp_object, m->cur.x, m->cur.y);
|
||||
evas_object_resize(m->comp_object, m->cur.w, m->cur.h);
|
||||
evas_object_geometry_set(m->comp_object, m->cur.x, m->cur.y, m->cur.w, m->cur.h);
|
||||
|
||||
o = elm_box_add(e_comp->elm);
|
||||
evas_object_name_set(o, "menu->container_object");
|
||||
m->container_object = o;
|
||||
evas_object_intercept_move_callback_add(o, _e_menu_cb_intercept_container_move, m);
|
||||
evas_object_intercept_resize_callback_add(o, _e_menu_cb_intercept_container_resize, m);
|
||||
elm_box_homogeneous_set(o, 0);
|
||||
edje_object_part_swallow(m->bg_object, "e.swallow.content", m->container_object);
|
||||
|
||||
EINA_LIST_FOREACH(m->items, l, mi)
|
||||
_e_menu_item_realize(mi);
|
||||
|
||||
edje_object_part_swallow(m->bg_object, "e.swallow.content", m->container_object);
|
||||
|
||||
_e_menu_items_layout_update(m);
|
||||
|
||||
|
||||
evas_event_thaw(m->evas);
|
||||
m->realized = 1;
|
||||
}
|
||||
|
@ -1833,8 +1815,6 @@ _e_menu_items_layout_update(E_Menu *m)
|
|||
|
||||
evas_object_size_hint_min_set(mi->container_object,
|
||||
min_w, min_h);
|
||||
edje_object_part_swallow(mi->bg_object, "e.swallow.content",
|
||||
mi->container_object);
|
||||
edje_object_size_min_calc(mi->bg_object, &mw, &mh);
|
||||
E_WEIGHT(mi->bg_object, 0, 1);
|
||||
E_FILL(mi->bg_object);
|
||||
|
@ -1844,7 +1824,6 @@ _e_menu_items_layout_update(E_Menu *m)
|
|||
elm_box_recalculate(m->container_object);
|
||||
evas_object_size_hint_min_get(m->container_object, &bw, &bh);
|
||||
evas_object_size_hint_max_set(m->container_object, bw, bh);
|
||||
edje_object_part_swallow(m->bg_object, "e.swallow.content", m->container_object);
|
||||
edje_object_size_min_calc(m->bg_object, &mw, &mh);
|
||||
m->cur.w = mw;
|
||||
m->cur.h = mh;
|
||||
|
|
|
@ -881,6 +881,41 @@ _e_test_internal(void)
|
|||
ecore_timer_loop_add(1.0, _e_test_timer, c);
|
||||
}
|
||||
|
||||
#elif 0
|
||||
static Eina_Bool
|
||||
_e_test_timer(void *data EINA_UNUSED)
|
||||
{
|
||||
static int showhide = 0;
|
||||
static E_Menu *m = NULL;
|
||||
|
||||
if (showhide & 0x1)
|
||||
{
|
||||
printf("del menu\n");
|
||||
e_menu_deactivate(m);
|
||||
e_object_del(E_OBJECT(m));
|
||||
}
|
||||
else
|
||||
{
|
||||
int x, y;
|
||||
E_Zone *zone = e_zone_current_get();
|
||||
printf("add menu\n");
|
||||
m = e_int_menus_main_new();
|
||||
m->zone = zone;
|
||||
ecore_evas_pointer_xy_get(e_comp->ee, &x, &y);
|
||||
e_menu_activate_mouse(m, zone, x, y, 1, 1,
|
||||
E_MENU_POP_DIRECTION_DOWN, 0);
|
||||
}
|
||||
showhide++;
|
||||
printf("%i\n", showhide);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_test_internal(void)
|
||||
{
|
||||
ecore_timer_loop_add(2.0, _e_test_timer, NULL);
|
||||
}
|
||||
|
||||
#else
|
||||
static void
|
||||
_e_test_internal(void)
|
||||
|
|
Loading…
Reference in New Issue