hermet pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=6160e8bcd6d8ad38574bbde9445c6be2cd6bb956
commit 6160e8bcd6d8ad38574bbde9445c6be2cd6bb956 Author: Jee-Yong Um <jc9...@samsung.com> Date: Wed Jan 20 21:29:12 2016 +0900 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 --- data/themes/edc/elm/hover.edc | 10 +++++++--- src/lib/elc_hoversel.c | 45 +++++++++++++------------------------------ 2 files changed, 20 insertions(+), 35 deletions(-) diff --git a/data/themes/edc/elm/hover.edc b/data/themes/edc/elm/hover.edc index cce316a..74757f8 100644 --- a/data/themes/edc/elm/hover.edc +++ b/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/src/lib/elc_hoversel.c b/src/lib/elc_hoversel.c index 175e1fb..eaa760b 100644 --- a/src/lib/elc_hoversel.c +++ b/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; - - if (sd->scr) - bx = elm_object_content_get(sd->scr); - - 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); - } - } + Evas_Coord x, y, w, h, xx, yy, ww, hh; + Evas_Coord obj_x, obj_y, obj_w; - elm_box_recalculate(bx); - evas_object_size_hint_min_get(bx, &box_w, &box_h); + if ((!sd->expanded) || (!sd->bx)) return; - 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) { --