forked from enlightenment/efl
more external aspect support - all working nicely now
SVN revision: 24148
This commit is contained in:
parent
5de5999b5a
commit
3ea84d923f
|
@ -47,6 +47,16 @@ enum _Edje_Message_Type
|
||||||
};
|
};
|
||||||
typedef enum _Edje_Message_Type Edje_Message_Type;
|
typedef enum _Edje_Message_Type Edje_Message_Type;
|
||||||
|
|
||||||
|
enum _Edje_Aspect_Control
|
||||||
|
{
|
||||||
|
EDJE_ASPECT_CONTROL_NONE = 0,
|
||||||
|
EDJE_ASPECT_CONTROL_NEITHER = 1,
|
||||||
|
EDJE_ASPECT_CONTROL_HORIZONTAL = 2,
|
||||||
|
EDJE_ASPECT_CONTROL_VERTICAL = 3,
|
||||||
|
EDJE_ASPECT_CONTROL_BOTH = 4
|
||||||
|
};
|
||||||
|
typedef enum _Edje_Aspect_Control Edje_Aspect_Control;
|
||||||
|
|
||||||
typedef struct _Edje_Message_String Edje_Message_String;
|
typedef struct _Edje_Message_String Edje_Message_String;
|
||||||
typedef struct _Edje_Message_Int Edje_Message_Int;
|
typedef struct _Edje_Message_Int Edje_Message_Int;
|
||||||
typedef struct _Edje_Message_Float Edje_Message_Float;
|
typedef struct _Edje_Message_Float Edje_Message_Float;
|
||||||
|
@ -175,7 +185,7 @@ extern "C" {
|
||||||
EAPI void edje_text_class_set(const char *text_class, const char *font, Evas_Font_Size size);
|
EAPI void edje_text_class_set(const char *text_class, const char *font, Evas_Font_Size size);
|
||||||
EAPI void edje_extern_object_min_size_set (Evas_Object *obj, Evas_Coord minw, Evas_Coord minh);
|
EAPI void edje_extern_object_min_size_set (Evas_Object *obj, Evas_Coord minw, Evas_Coord minh);
|
||||||
EAPI void edje_extern_object_max_size_set (Evas_Object *obj, Evas_Coord maxw, Evas_Coord maxh);
|
EAPI void edje_extern_object_max_size_set (Evas_Object *obj, Evas_Coord maxw, Evas_Coord maxh);
|
||||||
EAPI void edje_extern_object_aspect_set(Evas_Object *obj, Evas_Coord aw, Evas_Coord ah);
|
EAPI void edje_extern_object_aspect_set(Evas_Object *obj, Edje_Aspect_Control aspect, Evas_Coord aw, Evas_Coord ah);
|
||||||
|
|
||||||
/* edje_smart.c */
|
/* edje_smart.c */
|
||||||
EAPI Evas_Object *edje_object_add (Evas *evas);
|
EAPI Evas_Object *edje_object_add (Evas *evas);
|
||||||
|
|
|
@ -251,6 +251,22 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
|
|
||||||
flags = FLAG_XY;
|
flags = FLAG_XY;
|
||||||
|
|
||||||
|
// if (flags & FLAG_X)
|
||||||
|
{
|
||||||
|
minw = desc->min.w;
|
||||||
|
if (ep->swallow_params.min.w > desc->min.w) minw = ep->swallow_params.min.w;
|
||||||
|
maxw = desc->max.w;
|
||||||
|
if ((ep->swallow_params.max.w >= 0) &&
|
||||||
|
(ep->swallow_params.max.w < maxw)) maxw = ep->swallow_params.max.w;
|
||||||
|
}
|
||||||
|
// if (flags & FLAG_Y)
|
||||||
|
{
|
||||||
|
minh = desc->min.h;
|
||||||
|
if (ep->swallow_params.min.h > desc->min.h) minh = ep->swallow_params.min.h;
|
||||||
|
maxh = desc->max.h;
|
||||||
|
if ((ep->swallow_params.max.h >= 0) &&
|
||||||
|
(ep->swallow_params.max.h < maxh)) maxh = ep->swallow_params.max.h;
|
||||||
|
}
|
||||||
/* relative coords of top left & bottom right */
|
/* relative coords of top left & bottom right */
|
||||||
if (flags & FLAG_X)
|
if (flags & FLAG_X)
|
||||||
{
|
{
|
||||||
|
@ -291,6 +307,7 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
if ((params->h > 0) &&
|
if ((params->h > 0) &&
|
||||||
(((flags | ep->calculated) & FLAG_XY) == FLAG_XY))
|
(((flags | ep->calculated) & FLAG_XY) == FLAG_XY))
|
||||||
{
|
{
|
||||||
|
int apref;
|
||||||
double aspect, amax, amin;
|
double aspect, amax, amin;
|
||||||
double new_w, new_h, want_x, want_y, want_w, want_h;
|
double new_w, new_h, want_x, want_y, want_w, want_h;
|
||||||
|
|
||||||
|
@ -300,7 +317,14 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
want_y = params->y;
|
want_y = params->y;
|
||||||
want_h = new_h = params->h;
|
want_h = new_h = params->h;
|
||||||
|
|
||||||
|
if ((maxw >= 0) && (new_w > maxw)) new_w = maxw;
|
||||||
|
if (new_w < minw) new_w = minw;
|
||||||
|
|
||||||
|
if ((maxh >= 0) && (new_h > maxh)) new_h = maxh;
|
||||||
|
if (new_h < minh) new_h = minh;
|
||||||
|
|
||||||
aspect = (double)params->w / (double)params->h;
|
aspect = (double)params->w / (double)params->h;
|
||||||
|
apref = desc->aspect.prefer;
|
||||||
amax = desc->aspect.max;
|
amax = desc->aspect.max;
|
||||||
amin = desc->aspect.min;
|
amin = desc->aspect.min;
|
||||||
if ((ep->swallow_params.aspect.w > 0) &&
|
if ((ep->swallow_params.aspect.w > 0) &&
|
||||||
|
@ -308,8 +332,27 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
amin = amax =
|
amin = amax =
|
||||||
(double)ep->swallow_params.aspect.w /
|
(double)ep->swallow_params.aspect.w /
|
||||||
(double)ep->swallow_params.aspect.h;
|
(double)ep->swallow_params.aspect.h;
|
||||||
|
if (ep->swallow_params.aspect.mode > EDJE_ASPECT_CONTROL_NONE)
|
||||||
if (desc->aspect.prefer == EDJE_ASPECT_PREFER_NONE) /* keep both dimensions in check */
|
{
|
||||||
|
switch (ep->swallow_params.aspect.mode)
|
||||||
|
{
|
||||||
|
case EDJE_ASPECT_CONTROL_NEITHER:
|
||||||
|
apref = EDJE_ASPECT_PREFER_NONE;
|
||||||
|
break;
|
||||||
|
case EDJE_ASPECT_CONTROL_HORIZONTAL:
|
||||||
|
apref = EDJE_ASPECT_PREFER_HORIZONTAL;
|
||||||
|
break;
|
||||||
|
case EDJE_ASPECT_CONTROL_VERTICAL:
|
||||||
|
apref = EDJE_ASPECT_PREFER_VERTICAL;
|
||||||
|
break;
|
||||||
|
case EDJE_ASPECT_CONTROL_BOTH:
|
||||||
|
apref = EDJE_ASPECT_PREFER_BOTH;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (apref == EDJE_ASPECT_PREFER_NONE) /* keep both dimensions in check */
|
||||||
{
|
{
|
||||||
/* adjust for max aspect (width / height) */
|
/* adjust for max aspect (width / height) */
|
||||||
if ((amax > 0.0) && (aspect > amax))
|
if ((amax > 0.0) && (aspect > amax))
|
||||||
|
@ -324,7 +367,7 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
new_w = (params->h * amin);
|
new_w = (params->h * amin);
|
||||||
}
|
}
|
||||||
} /* prefer vertical size as determiner */
|
} /* prefer vertical size as determiner */
|
||||||
else if (desc->aspect.prefer == EDJE_ASPECT_PREFER_VERTICAL) /* keep both dimensions in check */
|
else if (apref == EDJE_ASPECT_PREFER_VERTICAL) /* keep both dimensions in check */
|
||||||
{
|
{
|
||||||
/* adjust for max aspect (width / height) */
|
/* adjust for max aspect (width / height) */
|
||||||
if ((amax > 0.0) && (aspect > amax))
|
if ((amax > 0.0) && (aspect > amax))
|
||||||
|
@ -333,7 +376,7 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
if ((amin > 0.0) && (aspect < amin))
|
if ((amin > 0.0) && (aspect < amin))
|
||||||
new_w = (params->h * amin);
|
new_w = (params->h * amin);
|
||||||
} /* prefer horizontal size as determiner */
|
} /* prefer horizontal size as determiner */
|
||||||
else if (desc->aspect.prefer == EDJE_ASPECT_PREFER_HORIZONTAL) /* keep both dimensions in check */
|
else if (apref == EDJE_ASPECT_PREFER_HORIZONTAL) /* keep both dimensions in check */
|
||||||
{
|
{
|
||||||
/* adjust for max aspect (width / height) */
|
/* adjust for max aspect (width / height) */
|
||||||
if ((amax > 0.0) && (aspect > amax))
|
if ((amax > 0.0) && (aspect > amax))
|
||||||
|
@ -342,7 +385,7 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
if ((amin > 0.0) && (aspect < amin))
|
if ((amin > 0.0) && (aspect < amin))
|
||||||
new_h = (params->w / amin);
|
new_h = (params->w / amin);
|
||||||
}
|
}
|
||||||
else if (desc->aspect.prefer == EDJE_ASPECT_PREFER_BOTH) /* keep both dimensions in check */
|
else if (apref == EDJE_ASPECT_PREFER_BOTH) /* keep both dimensions in check */
|
||||||
{
|
{
|
||||||
/* adjust for max aspect (width / height) */
|
/* adjust for max aspect (width / height) */
|
||||||
if ((amax > 0.0) && (aspect > amax))
|
if ((amax > 0.0) && (aspect > amax))
|
||||||
|
@ -358,7 +401,7 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* do real adjustment */
|
/* do real adjustment */
|
||||||
if (desc->aspect.prefer == EDJE_ASPECT_PREFER_BOTH)
|
if (apref == EDJE_ASPECT_PREFER_BOTH)
|
||||||
{
|
{
|
||||||
/* fix h and vary w */
|
/* fix h and vary w */
|
||||||
if (new_w > params->w)
|
if (new_w > params->w)
|
||||||
|
@ -375,7 +418,7 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
params->h = new_h;
|
params->h = new_h;
|
||||||
else if (params->h > new_h)
|
else if (params->h > new_h)
|
||||||
params->h = new_h;
|
params->h = new_h;
|
||||||
if (desc->aspect.prefer == EDJE_ASPECT_PREFER_VERTICAL)
|
if (apref == EDJE_ASPECT_PREFER_VERTICAL)
|
||||||
params->w = new_w;
|
params->w = new_w;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -384,7 +427,7 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
params->w = new_w;
|
params->w = new_w;
|
||||||
else if (params->w > new_w)
|
else if (params->w > new_w)
|
||||||
params->w = new_w;
|
params->w = new_w;
|
||||||
if (desc->aspect.prefer == EDJE_ASPECT_PREFER_HORIZONTAL)
|
if (apref == EDJE_ASPECT_PREFER_HORIZONTAL)
|
||||||
params->h = new_h;
|
params->h = new_h;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -427,16 +470,6 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flags & FLAG_X)
|
|
||||||
{
|
|
||||||
minw = desc->min.w;
|
|
||||||
if (ep->swallow_params.min.w > desc->min.w) minw = ep->swallow_params.min.w;
|
|
||||||
}
|
|
||||||
if (flags & FLAG_Y)
|
|
||||||
{
|
|
||||||
minh = desc->min.h;
|
|
||||||
if (ep->swallow_params.min.h > desc->min.h) minh = ep->swallow_params.min.h;
|
|
||||||
}
|
|
||||||
/* if we have text that wants to make the min size the text size... */
|
/* if we have text that wants to make the min size the text size... */
|
||||||
if ((chosen_desc) && (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK))
|
if ((chosen_desc) && (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK))
|
||||||
{
|
{
|
||||||
|
@ -710,18 +743,6 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flags & FLAG_X)
|
|
||||||
{
|
|
||||||
maxw = desc->max.w;
|
|
||||||
if ((ep->swallow_params.max.w >= 0) &&
|
|
||||||
(ep->swallow_params.max.w < maxw)) maxw = ep->swallow_params.max.w;
|
|
||||||
}
|
|
||||||
if (flags & FLAG_Y)
|
|
||||||
{
|
|
||||||
maxh = desc->max.h;
|
|
||||||
if ((ep->swallow_params.max.h >= 0) &&
|
|
||||||
(ep->swallow_params.max.h < maxh)) maxh = ep->swallow_params.max.h;
|
|
||||||
}
|
|
||||||
/* adjust for max size */
|
/* adjust for max size */
|
||||||
if (flags & FLAG_X)
|
if (flags & FLAG_X)
|
||||||
{
|
{
|
||||||
|
|
|
@ -582,6 +582,7 @@ struct _Edje_Real_Part
|
||||||
int w, h;
|
int w, h;
|
||||||
} min, max;
|
} min, max;
|
||||||
struct {
|
struct {
|
||||||
|
unsigned char mode;
|
||||||
int w, h;
|
int w, h;
|
||||||
} aspect;
|
} aspect;
|
||||||
} swallow_params;
|
} swallow_params;
|
||||||
|
|
|
@ -744,20 +744,22 @@ edje_object_part_swallow(Evas_Object *obj, const char *part, Evas_Object *obj_sw
|
||||||
rp->swallow_params.max.h = h;
|
rp->swallow_params.max.h = h;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
int w1, h1, w2, h2, aw, ah;
|
int w1, h1, w2, h2, am, aw, ah;
|
||||||
|
|
||||||
w1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minw");
|
w1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minw");
|
||||||
h1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minh");
|
h1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minh");
|
||||||
w2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxw");
|
w2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxw");
|
||||||
h2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxh");
|
h2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxh");
|
||||||
|
am = (int)evas_object_data_get(obj_swallow, "\377 edje.aspm");
|
||||||
aw = (int)evas_object_data_get(obj_swallow, "\377 edje.aspw");
|
aw = (int)evas_object_data_get(obj_swallow, "\377 edje.aspw");
|
||||||
ah = (int)evas_object_data_get(obj_swallow, "\377 edje.asph");
|
ah = (int)evas_object_data_get(obj_swallow, "\377 edje.asph");
|
||||||
rp->swallow_params.min.w = w1;
|
rp->swallow_params.min.w = w1;
|
||||||
rp->swallow_params.min.h = h1;
|
rp->swallow_params.min.h = h1;
|
||||||
if (w2 > 0) rp->swallow_params.max.w = w2;
|
if (w2 > 0) rp->swallow_params.max.w = w2;
|
||||||
if (h2 > 0) rp->swallow_params.max.h = h2;
|
if (h2 > 0) rp->swallow_params.max.h = h2;
|
||||||
if (aw > 0) rp->swallow_params.aspect.w = aw;
|
rp->swallow_params.aspect.mode = am;
|
||||||
if (ah > 0) rp->swallow_params.aspect.h = ah;
|
rp->swallow_params.aspect.w = aw;
|
||||||
|
rp->swallow_params.aspect.h = ah;
|
||||||
}
|
}
|
||||||
ed->dirty = 1;
|
ed->dirty = 1;
|
||||||
_edje_recalc(ed);
|
_edje_recalc(ed);
|
||||||
|
@ -815,6 +817,7 @@ edje_extern_object_max_size_set(Evas_Object *obj, Evas_Coord maxw, Evas_Coord ma
|
||||||
|
|
||||||
/** Set the object aspect size
|
/** Set the object aspect size
|
||||||
* @param obj A valid Evas_Object handle
|
* @param obj A valid Evas_Object handle
|
||||||
|
* @param aspect The aspect control axes
|
||||||
* @param aw The aspect radio width
|
* @param aw The aspect radio width
|
||||||
* @param ah The aspect ratio height
|
* @param ah The aspect ratio height
|
||||||
*
|
*
|
||||||
|
@ -824,17 +827,23 @@ edje_extern_object_max_size_set(Evas_Object *obj, Evas_Coord maxw, Evas_Coord ma
|
||||||
* scale of both aspwct width and height.
|
* scale of both aspwct width and height.
|
||||||
*/
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
edje_extern_object_aspect_set(Evas_Object *obj, Evas_Coord aw, Evas_Coord ah)
|
edje_extern_object_aspect_set(Evas_Object *obj, Edje_Aspect_Control aspect, Evas_Coord aw, Evas_Coord ah)
|
||||||
{
|
{
|
||||||
int mw, mh;
|
int mw, mh;
|
||||||
|
int mc;
|
||||||
|
|
||||||
|
mc = aspect;
|
||||||
mw = aw;
|
mw = aw;
|
||||||
mh = ah;
|
mh = ah;
|
||||||
if (mw >= 0)
|
if (mc > 0)
|
||||||
|
evas_object_data_set(obj, "\377 edje.aspm", (void *)mc);
|
||||||
|
else
|
||||||
|
evas_object_data_del(obj, "\377 edje.aspm");
|
||||||
|
if (mw > 0)
|
||||||
evas_object_data_set(obj, "\377 edje.aspw", (void *)mw);
|
evas_object_data_set(obj, "\377 edje.aspw", (void *)mw);
|
||||||
else
|
else
|
||||||
evas_object_data_del(obj, "\377 edje.aspw");
|
evas_object_data_del(obj, "\377 edje.aspw");
|
||||||
if (mh >= 0)
|
if (mh > 0)
|
||||||
evas_object_data_set(obj, "\377 edje.asph", (void *)mh);
|
evas_object_data_set(obj, "\377 edje.asph", (void *)mh);
|
||||||
else
|
else
|
||||||
evas_object_data_del(obj, "\377 edje.asph");
|
evas_object_data_del(obj, "\377 edje.asph");
|
||||||
|
|
Loading…
Reference in New Issue