Luncher: Begin work to handle engage sizing correctly.

This commit is contained in:
Stephen 'Okra' Houston 2017-03-08 18:21:15 -06:00
parent 3ba67bbf3b
commit 9b211b80c3
2 changed files with 96 additions and 2 deletions

View File

@ -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);

View File

@ -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;