okra pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=9b211b80c37a9a672d3ca58dc4190518f3c494d4
commit 9b211b80c37a9a672d3ca58dc4190518f3c494d4 Author: Stephen 'Okra' Houston <[email protected]> Date: Wed Mar 8 18:21:15 2017 -0600 Luncher: Begin work to handle engage sizing correctly. --- src/modules/luncher/bar.c | 95 ++++++++++++++++++++++++++++++++++++++++++- src/modules/luncher/luncher.h | 3 ++ 2 files changed, 96 insertions(+), 2 deletions(-) diff --git a/src/modules/luncher/bar.c b/src/modules/luncher/bar.c index 21c4100..9f6514d 100644 --- a/src/modules/luncher/bar.c +++ b/src/modules/luncher/bar.c @@ -263,6 +263,8 @@ _bar_icon_del(Instance *inst, Icon *ic) if (ic->preview) _bar_icon_preview_hide(ic); _bar_aspect(inst); + evas_object_del(ic->o_spacera); + evas_object_del(ic->o_spacerb); evas_object_del(ic->o_icon); evas_object_del(ic->o_overlay); evas_object_del(ic->o_layout); @@ -915,7 +917,6 @@ _bar_icon_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *even if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; if (_bar_check_modifiers(ev->modifiers)) return; - evas_object_raise(ic->o_layout); elm_object_tooltip_show(obj); ic->active = EINA_TRUE; @@ -1057,6 +1058,70 @@ _bar_icon_file_set(Icon *ic, Efreet_Desktop *desktop, E_Client *non_desktop_clie elm_image_file_set(ic->o_overlay, path, k); } +static void +_bar_icon_resized(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) +{ + Instance *inst = data; + Icon *ic = NULL; + Eina_List *l = NULL; + float tot = 0.0; + + if (!inst->effect) return; + switch (e_gadget_site_orient_get(e_gadget_site_get(inst->o_main))) + { + case E_GADGET_SITE_ORIENT_VERTICAL: + EINA_LIST_FOREACH(inst->icons, l, ic) + { + tot += ic->scale; + } + evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, 1, eina_list_count(inst->icons)+tot); + break; + default: + EINA_LIST_FOREACH(inst->icons, l, ic) + tot += (ic->scale - 1.0); + evas_object_size_hint_aspect_set(inst->o_main, EVAS_ASPECT_CONTROL_BOTH, ceil(eina_list_count(inst->icons)+tot), 1); + } +} + +static void +_bar_icon_scale_message(void *data, Evas_Object *obj EINA_UNUSED, Edje_Message_Type type EINA_UNUSED, int id EINA_UNUSED, void *msg) +{ + Edje_Message_String_Float_Set *mmsg = msg; + Evas_Coord add = 0; + Icon *ic = data; + float total; + + + ic->scale = mmsg->val[0]; + + if (ic->scale > 1.0) + { + total = (ic->inst->size * ic->scale) - ic->inst->size; + add = ceil(ceil(total)/2); + switch (e_gadget_site_orient_get(e_gadget_site_get(ic->inst->o_main))) + { + case E_GADGET_SITE_ORIENT_VERTICAL: + evas_object_resize(ic->o_spacerb, ic->inst->size, add); + evas_object_size_hint_min_set(ic->o_spacerb, ic->inst->size, add); + evas_object_resize(ic->o_spacera, ic->inst->size, add); + evas_object_size_hint_min_set(ic->o_spacera, ic->inst->size, add); + break; + default: + evas_object_resize(ic->o_spacerb, add, ic->inst->size); + evas_object_size_hint_min_set(ic->o_spacerb, add, ic->inst->size); + evas_object_resize(ic->o_spacera, add, ic->inst->size); + evas_object_size_hint_min_set(ic->o_spacera, add, ic->inst->size); + } + } + else + { + evas_object_resize(ic->o_spacerb, 0, 0); + evas_object_resize(ic->o_spacera, 0, 0); + evas_object_size_hint_min_set(ic->o_spacerb, 0, 0); + evas_object_size_hint_min_set(ic->o_spacera, 0, 0); + } +} + static Icon * _bar_icon_add(Instance *inst, Efreet_Desktop *desktop, E_Client *non_desktop_client) { @@ -1079,16 +1144,31 @@ _bar_icon_add(Instance *inst, Efreet_Desktop *desktop, E_Client *non_desktop_cli ic->starting = EINA_FALSE; ic->preview_dismissed = EINA_FALSE; ic->exec = NULL; + ic->scale = 0.0; ic->o_layout = elm_layout_add(inst->o_icon_con); e_theme_edje_object_set(ic->o_layout, "e/gadget/luncher/icon", "e/gadget/luncher/icon"); E_EXPAND(ic->o_layout); E_FILL(ic->o_layout); -// edje_object_signal_callback_add(elm_layout_edje_get(ic->o_layout), "e,state,resized", "e", _bar_icon_resized, inst); + edje_object_message_handler_set(elm_layout_edje_get(ic->o_layout), _bar_icon_scale_message, ic); + edje_object_signal_callback_add(elm_layout_edje_get(ic->o_layout), "e,state,resized", "e", _bar_icon_resized, inst); elm_box_pack_end(inst->o_icon_con, ic->o_layout); evas_object_show(ic->o_layout); + ic->o_spacerb = evas_object_rectangle_add(evas_object_evas_get(ic->inst->o_icon_con)); + ic->o_spacera = evas_object_rectangle_add(evas_object_evas_get(ic->inst->o_icon_con)); + evas_object_color_set(ic->o_spacerb, 0, 0, 0, 0); + evas_object_color_set(ic->o_spacera, 0, 0, 0, 0); + evas_object_resize(ic->o_spacerb, 0, 0); + evas_object_resize(ic->o_spacera, 0, 0); + evas_object_size_hint_min_set(ic->o_spacerb, 0, 0); + evas_object_size_hint_min_set(ic->o_spacera, 0, 0); + elm_box_pack_before(ic->inst->o_icon_con, ic->o_spacerb, ic->o_layout); + elm_box_pack_after(ic->inst->o_icon_con, ic->o_spacera, ic->o_layout); + evas_object_show(ic->o_spacerb); + evas_object_show(ic->o_spacera); + snprintf(ori, sizeof(ori), "e,state,off,%s", _bar_location_get(inst)); elm_layout_signal_emit(ic->o_layout, ori, "e"); msg = alloca(sizeof(Edje_Message_String)); @@ -1630,6 +1710,12 @@ _bar_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, v Evas_Coord x, y, w, h; evas_object_geometry_get(ic->o_icon, &x, &y, &w, &h); + evas_object_resize(ic->o_spacerb, 0, 0); + evas_object_resize(ic->o_spacera, 0, 0); + evas_object_size_hint_min_set(ic->o_spacerb, 0, 0); + evas_object_size_hint_min_set(ic->o_spacera, 0, 0); + if (!E_INSIDE(px, py, x, y, w, h)) + _bar_icon_mouse_out(ic, NULL, ic->o_icon, NULL); msg = alloca(sizeof(Edje_Message_Int_Set) + (7 * sizeof(int))); msg->count = 7; msg->val[0] = px; @@ -1660,6 +1746,11 @@ _bar_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, vo { elm_layout_signal_emit(ic->o_layout, "e,state,default", "e"); elm_layout_signal_emit(ic->o_layout, "e,state,unfocused", "e"); + evas_object_resize(ic->o_spacerb, 0, 0); + evas_object_resize(ic->o_spacera, 0, 0); + evas_object_size_hint_min_set(ic->o_spacerb, 0, 0); + evas_object_size_hint_min_set(ic->o_spacera, 0, 0); + _bar_icon_mouse_out(ic, NULL, ic->o_icon, NULL); } inst->effect = EINA_FALSE; _bar_aspect(inst); diff --git a/src/modules/luncher/luncher.h b/src/modules/luncher/luncher.h index b31665e..bdda494 100644 --- a/src/modules/luncher/luncher.h +++ b/src/modules/luncher/luncher.h @@ -72,6 +72,8 @@ struct _Icon Evas_Object *o_layout; Evas_Object *o_icon; Evas_Object *o_overlay; + Evas_Object *o_spacerb; + Evas_Object *o_spacera; Evas_Object *preview; Evas_Object *preview_box; Evas_Object *preview_scroller; @@ -88,6 +90,7 @@ struct _Icon Eina_Bool active; Eina_Bool starting; Eina_Bool preview_dismissed; + float scale; struct { unsigned char start : 1; --
