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;
|
||||
|
||||
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_Int Edje_Message_Int;
|
||||
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_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_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 */
|
||||
EAPI Evas_Object *edje_object_add (Evas *evas);
|
||||
|
|
|
@ -251,6 +251,22 @@ _edje_part_recalc_single(Edje *ed,
|
|||
|
||||
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 */
|
||||
if (flags & FLAG_X)
|
||||
{
|
||||
|
@ -291,6 +307,7 @@ _edje_part_recalc_single(Edje *ed,
|
|||
if ((params->h > 0) &&
|
||||
(((flags | ep->calculated) & FLAG_XY) == FLAG_XY))
|
||||
{
|
||||
int apref;
|
||||
double aspect, amax, amin;
|
||||
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_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;
|
||||
apref = desc->aspect.prefer;
|
||||
amax = desc->aspect.max;
|
||||
amin = desc->aspect.min;
|
||||
if ((ep->swallow_params.aspect.w > 0) &&
|
||||
|
@ -308,8 +332,27 @@ _edje_part_recalc_single(Edje *ed,
|
|||
amin = amax =
|
||||
(double)ep->swallow_params.aspect.w /
|
||||
(double)ep->swallow_params.aspect.h;
|
||||
|
||||
if (desc->aspect.prefer == EDJE_ASPECT_PREFER_NONE) /* keep both dimensions in check */
|
||||
if (ep->swallow_params.aspect.mode > EDJE_ASPECT_CONTROL_NONE)
|
||||
{
|
||||
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) */
|
||||
if ((amax > 0.0) && (aspect > amax))
|
||||
|
@ -324,7 +367,7 @@ _edje_part_recalc_single(Edje *ed,
|
|||
new_w = (params->h * amin);
|
||||
}
|
||||
} /* 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) */
|
||||
if ((amax > 0.0) && (aspect > amax))
|
||||
|
@ -333,7 +376,7 @@ _edje_part_recalc_single(Edje *ed,
|
|||
if ((amin > 0.0) && (aspect < amin))
|
||||
new_w = (params->h * amin);
|
||||
} /* 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) */
|
||||
if ((amax > 0.0) && (aspect > amax))
|
||||
|
@ -342,7 +385,7 @@ _edje_part_recalc_single(Edje *ed,
|
|||
if ((amin > 0.0) && (aspect < 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) */
|
||||
if ((amax > 0.0) && (aspect > amax))
|
||||
|
@ -358,7 +401,7 @@ _edje_part_recalc_single(Edje *ed,
|
|||
}
|
||||
}
|
||||
/* do real adjustment */
|
||||
if (desc->aspect.prefer == EDJE_ASPECT_PREFER_BOTH)
|
||||
if (apref == EDJE_ASPECT_PREFER_BOTH)
|
||||
{
|
||||
/* fix h and vary w */
|
||||
if (new_w > params->w)
|
||||
|
@ -375,7 +418,7 @@ _edje_part_recalc_single(Edje *ed,
|
|||
params->h = new_h;
|
||||
else if (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;
|
||||
}
|
||||
else
|
||||
|
@ -384,7 +427,7 @@ _edje_part_recalc_single(Edje *ed,
|
|||
params->w = new_w;
|
||||
else if (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;
|
||||
}
|
||||
}
|
||||
|
@ -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 ((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 */
|
||||
if (flags & FLAG_X)
|
||||
{
|
||||
|
|
|
@ -582,6 +582,7 @@ struct _Edje_Real_Part
|
|||
int w, h;
|
||||
} min, max;
|
||||
struct {
|
||||
unsigned char mode;
|
||||
int w, h;
|
||||
} aspect;
|
||||
} 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;
|
||||
}
|
||||
{
|
||||
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");
|
||||
h1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minh");
|
||||
w2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxw");
|
||||
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");
|
||||
ah = (int)evas_object_data_get(obj_swallow, "\377 edje.asph");
|
||||
rp->swallow_params.min.w = w1;
|
||||
rp->swallow_params.min.h = h1;
|
||||
if (w2 > 0) rp->swallow_params.max.w = w2;
|
||||
if (h2 > 0) rp->swallow_params.max.h = h2;
|
||||
if (aw > 0) rp->swallow_params.aspect.w = aw;
|
||||
if (ah > 0) rp->swallow_params.aspect.h = ah;
|
||||
rp->swallow_params.aspect.mode = am;
|
||||
rp->swallow_params.aspect.w = aw;
|
||||
rp->swallow_params.aspect.h = ah;
|
||||
}
|
||||
ed->dirty = 1;
|
||||
_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
|
||||
* @param obj A valid Evas_Object handle
|
||||
* @param aspect The aspect control axes
|
||||
* @param aw The aspect radio width
|
||||
* @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.
|
||||
*/
|
||||
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 mc;
|
||||
|
||||
mc = aspect;
|
||||
mw = aw;
|
||||
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);
|
||||
else
|
||||
evas_object_data_del(obj, "\377 edje.aspw");
|
||||
if (mh >= 0)
|
||||
if (mh > 0)
|
||||
evas_object_data_set(obj, "\377 edje.asph", (void *)mh);
|
||||
else
|
||||
evas_object_data_del(obj, "\377 edje.asph");
|
||||
|
|
Loading…
Reference in New Issue