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,
|
params->y = TO_INT(ADD(want_y,
|
||||||
MUL(SUB(want_h, FROM_INT(params->h)),
|
MUL(SUB(want_h, FROM_INT(params->h)),
|
||||||
desc->align.y)));
|
desc->align.y)));
|
||||||
|
|
||||||
|
params->aspect = apref;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -953,32 +955,81 @@ _edje_part_recalc_single_text(FLOAT_T sc,
|
||||||
params->type.text.size = size;
|
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
|
static void
|
||||||
_edje_part_recalc_single_min(Edje_Part_Description_Common *desc,
|
_edje_part_recalc_single_min(Edje_Part_Description_Common *desc,
|
||||||
Edje_Calc_Params *params,
|
Edje_Calc_Params *params,
|
||||||
int minw, int minh,
|
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)
|
case EDJE_ASPECT_PREFER_NONE:
|
||||||
{
|
break;
|
||||||
if (params->w < minw)
|
case EDJE_ASPECT_PREFER_VERTICAL:
|
||||||
{
|
tmp = minh * params->w / h;
|
||||||
params->x += TO_INT(SCALE(desc->align.x, (params->w - minw)));
|
if (tmp >= minw)
|
||||||
params->w = 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)
|
*start += TO_INT(SCALE(align, (*length - max)));
|
||||||
{
|
*length = max;
|
||||||
params->y += TO_INT(SCALE(desc->align.y, (params->h - minh)));
|
|
||||||
params->h = minh;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -987,30 +1038,53 @@ static void
|
||||||
_edje_part_recalc_single_max(Edje_Part_Description_Common *desc,
|
_edje_part_recalc_single_max(Edje_Part_Description_Common *desc,
|
||||||
Edje_Calc_Params *params,
|
Edje_Calc_Params *params,
|
||||||
int maxw, int maxh,
|
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)
|
case EDJE_ASPECT_PREFER_NONE:
|
||||||
{
|
break;
|
||||||
if (params->w > maxw)
|
case EDJE_ASPECT_PREFER_VERTICAL:
|
||||||
{
|
tmp = maxh * params->w / h;
|
||||||
params->x += TO_INT(SCALE(desc->align.x, (params->w - maxw)));
|
if (tmp <= maxw)
|
||||||
params->w = maxw;
|
{
|
||||||
}
|
maxw = tmp;
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
if (flags & FLAG_Y)
|
case EDJE_ASPECT_PREFER_HORIZONTAL:
|
||||||
{
|
tmp = maxw * params->h / w;
|
||||||
if (maxh >= 0)
|
if (tmp <= maxh)
|
||||||
{
|
{
|
||||||
if (params->h > maxh)
|
maxh = tmp;
|
||||||
{
|
break;
|
||||||
params->y += TO_INT(SCALE(desc->align.y, (params->h - maxh)));
|
}
|
||||||
params->h = maxh;
|
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
|
static void
|
||||||
|
|
|
@ -167,6 +167,13 @@ struct _Edje_Smart_Api
|
||||||
* ? all unsafe calls that may result in callbacks must be marked and dealt with
|
* ? 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
|
struct _Edje_Perspective
|
||||||
{
|
{
|
||||||
Evas_Object *obj;
|
Evas_Object *obj;
|
||||||
|
@ -204,12 +211,7 @@ struct _Edje_Color
|
||||||
struct _Edje_Aspect_Prefer
|
struct _Edje_Aspect_Prefer
|
||||||
{
|
{
|
||||||
FLOAT_T min, max;
|
FLOAT_T min, max;
|
||||||
enum {
|
Edje_Internal_Aspect prefer;
|
||||||
EDJE_ASPECT_PREFER_NONE,
|
|
||||||
EDJE_ASPECT_PREFER_VERTICAL,
|
|
||||||
EDJE_ASPECT_PREFER_HORIZONTAL,
|
|
||||||
EDJE_ASPECT_PREFER_BOTH
|
|
||||||
} prefer;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Edje_Aspect
|
struct _Edje_Aspect
|
||||||
|
@ -1034,9 +1036,10 @@ struct _Edje_Calc_Params
|
||||||
Edje_Color color2, color3; // 8
|
Edje_Color color2, color3; // 8
|
||||||
} text; // 36
|
} text; // 36
|
||||||
} type; // 40
|
} type; // 40
|
||||||
|
Edje_Internal_Aspect aspect; // 4
|
||||||
unsigned char visible : 1;
|
unsigned char visible : 1;
|
||||||
unsigned char smooth : 1; // 1
|
unsigned char smooth : 1; // 1
|
||||||
}; // 96
|
}; // 100
|
||||||
|
|
||||||
struct _Edje_Real_Part_Set
|
struct _Edje_Real_Part_Set
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue