forked from enlightenment/efl
allow code to specify an aspect for swallowed objects
SVN revision: 24145
This commit is contained in:
parent
5607a495c5
commit
5de5999b5a
|
@ -175,7 +175,8 @@ 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);
|
||||
|
||||
/* edje_smart.c */
|
||||
EAPI Evas_Object *edje_object_add (Evas *evas);
|
||||
|
||||
|
|
|
@ -291,7 +291,7 @@ _edje_part_recalc_single(Edje *ed,
|
|||
if ((params->h > 0) &&
|
||||
(((flags | ep->calculated) & FLAG_XY) == FLAG_XY))
|
||||
{
|
||||
double aspect;
|
||||
double aspect, amax, amin;
|
||||
double new_w, new_h, want_x, want_y, want_w, want_h;
|
||||
|
||||
want_x = params->x;
|
||||
|
@ -301,52 +301,60 @@ _edje_part_recalc_single(Edje *ed,
|
|||
want_h = new_h = params->h;
|
||||
|
||||
aspect = (double)params->w / (double)params->h;
|
||||
amax = desc->aspect.max;
|
||||
amin = desc->aspect.min;
|
||||
if ((ep->swallow_params.aspect.w > 0) &&
|
||||
(ep->swallow_params.aspect.h > 0))
|
||||
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 */
|
||||
{
|
||||
/* adjust for max aspect (width / height) */
|
||||
if ((desc->aspect.max > 0.0) && (aspect > desc->aspect.max))
|
||||
if ((amax > 0.0) && (aspect > amax))
|
||||
{
|
||||
new_h = (params->w / desc->aspect.max);
|
||||
new_w = (params->h * desc->aspect.max);
|
||||
new_h = (params->w / amax);
|
||||
new_w = (params->h * amax);
|
||||
}
|
||||
/* adjust for min aspect (width / height) */
|
||||
if ((desc->aspect.min > 0.0) && (aspect < desc->aspect.min))
|
||||
if ((amin > 0.0) && (aspect < amin))
|
||||
{
|
||||
new_h = (params->w / desc->aspect.min);
|
||||
new_w = (params->h * desc->aspect.min);
|
||||
new_h = (params->w / amin);
|
||||
new_w = (params->h * amin);
|
||||
}
|
||||
} /* prefer vertical size as determiner */
|
||||
else if (desc->aspect.prefer == EDJE_ASPECT_PREFER_VERTICAL) /* keep both dimensions in check */
|
||||
{
|
||||
/* adjust for max aspect (width / height) */
|
||||
if ((desc->aspect.max > 0.0) && (aspect > desc->aspect.max))
|
||||
new_w = (params->h * desc->aspect.max);
|
||||
if ((amax > 0.0) && (aspect > amax))
|
||||
new_w = (params->h * amax);
|
||||
/* adjust for min aspect (width / height) */
|
||||
if ((desc->aspect.min > 0.0) && (aspect < desc->aspect.min))
|
||||
new_w = (params->h * desc->aspect.min);
|
||||
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 */
|
||||
{
|
||||
/* adjust for max aspect (width / height) */
|
||||
if ((desc->aspect.max > 0.0) && (aspect > desc->aspect.max))
|
||||
new_h = (params->w / desc->aspect.max);
|
||||
if ((amax > 0.0) && (aspect > amax))
|
||||
new_h = (params->w / amax);
|
||||
/* adjust for min aspect (width / height) */
|
||||
if ((desc->aspect.min > 0.0) && (aspect < desc->aspect.min))
|
||||
new_h = (params->w / desc->aspect.min);
|
||||
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 */
|
||||
{
|
||||
/* adjust for max aspect (width / height) */
|
||||
if ((desc->aspect.max > 0.0) && (aspect > desc->aspect.max))
|
||||
if ((amax > 0.0) && (aspect > amax))
|
||||
{
|
||||
new_w = (params->h * desc->aspect.max);
|
||||
new_h = (params->w / desc->aspect.max);
|
||||
new_w = (params->h * amax);
|
||||
new_h = (params->w / amax);
|
||||
}
|
||||
/* adjust for min aspect (width / height) */
|
||||
if ((desc->aspect.min > 0.0) && (aspect < desc->aspect.min))
|
||||
if ((amin > 0.0) && (aspect < amin))
|
||||
{
|
||||
new_w = (params->h * desc->aspect.min);
|
||||
new_h = (params->w / desc->aspect.min);
|
||||
new_w = (params->h * amin);
|
||||
new_h = (params->w / amin);
|
||||
}
|
||||
}
|
||||
/* do real adjustment */
|
||||
|
|
|
@ -581,6 +581,9 @@ struct _Edje_Real_Part
|
|||
struct {
|
||||
int w, h;
|
||||
} min, max;
|
||||
struct {
|
||||
int w, h;
|
||||
} aspect;
|
||||
} swallow_params;
|
||||
unsigned char calculated;
|
||||
unsigned char calculating;
|
||||
|
|
|
@ -744,16 +744,20 @@ 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;
|
||||
int w1, h1, w2, h2, 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");
|
||||
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;
|
||||
}
|
||||
ed->dirty = 1;
|
||||
_edje_recalc(ed);
|
||||
|
@ -809,6 +813,33 @@ edje_extern_object_max_size_set(Evas_Object *obj, Evas_Coord maxw, Evas_Coord ma
|
|||
evas_object_data_del(obj, "\377 edje.maxh");
|
||||
}
|
||||
|
||||
/** Set the object aspect size
|
||||
* @param obj A valid Evas_Object handle
|
||||
* @param aw The aspect radio width
|
||||
* @param ah The aspect ratio height
|
||||
*
|
||||
* This sets the desired aspect ratio to keep an object that will be swallowed
|
||||
* by Edje. The width and height define a preferred size ASPECT and the
|
||||
* object may be scaled to be larger or smaller, but retaining the relative
|
||||
* scale of both aspwct width and height.
|
||||
*/
|
||||
EAPI void
|
||||
edje_extern_object_aspect_set(Evas_Object *obj, Evas_Coord aw, Evas_Coord ah)
|
||||
{
|
||||
int mw, mh;
|
||||
|
||||
mw = aw;
|
||||
mh = ah;
|
||||
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)
|
||||
evas_object_data_set(obj, "\377 edje.asph", (void *)mh);
|
||||
else
|
||||
evas_object_data_del(obj, "\377 edje.asph");
|
||||
}
|
||||
|
||||
/** Unswallow an object
|
||||
* @param obj A valid Evas_Object handle
|
||||
* @param obj_swallow The swallowed object
|
||||
|
|
Loading…
Reference in New Issue