forked from enlightenment/efl
fix some min size calc and aspect calc issues.
SVN revision: 38994
This commit is contained in:
parent
b70ae3c927
commit
6f2cb19f03
|
@ -391,188 +391,192 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* aspect */
|
/* aspect */
|
||||||
if ((params->h > 0) &&
|
if (((flags | ep->calculated) & FLAG_XY) == FLAG_XY)
|
||||||
(((flags | ep->calculated) & FLAG_XY) == FLAG_XY))
|
|
||||||
{
|
{
|
||||||
int apref;
|
int apref = -10;
|
||||||
double aspect, amax, amin;
|
double aspect, amax, amin;
|
||||||
double new_w = 0, new_h = 0, want_x, want_y, want_w, want_h;
|
double new_w = 0, new_h = 0, want_x, want_y, want_w, want_h;
|
||||||
|
|
||||||
want_x = params->x;
|
if (params->h <= 0) aspect = 999999.0;
|
||||||
want_w = new_w = params->w;
|
else aspect = (double)params->w / (double)params->h;
|
||||||
|
amax = desc->aspect.max;
|
||||||
want_y = params->y;
|
amin = desc->aspect.min;
|
||||||
want_h = new_h = params->h;
|
if ((ep->swallow_params.aspect.w > 0) &&
|
||||||
|
(ep->swallow_params.aspect.h > 0))
|
||||||
aspect = (double)params->w / (double)params->h;
|
amin = amax =
|
||||||
apref = desc->aspect.prefer;
|
(double)ep->swallow_params.aspect.w /
|
||||||
amax = desc->aspect.max;
|
(double)ep->swallow_params.aspect.h;
|
||||||
amin = desc->aspect.min;
|
want_x = params->x;
|
||||||
if ((ep->swallow_params.aspect.w > 0) &&
|
want_w = new_w = params->w;
|
||||||
(ep->swallow_params.aspect.h > 0))
|
|
||||||
amin = amax =
|
want_y = params->y;
|
||||||
(double)ep->swallow_params.aspect.w /
|
want_h = new_h = params->h;
|
||||||
(double)ep->swallow_params.aspect.h;
|
|
||||||
if (ep->swallow_params.aspect.mode > EDJE_ASPECT_CONTROL_NONE)
|
if ((amin > 0.0) && (amax > 0.0))
|
||||||
{
|
{
|
||||||
switch (ep->swallow_params.aspect.mode)
|
apref = desc->aspect.prefer;
|
||||||
{
|
if (ep->swallow_params.aspect.mode > EDJE_ASPECT_CONTROL_NONE)
|
||||||
case EDJE_ASPECT_CONTROL_NEITHER:
|
{
|
||||||
apref = EDJE_ASPECT_PREFER_NONE;
|
switch (ep->swallow_params.aspect.mode)
|
||||||
break;
|
{
|
||||||
case EDJE_ASPECT_CONTROL_HORIZONTAL:
|
case EDJE_ASPECT_CONTROL_NEITHER:
|
||||||
apref = EDJE_ASPECT_PREFER_HORIZONTAL;
|
apref = EDJE_ASPECT_PREFER_NONE;
|
||||||
break;
|
break;
|
||||||
case EDJE_ASPECT_CONTROL_VERTICAL:
|
case EDJE_ASPECT_CONTROL_HORIZONTAL:
|
||||||
apref = EDJE_ASPECT_PREFER_VERTICAL;
|
apref = EDJE_ASPECT_PREFER_HORIZONTAL;
|
||||||
break;
|
break;
|
||||||
case EDJE_ASPECT_CONTROL_BOTH:
|
case EDJE_ASPECT_CONTROL_VERTICAL:
|
||||||
apref = EDJE_ASPECT_PREFER_BOTH;
|
apref = EDJE_ASPECT_PREFER_VERTICAL;
|
||||||
break;
|
break;
|
||||||
default:
|
case EDJE_ASPECT_CONTROL_BOTH:
|
||||||
break;
|
apref = EDJE_ASPECT_PREFER_BOTH;
|
||||||
}
|
break;
|
||||||
}
|
default:
|
||||||
|
break;
|
||||||
switch (apref)
|
}
|
||||||
{
|
}
|
||||||
case EDJE_ASPECT_PREFER_NONE:
|
switch (apref)
|
||||||
/* keep botth dimensions in check */
|
{
|
||||||
/* adjust for min aspect (width / height) */
|
case EDJE_ASPECT_PREFER_NONE:
|
||||||
if ((amin > 0.0) && (aspect < amin))
|
/* keep both dimensions in check */
|
||||||
{
|
/* adjust for min aspect (width / height) */
|
||||||
new_h = (params->w / amin);
|
if ((amin > 0.0) && (aspect < amin))
|
||||||
new_w = (params->h * amin);
|
{
|
||||||
}
|
new_h = (params->w / amin);
|
||||||
/* adjust for max aspect (width / height) */
|
new_w = (params->h * amin);
|
||||||
if ((amax > 0.0) && (aspect > amax))
|
}
|
||||||
{
|
/* adjust for max aspect (width / height) */
|
||||||
new_h = (params->w / amax);
|
if ((amax > 0.0) && (aspect > amax))
|
||||||
new_w = (params->h * amax);
|
{
|
||||||
}
|
new_h = (params->w / amax);
|
||||||
if ((amax > 0.0) && (new_w < params->w))
|
new_w = (params->h * amax);
|
||||||
{
|
}
|
||||||
new_w = params->w;
|
if ((amax > 0.0) && (new_w < params->w))
|
||||||
new_h = params->w / amax;
|
{
|
||||||
}
|
new_w = params->w;
|
||||||
if ((amax > 0.0) && (new_h < params->h))
|
new_h = params->w / amax;
|
||||||
{
|
}
|
||||||
new_w = params->h * amax;
|
if ((amax > 0.0) && (new_h < params->h))
|
||||||
new_h = params->h;
|
{
|
||||||
}
|
new_w = params->h * amax;
|
||||||
break;
|
new_h = params->h;
|
||||||
/* prefer vertical size as determiner */
|
}
|
||||||
case EDJE_ASPECT_PREFER_VERTICAL:
|
break;
|
||||||
/* keep both dimensions in check */
|
/* prefer vertical size as determiner */
|
||||||
/* adjust for max aspect (width / height) */
|
case EDJE_ASPECT_PREFER_VERTICAL:
|
||||||
if ((amax > 0.0) && (aspect > amax))
|
/* keep both dimensions in check */
|
||||||
new_w = (params->h * amax);
|
/* adjust for max aspect (width / height) */
|
||||||
/* adjust for min aspect (width / height) */
|
if ((amax > 0.0) && (aspect > amax))
|
||||||
if ((amin > 0.0) && (aspect < amin))
|
new_w = (params->h * amax);
|
||||||
new_w = (params->h * amin);
|
/* adjust for min aspect (width / height) */
|
||||||
break;
|
if ((amin > 0.0) && (aspect < amin))
|
||||||
/* prefer horizontal size as determiner */
|
new_w = (params->h * amin);
|
||||||
case EDJE_ASPECT_PREFER_HORIZONTAL:
|
break;
|
||||||
/* keep both dimensions in check */
|
/* prefer horizontal size as determiner */
|
||||||
/* adjust for max aspect (width / height) */
|
case EDJE_ASPECT_PREFER_HORIZONTAL:
|
||||||
if ((amax > 0.0) && (aspect > amax))
|
/* keep both dimensions in check */
|
||||||
new_h = (params->w / amax);
|
/* adjust for max aspect (width / height) */
|
||||||
/* adjust for min aspect (width / height) */
|
if ((amax > 0.0) && (aspect > amax))
|
||||||
if ((amin > 0.0) && (aspect < amin))
|
new_h = (params->w / amax);
|
||||||
new_h = (params->w / amin);
|
/* adjust for min aspect (width / height) */
|
||||||
break;
|
if ((amin > 0.0) && (aspect < amin))
|
||||||
case EDJE_ASPECT_PREFER_BOTH:
|
new_h = (params->w / amin);
|
||||||
/* keep both dimensions in check */
|
break;
|
||||||
/* adjust for max aspect (width / height) */
|
case EDJE_ASPECT_PREFER_BOTH:
|
||||||
if ((amax > 0.0) && (aspect > amax))
|
/* keep both dimensions in check */
|
||||||
{
|
/* adjust for max aspect (width / height) */
|
||||||
new_w = (params->h * amax);
|
if ((amax > 0.0) && (aspect > amax))
|
||||||
new_h = (params->w / amax);
|
{
|
||||||
}
|
new_w = (params->h * amax);
|
||||||
/* adjust for min aspect (width / height) */
|
new_h = (params->w / amax);
|
||||||
if ((amin > 0.0) && (aspect < amin))
|
}
|
||||||
{
|
/* adjust for min aspect (width / height) */
|
||||||
new_w = (params->h * amin);
|
if ((amin > 0.0) && (aspect < amin))
|
||||||
new_h = (params->w / amin);
|
{
|
||||||
}
|
new_w = (params->h * amin);
|
||||||
break;
|
new_h = (params->w / amin);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
if (!((amin > 0.0) && (amax > 0.0) && (apref == EDJE_ASPECT_PREFER_NONE)))
|
default:
|
||||||
{
|
break;
|
||||||
if ((maxw >= 0) && (new_w > maxw)) new_w = maxw;
|
}
|
||||||
if (new_w < minw) new_w = minw;
|
|
||||||
|
if (!((amin > 0.0) && (amax > 0.0) && (apref == EDJE_ASPECT_PREFER_NONE)))
|
||||||
if ((maxh >= 0) && (new_h > maxh)) new_h = maxh;
|
{
|
||||||
if (new_h < minh) new_h = minh;
|
if ((maxw >= 0) && (new_w > maxw)) new_w = maxw;
|
||||||
}
|
if (new_w < minw) new_w = minw;
|
||||||
|
|
||||||
/* do real adjustment */
|
if ((maxh >= 0) && (new_h > maxh)) new_h = maxh;
|
||||||
if (apref == EDJE_ASPECT_PREFER_BOTH)
|
if (new_h < minh) new_h = minh;
|
||||||
{
|
}
|
||||||
if (amin == 0.0) amin = amax;
|
|
||||||
if (amin != 0.0)
|
/* do real adjustment */
|
||||||
{
|
if (apref == EDJE_ASPECT_PREFER_BOTH)
|
||||||
/* fix h and vary w */
|
{
|
||||||
if (new_w > params->w)
|
if (amin == 0.0) amin = amax;
|
||||||
{
|
if (amin != 0.0)
|
||||||
// params->w = new_w;
|
{
|
||||||
// EXCEEDS BOUNDS in W
|
/* fix h and vary w */
|
||||||
new_h = (params->w / amin);
|
if (new_w > params->w)
|
||||||
new_w = params->w;
|
{
|
||||||
if (new_h > params->h)
|
// params->w = new_w;
|
||||||
{
|
// EXCEEDS BOUNDS in W
|
||||||
new_h = params->h;
|
new_h = (params->w / amin);
|
||||||
new_w = (params->h * amin);
|
new_w = params->w;
|
||||||
}
|
if (new_h > params->h)
|
||||||
}
|
{
|
||||||
/* fix w and vary h */
|
new_h = params->h;
|
||||||
else
|
new_w = (params->h * amin);
|
||||||
{
|
}
|
||||||
// params->h = new_h;
|
}
|
||||||
// EXCEEDS BOUNDS in H
|
/* fix w and vary h */
|
||||||
new_h = params->h;
|
else
|
||||||
new_w = (params->h * amin);
|
{
|
||||||
if (new_w > params->w)
|
// params->h = new_h;
|
||||||
{
|
// EXCEEDS BOUNDS in H
|
||||||
new_h = (params->w / amin);
|
new_h = params->h;
|
||||||
new_w = params->w;
|
new_w = (params->h * amin);
|
||||||
}
|
if (new_w > params->w)
|
||||||
}
|
{
|
||||||
params->w = new_w;
|
new_h = (params->w / amin);
|
||||||
params->h = new_h;
|
new_w = params->w;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
params->w = new_w;
|
||||||
{
|
params->h = new_h;
|
||||||
if ((amin > 0.0) && (amax > 0.0) && (apref == EDJE_ASPECT_PREFER_NONE))
|
}
|
||||||
{
|
}
|
||||||
params->w = new_w;
|
}
|
||||||
params->h = new_h;
|
if (apref != EDJE_ASPECT_PREFER_BOTH)
|
||||||
}
|
{
|
||||||
else if ((params->h - new_h) > (params->w - new_w))
|
if ((amin > 0.0) && (amax > 0.0) && (apref == EDJE_ASPECT_PREFER_NONE))
|
||||||
{
|
{
|
||||||
if (params->h < new_h)
|
params->w = new_w;
|
||||||
params->h = new_h;
|
params->h = new_h;
|
||||||
else if (params->h > new_h)
|
}
|
||||||
params->h = new_h;
|
else if ((params->h - new_h) > (params->w - new_w))
|
||||||
if (apref == EDJE_ASPECT_PREFER_VERTICAL)
|
{
|
||||||
params->w = new_w;
|
if (params->h < new_h)
|
||||||
}
|
params->h = new_h;
|
||||||
else
|
else if (params->h > new_h)
|
||||||
{
|
params->h = new_h;
|
||||||
if (params->w < new_w)
|
if (apref == EDJE_ASPECT_PREFER_VERTICAL)
|
||||||
params->w = new_w;
|
params->w = new_w;
|
||||||
else if (params->w > new_w)
|
}
|
||||||
params->w = new_w;
|
else
|
||||||
if (apref == EDJE_ASPECT_PREFER_HORIZONTAL)
|
{
|
||||||
params->h = new_h;
|
if (params->w < new_w)
|
||||||
}
|
params->w = new_w;
|
||||||
}
|
else if (params->w > new_w)
|
||||||
params->x = want_x + ((want_w - params->w) * desc->align.x);
|
params->w = new_w;
|
||||||
params->y = want_y + ((want_h - params->h) * desc->align.y);
|
if (apref == EDJE_ASPECT_PREFER_HORIZONTAL)
|
||||||
|
params->h = new_h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
params->x = want_x + ((want_w - params->w) * desc->align.x);
|
||||||
|
params->y = want_y + ((want_h - params->h) * desc->align.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* size step */
|
/* size step */
|
||||||
if (flags & FLAG_X)
|
if (flags & FLAG_X)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue