* edje: fix edje use of aspect when constrained by min or max.

NOTE: If you have swallow or parts that where constrained by min and
	max, and you used aspect on them, expect change on your layout.


SVN revision: 52244
This commit is contained in:
Cedric BAIL 2010-09-14 15:36:16 +00:00
parent 78deeca6ba
commit d1203fc0ca
2 changed files with 122 additions and 45 deletions

View File

@ -617,6 +617,8 @@ _edje_part_recalc_single_aspect(Edje_Real_Part *ep,
params->y = TO_INT(ADD(want_y,
MUL(SUB(want_h, FROM_INT(params->h)),
desc->align.y)));
params->aspect = apref;
}
static void
@ -953,32 +955,81 @@ _edje_part_recalc_single_text(FLOAT_T sc,
params->type.text.size = size;
}
static void
_edje_part_recalc_single_min_length(FLOAT_T align, int *start, int *length, int min)
{
if (min >= 0)
{
if (*length < min)
{
*start += TO_INT(SCALE(align, (*length - min)));
*length = min;
}
}
}
static void
_edje_part_recalc_single_min(Edje_Part_Description_Common *desc,
Edje_Calc_Params *params,
int minw, int minh,
int flags)
int flags __UNUSED__)
{
if (flags & FLAG_X)
int tmp;
int w;
int h;
w = params->w ? params->w : 99999;
h = params->h ? params->h : 99999;
switch (params->aspect)
{
if (minw >= 0)
{
if (params->w < minw)
{
params->x += TO_INT(SCALE(desc->align.x, (params->w - minw)));
params->w = minw;
}
}
case EDJE_ASPECT_PREFER_NONE:
break;
case EDJE_ASPECT_PREFER_VERTICAL:
tmp = minh * params->w / h;
if (tmp >= minw)
{
minw = tmp;
break;
}
case EDJE_ASPECT_PREFER_HORIZONTAL:
tmp = minw * params->h / w;
if (tmp >= minh)
{
minh = tmp;
break;
}
case EDJE_ASPECT_PREFER_BOTH:
tmp = minh * params->w / h;
if (tmp >= minw)
{
minw = tmp;
break;
}
tmp = minw * params->h / w;
if (tmp >= minh)
{
minh = tmp;
break;
}
break;
}
if (flags & FLAG_Y)
_edje_part_recalc_single_min_length(desc->align.x, &params->x, &params->w, minw);
_edje_part_recalc_single_min_length(desc->align.y, &params->y, &params->h, minh);
}
static void
_edje_part_recalc_single_max_length(FLOAT_T align, int *start, int *length, int max)
{
if (max >= 0)
{
if (minh >= 0)
if (*length > max)
{
if (params->h < minh)
{
params->y += TO_INT(SCALE(desc->align.y, (params->h - minh)));
params->h = minh;
}
*start += TO_INT(SCALE(align, (*length - max)));
*length = max;
}
}
}
@ -987,30 +1038,53 @@ static void
_edje_part_recalc_single_max(Edje_Part_Description_Common *desc,
Edje_Calc_Params *params,
int maxw, int maxh,
int flags)
int flags __UNUSED__)
{
if (flags & FLAG_X)
int tmp;
int w;
int h;
w = params->w ? params->w : 99999;
h = params->h ? params->h : 99999;
switch (params->aspect)
{
if (maxw >= 0)
{
if (params->w > maxw)
{
params->x += TO_INT(SCALE(desc->align.x, (params->w - maxw)));
params->w = maxw;
}
}
}
if (flags & FLAG_Y)
{
if (maxh >= 0)
{
if (params->h > maxh)
{
params->y += TO_INT(SCALE(desc->align.y, (params->h - maxh)));
params->h = maxh;
}
}
case EDJE_ASPECT_PREFER_NONE:
break;
case EDJE_ASPECT_PREFER_VERTICAL:
tmp = maxh * params->w / h;
if (tmp <= maxw)
{
maxw = tmp;
break;
}
case EDJE_ASPECT_PREFER_HORIZONTAL:
tmp = maxw * params->h / w;
if (tmp <= maxh)
{
maxh = tmp;
break;
}
case EDJE_ASPECT_PREFER_BOTH:
tmp = maxh * params->w / h;
if (tmp <= maxw)
{
maxw = tmp;
break;
}
tmp = maxw * params->h / w;
if (tmp <= maxh)
{
maxh = tmp;
break;
}
break;
}
_edje_part_recalc_single_max_length(desc->align.x, &params->x, &params->w, maxw);
_edje_part_recalc_single_max_length(desc->align.y, &params->y, &params->h, maxh);
}
static void

View File

@ -167,6 +167,13 @@ struct _Edje_Smart_Api
* ? all unsafe calls that may result in callbacks must be marked and dealt with
*/
typedef enum {
EDJE_ASPECT_PREFER_NONE,
EDJE_ASPECT_PREFER_VERTICAL,
EDJE_ASPECT_PREFER_HORIZONTAL,
EDJE_ASPECT_PREFER_BOTH
} Edje_Internal_Aspect;
struct _Edje_Perspective
{
Evas_Object *obj;
@ -204,12 +211,7 @@ struct _Edje_Color
struct _Edje_Aspect_Prefer
{
FLOAT_T min, max;
enum {
EDJE_ASPECT_PREFER_NONE,
EDJE_ASPECT_PREFER_VERTICAL,
EDJE_ASPECT_PREFER_HORIZONTAL,
EDJE_ASPECT_PREFER_BOTH
} prefer;
Edje_Internal_Aspect prefer;
};
struct _Edje_Aspect
@ -1034,9 +1036,10 @@ struct _Edje_Calc_Params
Edje_Color color2, color3; // 8
} text; // 36
} type; // 40
Edje_Internal_Aspect aspect; // 4
unsigned char visible : 1;
unsigned char smooth : 1; // 1
}; // 96
}; // 100
struct _Edje_Real_Part_Set
{