1 #include <Elementary.h>
6 _smart_extents_calculate(Evas_Object *box, Evas_Object_Box_Data *priv, int horizontal, int homogeneous)
8 Evas_Coord minw, minh, mnw, mnh, maxw, maxh;
10 Evas_Object_Box_Option *opt;
11 Eina_Bool max = EINA_TRUE;
20 EINA_LIST_FOREACH(priv->children, l, opt)
22 evas_object_size_hint_min_get(opt->obj, &mnw, &mnh);
23 if (minh < mnh) minh = mnh;
24 if (minw < mnw) minw = mnw;
26 evas_object_size_hint_max_get(opt->obj, &mnw, &mnh);
29 if (maxh == -1) maxh = mnh;
30 else if (maxh > mnh) maxh = mnh;
34 if (maxw == -1) maxw = mnw;
35 else if (maxw > mnw) maxw = mnw;
40 minw *= eina_list_count(priv->children);
42 maxw *= eina_list_count(priv->children);
47 minh *= eina_list_count(priv->children);
49 maxh *= eina_list_count(priv->children);
55 EINA_LIST_FOREACH(priv->children, l, opt)
57 evas_object_size_hint_min_get(opt->obj, &mnw, &mnh);
60 if (minh < mnh) minh = mnh;
65 if (minw < mnw) minw = mnw;
68 evas_object_size_hint_max_get(opt->obj, &mnw, &mnh);
80 if (maxh == -1) maxh = mnh;
81 else if (maxh > mnh) maxh = mnh;
95 if (maxw == -1) maxw = mnw;
96 else if (maxw > mnw) maxw = mnw;
101 c = eina_list_count(priv->children) - 1;
106 minw += priv->pad.h * c;
107 if (maxw != -1) maxw += priv->pad.h * c;
111 minh += priv->pad.v * c;
112 if (maxh != -1) maxh += priv->pad.v * c;
115 evas_object_size_hint_min_set(box, minw, minh);
116 evas_object_size_hint_max_set(box, maxw, maxh);
120 _els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, int horizontal, int homogeneous, int rtl)
122 Evas_Coord x, y, w, h, xx, yy;
125 Evas_Coord minw, minh;
129 Evas_Object_Box_Option *opt;
131 _smart_extents_calculate(o, priv, horizontal, homogeneous);
133 evas_object_geometry_get(o, &x, &y, &w, &h);
135 evas_object_size_hint_min_get(o, &minw, &minh);
136 evas_object_size_hint_align_get(o, &ax, &ay);
137 if ((w < minw) || (h < minh)) return;
138 count = eina_list_count(priv->children);
139 if (rtl) ax = 1.0 - ax;
143 x = x + ((w - minw) * (1.0 - ax));
148 y = y + ((h - minh) * (1.0 - ay));
151 EINA_LIST_FOREACH(priv->children, l, opt)
155 evas_object_size_hint_weight_get(opt->obj, &wx, &wy);
158 if (wx > 0.0) expand += wx;
162 if (wy > 0.0) expand += wy;
167 evas_object_size_hint_align_get(o, &ax, &ay);
168 if (rtl) ax = 1.0 - ax;
171 x += (double)(w - minw) * ax;
176 y += (double)(h - minh) * ay;
182 EINA_LIST_FOREACH(priv->children, l, opt)
184 Evas_Coord mnw, mnh, mxw, mxh;
189 evas_object_size_hint_align_get(obj, &ax, &ay);
190 evas_object_size_hint_weight_get(obj, &wx, &wy);
191 evas_object_size_hint_min_get(obj, &mnw, &mnh);
192 evas_object_size_hint_max_get(obj, &mxw, &mxh);
195 if (ax == -1.0) {fw = 1; ax = 0.5;}
196 if (ay == -1.0) {fh = 1; ay = 0.5;}
197 if (rtl) ax = 1.0 - ax;
198 if (wx > 0.0) xw = 1;
199 if (wy > 0.0) xh = 1;
202 Evas_Coord ww, hh, ow, oh;
206 ww = (w / (Evas_Coord)count);
211 if ((expand > 0) && (xw))
213 ow = ((w - minw) * wx) / expand;
220 if ((mxw >= 0) && (mxw < ow)) ow = mxw;
223 if ((mxh >= 0) && (mxh < oh)) oh = mxh;
224 evas_object_move(obj,
225 ((!rtl) ? (xx) : (x + (w - (xx - x) - ww)))
226 + (Evas_Coord)(((double)(ww - ow)) * ax),
227 yy + (Evas_Coord)(((double)(hh - oh)) * ay));
228 evas_object_resize(obj, ow, oh);
234 Evas_Coord ww, hh, ow, oh;
238 hh = (h / (Evas_Coord)count);
243 if ((expand > 0) && (xh))
245 oh = ((h - minh) * wy) / expand;
252 if ((mxw >= 0) && (mxw < ow)) ow = mxw;
255 if ((mxh >= 0) && (mxh < oh)) oh = mxh;
256 evas_object_move(obj,
257 xx + (Evas_Coord)(((double)(ww - ow)) * ax),
258 yy + (Evas_Coord)(((double)(hh - oh)) * ay));
259 evas_object_resize(obj, ow, oh);