diff --git a/legacy/elementary/src/lib/elm_box.c b/legacy/elementary/src/lib/elm_box.c index 75a926bf29..b56810bfad 100644 --- a/legacy/elementary/src/lib/elm_box.c +++ b/legacy/elementary/src/lib/elm_box.c @@ -21,6 +21,8 @@ typedef struct _Widget_Data Widget_Data; struct _Widget_Data { Evas_Object *box; + Eina_Bool horizontal:1; + Eina_Bool homogeneous:1; }; static void _del_hook(Evas_Object *obj); @@ -70,6 +72,14 @@ _sub_del(void *data, Evas_Object *obj, void *event_info) _sizing_eval(obj); } +static void +_layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) +{ + Widget_Data *wd = data; + + _els_box_layout(o, priv, wd->horizontal, wd->homogeneous); +} + /** * Add a new box to the parent @@ -94,7 +104,10 @@ elm_box_add(Evas_Object *parent) elm_widget_data_set(obj, wd); elm_widget_del_hook_set(obj, _del_hook); - wd->box = _els_smart_box_add(e); + wd->box = evas_object_box_add(e); + /*evas_object_box_layout_set(wd->box, evas_object_box_layout_vertical, + NULL, NULL);*/ + evas_object_box_layout_set(wd->box, _layout, wd, NULL); evas_object_event_callback_add(wd->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); elm_widget_resize_object_set(obj, wd->box); @@ -120,7 +133,26 @@ EAPI void elm_box_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) { Widget_Data *wd = elm_widget_data_get(obj); - _els_smart_box_orientation_set(wd->box, horizontal); + wd->horizontal = !!horizontal; + evas_object_smart_calculate(wd->box); + /*if (wd->horizontal) + { + if (wd->homogeneous) + evas_object_box_layout_set(wd->box, + evas_object_box_layout_homogeneous_horizontal, NULL, NULL); + else + evas_object_box_layout_set(wd->box, evas_object_box_layout_horizontal, + NULL, NULL); + } + else + { + if (wd->homogeneous) + evas_object_box_layout_set(wd->box, + evas_object_box_layout_homogeneous_vertical, NULL, NULL); + else + evas_object_box_layout_set(wd->box, evas_object_box_layout_horizontal, + NULL, NULL); + }*/ } /** @@ -138,7 +170,26 @@ EAPI void elm_box_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) { Widget_Data *wd = elm_widget_data_get(obj); - _els_smart_box_homogenous_set(wd->box, homogenous); + wd->homogeneous = !!homogenous; + evas_object_smart_calculate(wd->box); + /*if (wd->horizontal) + { + if (wd->homogeneous) + evas_object_box_layout_set(wd->box, + evas_object_box_layout_homogeneous_horizontal, NULL, NULL); + else + evas_object_box_layout_set(wd->box, evas_object_box_layout_horizontal, + NULL, NULL); + } + else + { + if (wd->homogeneous) + evas_object_box_layout_set(wd->box, + evas_object_box_layout_homogeneous_vertical, NULL, NULL); + else + evas_object_box_layout_set(wd->box, evas_object_box_layout_horizontal, + NULL, NULL); + }*/ } /** @@ -157,7 +208,7 @@ elm_box_pack_start(Evas_Object *obj, Evas_Object *subobj) { Widget_Data *wd = elm_widget_data_get(obj); elm_widget_sub_object_add(obj, subobj); - _els_smart_box_pack_start(wd->box, subobj); + evas_object_box_prepend(wd->box, subobj); } /** @@ -176,7 +227,7 @@ elm_box_pack_end(Evas_Object *obj, Evas_Object *subobj) { Widget_Data *wd = elm_widget_data_get(obj); elm_widget_sub_object_add(obj, subobj); - _els_smart_box_pack_end(wd->box, subobj); + evas_object_box_append(wd->box, subobj); } /** @@ -198,7 +249,7 @@ elm_box_pack_before(Evas_Object *obj, Evas_Object *subobj, Evas_Object *before) { Widget_Data *wd = elm_widget_data_get(obj); elm_widget_sub_object_add(obj, subobj); - _els_smart_box_pack_before(wd->box, subobj, before); + evas_object_box_insert_before(wd->box, subobj, before); } /** @@ -220,7 +271,7 @@ elm_box_pack_after(Evas_Object *obj, Evas_Object *subobj, Evas_Object *after) { Widget_Data *wd = elm_widget_data_get(obj); elm_widget_sub_object_add(obj, subobj); - _els_smart_box_pack_after(wd->box, subobj, after); + evas_object_box_insert_after(wd->box, subobj, after); } /** @@ -236,7 +287,7 @@ EAPI void elm_box_clear(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - _els_smart_box_clear(wd->box); + evas_object_box_remove_all(wd->box, 1); } /** @@ -253,7 +304,7 @@ EAPI void elm_box_unpack(Evas_Object *obj, Evas_Object *subobj) { Widget_Data *wd = elm_widget_data_get(obj); - _els_smart_box_unpack(wd->box, subobj); + evas_object_box_remove(wd->box, subobj); } /** @@ -270,5 +321,5 @@ EAPI void elm_box_unpack_all(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - _els_smart_box_unpack_all(wd->box); + evas_object_box_remove_all(wd->box, 0); } diff --git a/legacy/elementary/src/lib/elm_carousel.c b/legacy/elementary/src/lib/elm_carousel.c index 5a9b3e964c..4351164d84 100644 --- a/legacy/elementary/src/lib/elm_carousel.c +++ b/legacy/elementary/src/lib/elm_carousel.c @@ -175,9 +175,9 @@ elm_carousel_add(Evas_Object *parent) wd->icon_size = 32; - wd->bx = _els_smart_box_add(e); - _els_smart_box_orientation_set(wd->bx, 1); - _els_smart_box_homogenous_set(wd->bx, 1); + wd->bx = evas_object_box_add(e); + evas_object_box_layout_set(wd->bx, + evas_object_box_layout_homogeneous_horizontal, NULL, NULL); elm_widget_sub_object_add(obj, wd->bx); elm_smart_scroller_child_set(wd->scr, wd->bx); evas_object_show(wd->bx); @@ -223,7 +223,7 @@ elm_carousel_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, vo evas_object_size_hint_align_set(it->base, -1.0, -1.0); evas_object_size_hint_min_set(it->base, mw, mh); evas_object_size_hint_max_set(it->base, 9999, mh); - _els_smart_box_pack_end(wd->bx, it->base); + evas_object_box_append(wd->bx, it->base); evas_object_show(it->base); _sizing_eval(obj); return it; diff --git a/legacy/elementary/src/lib/elm_index.c b/legacy/elementary/src/lib/elm_index.c index 1bb7ad6d2f..e8fe4e9593 100644 --- a/legacy/elementary/src/lib/elm_index.c +++ b/legacy/elementary/src/lib/elm_index.c @@ -66,6 +66,14 @@ _del_hook(Evas_Object *obj) free(wd); } +static void +_layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) +{ + Widget_Data *wd = data; + + _els_box_layout(o, priv, wd->horizontal, 1); +} + static void _theme_hook(Evas_Object *obj) { @@ -83,9 +91,8 @@ _theme_hook(Evas_Object *obj) { if (!wd->bx[1]) { - wd->bx[1] = _els_smart_box_add(evas_object_evas_get(wd->base)); - _els_smart_box_orientation_set(wd->bx[1], wd->horizontal); - _els_smart_box_homogenous_set(wd->bx[1], 1); + wd->bx[1] = evas_object_box_add(wd->base); + evas_object_box_layout_set(wd->bx[1], _layout, wd, NULL); elm_widget_sub_object_add(obj, wd->bx[1]); } edje_object_part_swallow(wd->base, "elm.swallow.index.1", wd->bx[1]); @@ -209,7 +216,7 @@ _index_box_auto_fill(Evas_Object *obj, Evas_Object *box, int level) evas_object_size_hint_weight_set(o, 1.0, 1.0); evas_object_size_hint_align_set(o, -1.0, -1.0); elm_widget_sub_object_add(obj, o); - _els_smart_box_pack_end(box, o); + evas_object_box_append(box, o); stacking = edje_object_data_get(o, "stacking"); if (stacking) { @@ -528,18 +535,16 @@ elm_index_add(Evas_Object *parent) elm_widget_sub_object_add(obj, o); } - wd->bx[0] = _els_smart_box_add(e); - _els_smart_box_orientation_set(wd->bx[0], 0); - _els_smart_box_homogenous_set(wd->bx[0], 1); + wd->bx[0] = evas_object_box_add(e); + evas_object_box_layout_set(wd->bx[0], _layout, wd, NULL); elm_widget_sub_object_add(obj, wd->bx[0]); edje_object_part_swallow(wd->base, "elm.swallow.index.0", wd->bx[0]); evas_object_show(wd->bx[0]); if (edje_object_part_exists(wd->base, "elm.swallow.index.1")) { - wd->bx[1] = _els_smart_box_add(e); - _els_smart_box_orientation_set(wd->bx[1], 0); - _els_smart_box_homogenous_set(wd->bx[1], 1); + wd->bx[1] = evas_object_box_add(e); + evas_object_box_layout_set(wd->bx[1], _layout, wd, NULL); elm_widget_sub_object_add(obj, wd->bx[1]); edje_object_part_swallow(wd->base, "elm.swallow.index.1", wd->bx[1]); evas_object_show(wd->bx[1]); diff --git a/legacy/elementary/src/lib/elm_toolbar.c b/legacy/elementary/src/lib/elm_toolbar.c index d2c08b3f00..e1ea85f345 100644 --- a/legacy/elementary/src/lib/elm_toolbar.c +++ b/legacy/elementary/src/lib/elm_toolbar.c @@ -9,6 +9,7 @@ struct _Widget_Data Eina_List *items; int icon_size; Eina_Bool scrollable : 1; + Eina_Bool homogeneous : 1; }; struct _Elm_Toolbar_Item @@ -159,6 +160,7 @@ _sizing_eval(Evas_Object *obj) Evas_Coord w, h; if (!wd) return; + evas_object_smart_calculate(wd->bx); edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &minw, &minh); evas_object_geometry_get(obj, NULL, NULL, &w, &h); @@ -217,6 +219,14 @@ _select(void *data, Evas_Object *obj, const char *emission, const char *source) _item_select(data); } +static void +_layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) +{ + Widget_Data *wd = data; + + _els_box_layout(o, priv, 1, wd->homogeneous); +} + EAPI Evas_Object * elm_toolbar_add(Evas_Object *parent) { @@ -244,10 +254,10 @@ elm_toolbar_add(Evas_Object *parent) wd->icon_size = 32; wd->scrollable = EINA_TRUE; + wd->homogeneous = EINA_TRUE; - wd->bx = _els_smart_box_add(e); - _els_smart_box_orientation_set(wd->bx, 1); - _els_smart_box_homogenous_set(wd->bx, 1); + wd->bx = evas_object_box_add(e); + evas_object_box_layout_set(wd->bx, _layout, wd, NULL); elm_widget_sub_object_add(obj, wd->bx); elm_smart_scroller_child_set(wd->scr, wd->bx); evas_object_show(wd->bx); @@ -320,7 +330,7 @@ elm_toolbar_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, voi evas_object_size_hint_align_set(it->base, -1.0, -1.0); evas_object_size_hint_min_set(it->base, mw, mh); evas_object_size_hint_max_set(it->base, 9999, mh); - _els_smart_box_pack_end(wd->bx, it->base); + evas_object_box_append(wd->bx, it->base); evas_object_show(it->base); _sizing_eval(obj); return it; @@ -417,6 +427,7 @@ elm_toolbar_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - _els_smart_box_homogenous_set(wd->bx, homogenous); + wd->homogeneous = !!homogenous; + evas_object_smart_calculate(wd->bx); } diff --git a/legacy/elementary/src/lib/els_box.c b/legacy/elementary/src/lib/els_box.c index b4a7e0121a..3d6d2c8a62 100644 --- a/legacy/elementary/src/lib/els_box.c +++ b/legacy/elementary/src/lib/els_box.c @@ -1,255 +1,53 @@ #include #include "elm_priv.h" -typedef struct _Smart_Data Smart_Data; -typedef struct _Box_Item Box_Item; - -struct _Smart_Data -{ - Evas_Coord x, y, w, h; - Evas_Object *obj, *clip; - Eina_Bool changed : 1; - Eina_Bool horizontal : 1; - Eina_Bool homogenous : 1; - Eina_Bool deleting : 1; - Eina_List *items; -}; - -/* local subsystem functions */ -static void _smart_adopt(Smart_Data *sd, Evas_Object *obj); -static void _smart_disown(Evas_Object *obj); -static void _smart_item_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _smart_item_changed_size_hints_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); -static void _smart_reconfigure(Smart_Data *sd); -static void _smart_extents_calculate(Smart_Data *sd); -static void _smart_init(void); -static void _smart_add(Evas_Object *obj); -static void _smart_del(Evas_Object *obj); -static void _smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); -static void _smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); -static void _smart_show(Evas_Object *obj); -static void _smart_hide(Evas_Object *obj); -static void _smart_color_set(Evas_Object *obj, int r, int g, int b, int a); -static void _smart_clip_set(Evas_Object *obj, Evas_Object *clip); -static void _smart_clip_unset(Evas_Object *obj); - -/* local subsystem globals */ -static Evas_Smart *_e_smart = NULL; - -/* externally accessible functions */ -Evas_Object * -_els_smart_box_add(Evas *evas) +static void +_smart_extents_calculate(Evas_Object *box, Evas_Object_Box_Data *priv, int horizontal, int homogeneous) { - _smart_init(); - return evas_object_smart_add(evas, _e_smart); -} - -void -_els_smart_box_orientation_set(Evas_Object *obj, int horizontal) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - if (sd->horizontal == horizontal) return; - sd->horizontal = horizontal; - _smart_reconfigure(sd); -} - -int -_els_smart_box_orientation_get(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return 0; - return sd->horizontal; -} - -void -_els_smart_box_homogenous_set(Evas_Object *obj, int homogenous) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - if (sd->homogenous == homogenous) return; - sd->homogenous = homogenous; - _smart_reconfigure(sd); -} - -int -_els_smart_box_pack_start(Evas_Object *obj, Evas_Object *child) -{ - Smart_Data *sd; - - if (!child) return 0; - sd = evas_object_smart_data_get(obj); - if (!sd) return 0; - _smart_adopt(sd, child); - sd->items = eina_list_prepend(sd->items, child); - _smart_reconfigure(sd); - return 0; -} - -int -_els_smart_box_pack_end(Evas_Object *obj, Evas_Object *child) -{ - Smart_Data *sd; - - if (!child) return 0; - sd = evas_object_smart_data_get(obj); - if (!sd) return 0; - _smart_adopt(sd, child); - sd->items = eina_list_append(sd->items, child); - _smart_reconfigure(sd); - return eina_list_count(sd->items) - 1; -} - -static int -_els_smart_box_find(const Smart_Data *sd, const Evas_Object *child) -{ - int i = 0; + Evas_Coord minw, minh, maxw, maxh, mnw, mnh; const Eina_List *l; - const Evas_Object *oitr; + Evas_Object_Box_Option *opt; - EINA_LIST_FOREACH(sd->items, l, oitr) + /* FIXME: need to calc max */ + minw = 0; + minh = 0; + maxw = -1; + maxh = -1; + if (homogeneous) { - if (oitr == child) return i; - i++; + EINA_LIST_FOREACH(priv->children, l, opt) + { + evas_object_size_hint_min_get(opt->obj, &mnw, &mnh); + if (minh < mnh) minh = mnh; + if (minw < mnw) minw = mnw; + } + if (horizontal) + minw *= eina_list_count(priv->children); + else + minh *= eina_list_count(priv->children); } - return -1; -} - -int -_els_smart_box_pack_before(Evas_Object *obj, Evas_Object *child, Evas_Object *before) -{ - Smart_Data *sd; - - if (!child) return 0; - sd = evas_object_smart_data_get(obj); - if (!sd) return 0; - _smart_adopt(sd, child); - sd->items = eina_list_prepend_relative(sd->items, child, before); - _smart_reconfigure(sd); - return _els_smart_box_find(sd, child); -} - -int -_els_smart_box_pack_after(Evas_Object *obj, Evas_Object *child, Evas_Object *after) -{ - Smart_Data *sd; - - if (!child) return 0; - sd = evas_object_smart_data_get(obj); - if (!sd) return 0; - _smart_adopt(sd, child); - sd->items = eina_list_append_relative(sd->items, child, after); - _smart_reconfigure(sd); - return _els_smart_box_find(sd, child); + else + { + EINA_LIST_FOREACH(priv->children, l, opt) + { + evas_object_size_hint_min_get(opt->obj, &mnw, &mnh); + if (horizontal) + { + if (minh < mnh) minh = mnh; + minw += mnw; + } + else + { + if (minw < mnw) minw = mnw; + minh += mnh; + } + } + } + evas_object_size_hint_min_set(box, minw, minh); } void -_els_smart_box_unpack(Evas_Object *obj, Evas_Object *child) -{ - Smart_Data *sd; - - if (!obj) return; - sd = evas_object_smart_data_get(obj); - if (!sd) return; - sd->items = eina_list_remove(sd->items, child); - elm_widget_sub_object_del(obj, child); - _smart_disown(child); - if (!sd->deleting) - { - if (!evas_object_clipees_get(sd->clip)) - evas_object_hide(sd->clip); - _smart_reconfigure(sd); - } -} - -void -_els_smart_box_unpack_all(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - while (sd->items) - { - Evas_Object *child = sd->items->data; - - _els_smart_box_unpack(obj, child); - } -} - -void -_els_smart_box_clear(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - while (sd->items) - { - Evas_Object *child = sd->items->data; - - evas_object_del(child); - } -} - -/* local subsystem functions */ -static void -_smart_adopt(Smart_Data *sd, Evas_Object *obj) -{ - evas_object_clip_set(obj, sd->clip); - evas_object_smart_member_add(obj, sd->obj); - evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, - _smart_item_del_hook, NULL); - evas_object_event_callback_add(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _smart_item_changed_size_hints_hook, NULL); - if ((!evas_object_visible_get(sd->clip)) && - (evas_object_visible_get(sd->obj))) - evas_object_show(sd->clip); -} - -static void -_smart_disown(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(evas_object_smart_parent_get(obj)); - if (!sd) return; - if (sd->items) - { - if (evas_object_visible_get(sd->clip)) - evas_object_hide(sd->clip); - } - evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL, - _smart_item_del_hook); - evas_object_event_callback_del(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _smart_item_changed_size_hints_hook); - evas_object_smart_member_del(obj); - evas_object_clip_unset(obj); -} - -static void -_smart_item_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) -{ - _els_smart_box_unpack(evas_object_smart_parent_get(obj), obj); -} - -static void -_smart_item_changed_size_hints_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(evas_object_smart_parent_get(obj)); - _smart_reconfigure(sd); -} - -static void -_smart_reconfigure(Smart_Data *sd) +_els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, int horizontal, int homogeneous) { Evas_Coord x, y, w, h, xx, yy; const Eina_List *l; @@ -257,17 +55,15 @@ _smart_reconfigure(Smart_Data *sd) Evas_Coord minw, minh, wdif, hdif; int count = 0, expand = 0; double ax, ay; + Evas_Object_Box_Option *opt; - _smart_extents_calculate(sd); + _smart_extents_calculate(o, priv, horizontal, homogeneous); - x = sd->x; - y = sd->y; - w = sd->w; - h = sd->h; + evas_object_geometry_get(o, &x, &y, &w, &h); - evas_object_size_hint_min_get(sd->obj, &minw, &minh); - evas_object_size_hint_align_get(sd->obj, &ax, &ay); - count = eina_list_count(sd->items); + evas_object_size_hint_min_get(o, &minw, &minh); + evas_object_size_hint_align_get(o, &ax, &ay); + count = eina_list_count(priv->children); if (w < minw) { x = x + ((w - minw) * (1.0 - ax)); @@ -278,12 +74,12 @@ _smart_reconfigure(Smart_Data *sd) y = y + ((h - minh) * (1.0 - ay)); h = minh; } - EINA_LIST_FOREACH(sd->items, l, obj) + EINA_LIST_FOREACH(priv->children, l, opt) { double wx, wy; - evas_object_size_hint_weight_get(obj, &wx, &wy); - if (sd->horizontal) + evas_object_size_hint_weight_get(opt->obj, &wx, &wy); + if (horizontal) { if (wx > 0.0) expand++; } @@ -294,8 +90,8 @@ _smart_reconfigure(Smart_Data *sd) } if (expand == 0) { - evas_object_size_hint_align_get(sd->obj, &ax, &ay); - if (sd->horizontal) + evas_object_size_hint_align_get(o, &ax, &ay); + if (horizontal) { x += (double)(w - minw) * ax; w = minw; @@ -310,12 +106,13 @@ _smart_reconfigure(Smart_Data *sd) hdif = h - minh; xx = x; yy = y; - EINA_LIST_FOREACH(sd->items, l, obj) + EINA_LIST_FOREACH(priv->children, l, opt) { Evas_Coord mnw, mnh, mxw, mxh; double wx, wy; int fw, fh, xw, xh; + obj = opt->obj; evas_object_size_hint_align_get(obj, &ax, &ay); evas_object_size_hint_weight_get(obj, &wx, &wy); evas_object_size_hint_min_get(obj, &mnw, &mnh); @@ -326,9 +123,9 @@ _smart_reconfigure(Smart_Data *sd) if (ay == -1.0) {fh = 1; ay = 0.5;} if (wx > 0.0) xw = 1; if (wy > 0.0) xh = 1; - if (sd->horizontal) + if (horizontal) { - if (sd->homogenous) + if (homogeneous) { Evas_Coord ww, hh, ow, oh; @@ -336,13 +133,13 @@ _smart_reconfigure(Smart_Data *sd) hh = h; ow = mnw; if (fw) ow = ww; - if ((mxw >= 0) && (mxw < ow)) + if ((mxw >= 0) && (mxw < ow)) ow = mxw; oh = mnh; if (fh) oh = hh; - if ((mxh >= 0) && (mxh < oh)) + if ((mxh >= 0) && (mxh < oh)) oh = mxh; - evas_object_move(obj, + evas_object_move(obj, xx + (Evas_Coord)(((double)(ww - ow)) * ax), yy + (Evas_Coord)(((double)(hh - oh)) * ay)); evas_object_resize(obj, ow, oh); @@ -367,7 +164,7 @@ _smart_reconfigure(Smart_Data *sd) oh = mnh; if (fh) oh = hh; if ((mxh >= 0) && (mxh < oh)) oh = mxh; - evas_object_move(obj, + evas_object_move(obj, xx + (Evas_Coord)(((double)(ww - ow)) * ax), yy + (Evas_Coord)(((double)(hh - oh)) * ay)); evas_object_resize(obj, ow, oh); @@ -376,7 +173,7 @@ _smart_reconfigure(Smart_Data *sd) } else { - if (sd->homogenous) + if (homogeneous) { Evas_Coord ww, hh, ow, oh; @@ -388,7 +185,7 @@ _smart_reconfigure(Smart_Data *sd) oh = mnh; if (fh) oh = hh; if ((mxh >= 0) && (mxh < oh)) oh = mxh; - evas_object_move(obj, + evas_object_move(obj, xx + (Evas_Coord)(((double)(ww - ow)) * ax), yy + (Evas_Coord)(((double)(hh - oh)) * ay)); evas_object_resize(obj, ow, oh); @@ -413,7 +210,7 @@ _smart_reconfigure(Smart_Data *sd) oh = mnh; if (fh) oh = hh; if ((mxh >= 0) && (mxh < oh)) oh = mxh; - evas_object_move(obj, + evas_object_move(obj, xx + (Evas_Coord)(((double)(ww - ow)) * ax), yy + (Evas_Coord)(((double)(hh - oh)) * ay)); evas_object_resize(obj, ow, oh); @@ -423,195 +220,3 @@ _smart_reconfigure(Smart_Data *sd) } } -static void -_smart_extents_calculate(Smart_Data *sd) -{ - Evas_Coord minw, minh, maxw, maxh, mnw, mnh; - const Eina_List *l; - const Evas_Object *obj; - - /* FIXME: need to calc max */ - minw = 0; - minh = 0; - maxw = -1; - maxh = -1; - if (sd->homogenous) - { - EINA_LIST_FOREACH(sd->items, l, obj) - { - evas_object_size_hint_min_get(obj, &mnw, &mnh); - if (minh < mnh) minh = mnh; - if (minw < mnw) minw = mnw; - } - if (sd->horizontal) - minw *= eina_list_count(sd->items); - else - minh *= eina_list_count(sd->items); - } - else - { - EINA_LIST_FOREACH(sd->items, l, obj) - { - evas_object_size_hint_min_get(obj, &mnw, &mnh); - if (sd->horizontal) - { - if (minh < mnh) minh = mnh; - minw += mnw; - } - else - { - if (minw < mnw) minw = mnw; - minh += mnh; - } - } - } - evas_object_size_hint_min_set(sd->obj, minw, minh); -} - -static void -_smart_init(void) -{ - if (_e_smart) return; - { - static const Evas_Smart_Class sc = - { - "els_box", - EVAS_SMART_CLASS_VERSION, - _smart_add, - _smart_del, - _smart_move, - _smart_resize, - _smart_show, - _smart_hide, - _smart_color_set, - _smart_clip_set, - _smart_clip_unset, - NULL, - NULL, - NULL, - NULL - }; - _e_smart = evas_smart_class_new(&sc); - } -} - -static void -_smart_add(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = calloc(1, sizeof(Smart_Data)); - if (!sd) return; - sd->obj = obj; - sd->clip = evas_object_rectangle_add(evas_object_evas_get(obj)); - evas_object_smart_member_add(sd->clip, obj); - evas_object_move(sd->clip, -100004, -100004); - evas_object_resize(sd->clip, 200008, 200008); - evas_object_color_set(sd->clip, 255, 255, 255, 255); - evas_object_smart_data_set(obj, sd); -} - -static void -_smart_del(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - sd->deleting = EINA_TRUE; - while (sd->items) - { - Evas_Object *child; - - child = sd->items->data; - _els_smart_box_unpack(obj, child); - } - evas_object_del(sd->clip); - free(sd); - evas_object_smart_data_set(obj, NULL); -} - -static void -_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) -{ - Smart_Data *sd; - const Eina_List *l; - Evas_Object *child; - Evas_Coord dx, dy; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - dx = x - sd->x; - dy = y - sd->y; - sd->x = x; - sd->y = y; - EINA_LIST_FOREACH(sd->items, l, child) - { - Evas_Coord ox, oy; - - evas_object_geometry_get(child, &ox, &oy, NULL, NULL); - evas_object_move(child, ox + dx, oy + dy); - } -} - -static void -_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - sd->w = w; - sd->h = h; - _smart_reconfigure(sd); -} - -static void -_smart_show(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - if (sd->items) evas_object_show(sd->clip); -} - -static void -_smart_hide(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - evas_object_hide(sd->clip); -} - -static void -_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - evas_object_color_set(sd->clip, r, g, b, a); -} - -static void -_smart_clip_set(Evas_Object *obj, Evas_Object *clip) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - evas_object_clip_set(sd->clip, clip); -} - -static void -_smart_clip_unset(Evas_Object *obj) -{ - Smart_Data *sd; - - sd = evas_object_smart_data_get(obj); - if (!sd) return; - evas_object_clip_unset(sd->clip); -} diff --git a/legacy/elementary/src/lib/els_box.h b/legacy/elementary/src/lib/els_box.h index b285ab115e..e394884b73 100644 --- a/legacy/elementary/src/lib/els_box.h +++ b/legacy/elementary/src/lib/els_box.h @@ -1,11 +1 @@ -Evas_Object *_els_smart_box_add (Evas *evas); -void _els_smart_box_orientation_set (Evas_Object *obj, int horizontal); -int _els_smart_box_orientation_get (Evas_Object *obj); -void _els_smart_box_homogenous_set (Evas_Object *obj, int homogenous); -int _els_smart_box_pack_start (Evas_Object *obj, Evas_Object *child); -int _els_smart_box_pack_end (Evas_Object *obj, Evas_Object *child); -int _els_smart_box_pack_before (Evas_Object *obj, Evas_Object *child, Evas_Object *before); -int _els_smart_box_pack_after (Evas_Object *obj, Evas_Object *child, Evas_Object *after); -void _els_smart_box_unpack (Evas_Object *obj, Evas_Object *child); -void _els_smart_box_unpack_all (Evas_Object *obj); -void _els_smart_box_clear (Evas_Object *obj); +void _els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, int horizontal, int homogeneous);