forked from enlightenment/efl
* 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:
parent
78deeca6ba
commit
d1203fc0ca
|
@ -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, ¶ms->x, ¶ms->w, minw);
|
||||
_edje_part_recalc_single_min_length(desc->align.y, ¶ms->y, ¶ms->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, ¶ms->x, ¶ms->w, maxw);
|
||||
_edje_part_recalc_single_max_length(desc->align.y, ¶ms->y, ¶ms->h, maxh);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue