els_box : Move horizontal condition out of some loop in _els_box_layout

Summary:
Almost logic of both horizontal and vertical are same except different axis in
_els_box_layout.
This patch reduced code size and improved speed little bit by moving condition
out of the loop using some extra pointer variables.

In addition, removed unnecessary check routines.
There are already similar logic for them before and after.

Reviewers: raster, seoz, cedric

Reviewed By: raster

Differential Revision: https://phab.enlightenment.org/D423
This commit is contained in:
Ryuan Choi 2014-01-13 15:47:04 +09:00 committed by Carsten Haitzler (Rasterman)
parent d4efd9b07e
commit 3a3005ffc6
1 changed files with 39 additions and 59 deletions

View File

@ -57,49 +57,44 @@ _smart_extents_calculate(Evas_Object *box, Evas_Object_Box_Data *priv, int horiz
}
else
{
/* calculate but after switched w and h for horizontal mode */
Evas_Coord *rw, *rh, *rminw, *rminh, *rmaxw, *rmaxh;
if (!horizontal)
{
rw = &mnw;
rh = &mnh;
rminw = &minw;
rminh = &minh;
rmaxw = &maxw;
rmaxh = &maxh;
}
else
{
rw = &mnh;
rh = &mnw;
rminw = &minh;
rminh = &minw;
rmaxw = &maxh;
rmaxh = &maxw;
}
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;
}
if (*rminw < *rw) *rminw = *rw;
*rminh += *rh;
evas_object_size_hint_max_get(opt->obj, &mnw, &mnh);
if (horizontal)
if (*rh < 0)
{
if (mnw < 0)
{
maxw = -1;
max = EINA_FALSE;
}
if (max) maxw += mnw;
if (mnh >= 0)
{
if (maxh == -1) maxh = mnh;
else if (maxh > mnh) maxh = mnh;
}
*rmaxh = -1;
max = EINA_FALSE;
}
else
{
if (mnh < 0)
{
maxh = -1;
max = EINA_FALSE;
}
if (max) maxh += mnh;
if (max) *rmaxh += *rh;
if (mnw >= 0)
{
if (maxw == -1) maxw = mnw;
else if (maxw > mnw) maxw = mnw;
}
if (*rw >= 0)
{
if (*rmaxw == -1) *rmaxw = *rw;
else if (*rmaxw > *rw) *rmaxw = *rw;
}
}
}
@ -133,6 +128,8 @@ _els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, int horizontal, int
int count = 0;
double expand = 0.0;
double ax, ay;
double wx, wy;
double *rwy;
Evas_Object_Box_Option *opt;
_smart_extents_calculate(o, priv, horizontal, homogeneous);
@ -140,34 +137,18 @@ _els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, int horizontal, int
evas_object_geometry_get(o, &x, &y, &w, &h);
evas_object_size_hint_min_get(o, &minw, &minh);
evas_object_size_hint_align_get(o, &ax, &ay);
if ((w < minw) || (h < minh)) return;
count = eina_list_count(priv->children);
if (rtl) ax = 1.0 - ax;
if (w < minw)
{
x = x + ((w - minw) * (1.0 - ax));
w = minw;
}
if (h < minh)
{
y = y + ((h - minh) * (1.0 - ay));
h = minh;
}
/* accummulate expand as same way but after switched x and y for horizontal mode */
if (!horizontal)
rwy = &wy;
else
rwy = &wx;
EINA_LIST_FOREACH(priv->children, l, opt)
{
double wx, wy;
evas_object_size_hint_weight_get(opt->obj, &wx, &wy);
if (horizontal)
{
if (wx > 0.0) expand += wx;
}
else
{
if (wy > 0.0) expand += wy;
}
if (*rwy > 0.0) expand += *rwy;
}
if (!expand)
{
@ -189,7 +170,6 @@ _els_box_layout(Evas_Object *o, Evas_Object_Box_Data *priv, int horizontal, int
EINA_LIST_FOREACH(priv->children, l, opt)
{
Evas_Coord mnw, mnh, mxw, mxh;
double wx, wy;
int fw, fh, xw, xh;
obj = opt->obj;