params->y = TO_INT(ADD(want_y,
MUL(SUB(want_h, FROM_INT(params->h)),
desc->align.y)));
+
+ params->aspect = apref;
}
static void
}
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;
}
}
}
_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)
- {
- 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)
+ int tmp;
+ int w;
+ int h;
+
+ w = params->w ? params->w : 99999;
+ h = params->h ? params->h : 99999;
+
+ switch (params->aspect)
{
- 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
* ? 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;
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
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
{