From 43f646f642b8cd3fae3c91270ed2688bf7fe8b3e Mon Sep 17 00:00:00 2001 From: Jee-Yong Um Date: Wed, 20 Jan 2016 21:29:12 +0900 Subject: [PATCH] elm_hoversel: fix calculation to make items fit to dropdown box Summary: While applying scroller on hoversel, several lines for item size calculation were added, but they failed to have item get proper size. Now redundant codes are removed and some are fixed, and hoversel will be shown more well-ordered. Test Plan: elementary_test hoversel Reviewers: jpeg, raster, cedric Differential Revision: https://phab.enlightenment.org/D3589 --- .../elementary/data/themes/edc/elm/hover.edc | 10 +++-- legacy/elementary/src/lib/elc_hoversel.c | 45 ++++++------------- 2 files changed, 20 insertions(+), 35 deletions(-) diff --git a/legacy/elementary/data/themes/edc/elm/hover.edc b/legacy/elementary/data/themes/edc/elm/hover.edc index cce316aecc..74757f8f47 100644 --- a/legacy/elementary/data/themes/edc/elm/hover.edc +++ b/legacy/elementary/data/themes/edc/elm/hover.edc @@ -607,7 +607,9 @@ group { name: "elm/hover/base/hoversel_vertical/default"; rel1.offset: 0 -1; rel2.to: "elm.swallow.slot.middle"; rel2.relative: 1.0 0.0; - rel2.offset: -1 -1; + /* set negative offset along x axis not to make + "select_line" part exceed parent's width */ + rel2.offset: -9 -1; } description { state: "visible" 0.0; inherit: "default" 0.0; @@ -636,10 +638,12 @@ group { name: "elm/hover/base/hoversel_vertical/default"; align: 0.0 1.0; rel1.to: "elm.swallow.slot.middle"; rel1.relative: 0.0 1.0; - rel1.offset: 0 2; + rel1.offset: 0 0; rel2.to: "elm.swallow.slot.middle"; rel2.relative: 1.0 1.0; - rel2.offset: -1 2; + /* set negative offset along x axis not to make + "select_line" part exceed parent's width */ + rel2.offset: -9 2; } description { state: "visible" 0.0; inherit: "default" 0.0; diff --git a/legacy/elementary/src/lib/elc_hoversel.c b/legacy/elementary/src/lib/elc_hoversel.c index 175e1fb9c2..eaa760be9e 100644 --- a/legacy/elementary/src/lib/elc_hoversel.c +++ b/legacy/elementary/src/lib/elc_hoversel.c @@ -202,9 +202,13 @@ _create_scroller(Evas_Object *obj, Elm_Hoversel_Data *sd) { //table sd->tbl = elm_table_add(obj); + evas_object_size_hint_align_set(sd->tbl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(sd->tbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); //spacer sd->spacer = evas_object_rectangle_add(evas_object_evas_get(obj)); + evas_object_size_hint_align_set(sd->spacer, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(sd->spacer, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_color_set(sd->spacer, 0, 0, 0, 0); elm_table_pack(sd->tbl, sd->spacer, 0, 0, 1, 1); @@ -232,44 +236,17 @@ _create_scroller(Evas_Object *obj, Elm_Hoversel_Data *sd) static void _resizing_eval(Evas_Object *obj, Elm_Hoversel_Data *sd) { - Evas_Object *bx = NULL; const char *max_size_str; int max_size = 0; char buf[128]; Evas_Coord box_w = -1, box_h = -1; - Evas_Coord x, y, w, h, xx, yy, ww, hh, vw = 0, vh = 0; - double align_x; - Eina_List *l; - Evas_Object *it; - Evas_Coord obj_x, obj_y, obj_w, obj_h, it_w, it_h; + Evas_Coord x, y, w, h, xx, yy, ww, hh; + Evas_Coord obj_x, obj_y, obj_w; - if (sd->scr) - bx = elm_object_content_get(sd->scr); + if ((!sd->expanded) || (!sd->bx)) return; - if ((!sd->expanded) || (!bx)) return; - - edje_object_size_min_calc(elm_layout_edje_get(sd->scr), &vw, &vh); - evas_object_geometry_get(obj, &obj_x, &obj_y, &obj_w, &obj_h); - - evas_object_size_hint_align_get(obj, &align_x, NULL); - if (!sd->horizontal && align_x == EVAS_HINT_FILL) - { - l = elm_box_children_get(bx); - EINA_LIST_FREE(l, it) - { - edje_object_size_min_calc(elm_layout_edje_get(it), &it_w, &it_h); - if ((obj_w - vw) > it_w) - evas_object_size_hint_min_set(it, (obj_w - vw), it_h); - else - evas_object_size_hint_min_set(it, it_w, it_h); - } - } - - elm_box_recalculate(bx); - evas_object_size_hint_min_get(bx, &box_w, &box_h); - - box_w += vw; - box_h += vh; + elm_box_recalculate(sd->bx); + evas_object_size_hint_min_get(sd->bx, &box_w, &box_h); max_size_str = elm_layout_data_get(sd->hover, "max_size"); if (max_size_str) @@ -311,6 +288,8 @@ _resizing_eval(Evas_Object *obj, Elm_Hoversel_Data *sd) xx += x; yy += y; + evas_object_geometry_get(obj, &obj_x, &obj_y, &obj_w, NULL); + if (sd->horizontal) { if (xx < obj_x) @@ -445,6 +424,8 @@ _activate(Evas_Object *obj) sd->bx = elm_box_add(sd->hover); elm_box_homogeneous_set(sd->bx, EINA_TRUE); elm_box_horizontal_set(sd->bx, sd->horizontal); + evas_object_size_hint_align_set(sd->bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(sd->bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); EINA_LIST_FOREACH(sd->items, l, eo_item) {