From 07447cf0790949b0a0ec826f07f553cca4d87eb1 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sat, 4 Oct 2008 16:11:23 +0000 Subject: [PATCH] add align, weight and padding hints for evas objects. SVN revision: 36429 --- legacy/evas/src/lib/Evas.h | 8 +- legacy/evas/src/lib/canvas/evas_object_main.c | 170 ++++++++++++++++++ legacy/evas/src/lib/include/evas_private.h | 14 ++ 3 files changed, 191 insertions(+), 1 deletion(-) diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index 905ee0835c..38a2a76e2b 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -712,7 +712,13 @@ extern "C" { EAPI void evas_object_size_hint_request_set (Evas_Object *obj, Evas_Coord w, Evas_Coord h); EAPI void evas_object_size_hint_aspect_get (const Evas_Object *obj, Evas_Aspect_Control *aspect, Evas_Coord *w, Evas_Coord *h); EAPI void evas_object_size_hint_aspect_set (Evas_Object *obj, Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h); - + EAPI void evas_object_size_hint_align_get (const Evas_Object *obj, double *x, double *y); + EAPI void evas_object_size_hint_align_set (Evas_Object *obj, double x, double y); + EAPI void evas_object_size_hint_weight_get (const Evas_Object *obj, double *x, double *y); + EAPI void evas_object_size_hint_weight_set (Evas_Object *obj, double x, double y); + EAPI void evas_object_size_hint_padding_get (const Evas_Object *obj, Evas_Coord *l, Evas_Coord *r, Evas_Coord *t, Evas_Coord *b); + EAPI void evas_object_size_hint_padding_set (Evas_Object *obj, Evas_Coord l, Evas_Coord r, Evas_Coord t, Evas_Coord b); + EAPI void evas_object_show (Evas_Object *obj); EAPI void evas_object_hide (Evas_Object *obj); EAPI Evas_Bool evas_object_visible_get (const Evas_Object *obj); diff --git a/legacy/evas/src/lib/canvas/evas_object_main.c b/legacy/evas/src/lib/canvas/evas_object_main.c index f2a1029736..6802a66305 100644 --- a/legacy/evas/src/lib/canvas/evas_object_main.c +++ b/legacy/evas/src/lib/canvas/evas_object_main.c @@ -823,6 +823,176 @@ evas_object_size_hint_aspect_set(Evas_Object *obj, Evas_Aspect_Control aspect, E evas_object_inform_call_changed_size_hints(obj); } +/** + * Retrieves the size align control hint. + * + * This is not a size enforcement in any way, it's just a hint that should + * be used whenever appropriate. + * + * @param obj The given evas object. + * @param w Pointer to a double in which to store the align x. + * @param h Pointer to a double in which to store the align y. + * @ingroup Evas_Object_Size_Hints_Group + */ +EAPI void +evas_object_size_hint_align_get(const Evas_Object *obj, double *x, double *y) +{ + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + if (x) *x = 0.0; if (y) *y = 0.0; + return; + MAGIC_CHECK_END(); + if ((!obj->size_hints) || obj->delete_me) + { + if (x) *x = 0.0; if (y) *y = 0.0; + return; + } + if (x) *x = obj->size_hints->align.x; + if (y) *y = obj->size_hints->align.y; +} + +/** + * Sets the size align control hint. + * + * This is not a size enforcement in any way, it's just a hint that should + * be used whenever appropriate. + * + * @param obj The given evas object. + * @param x Double (0.0-1.0) to use as align x hint. + * @param y Double (0.0-1.0) to use as align y hint. + * @ingroup Evas_Object_Size_Hints_Group + */ +EAPI void +evas_object_size_hint_align_set(Evas_Object *obj, double x, double y) +{ + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + if (obj->delete_me) + return; + if (!obj->size_hints) + obj->size_hints = calloc(1, sizeof(Evas_Size_Hints)); + + obj->size_hints->align.x = x; + obj->size_hints->align.x = y; + + evas_object_inform_call_changed_size_hints(obj); +} + +/** + * Retrieves the size weight control hint. + * + * This is not a size enforcement in any way, it's just a hint that should + * be used whenever appropriate. + * + * @param obj The given evas object. + * @param w Pointer to a double in which to store the weight x. + * @param h Pointer to a double in which to store the weight y. + * @ingroup Evas_Object_Size_Hints_Group + */ +EAPI void +evas_object_size_hint_weight_get(const Evas_Object *obj, double *x, double *y) +{ + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + if (x) *x = 0.0; if (y) *y = 0.0; + return; + MAGIC_CHECK_END(); + if ((!obj->size_hints) || obj->delete_me) + { + if (x) *x = 0.0; if (y) *y = 0.0; + return; + } + if (x) *x = obj->size_hints->weight.x; + if (y) *y = obj->size_hints->weight.y; +} + +/** + * Sets the size weight control hint. + * + * This is not a size enforcement in any way, it's just a hint that should + * be used whenever appropriate. + * + * @param obj The given evas object. + * @param x Double (0.0-1.0) to use as weight x hint. + * @param y Double (0.0-1.0) to use as weight y hint. + * @ingroup Evas_Object_Size_Hints_Group + */ +EAPI void +evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y) +{ + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + if (obj->delete_me) + return; + if (!obj->size_hints) + obj->size_hints = calloc(1, sizeof(Evas_Size_Hints)); + + obj->size_hints->weight.x = x; + obj->size_hints->weight.x = y; + + evas_object_inform_call_changed_size_hints(obj); +} + +/** + * Retrieves the size padding control hint. + * + * This is not a size enforcement in any way, it's just a hint that should + * be used whenever appropriate. + * + * @param obj The given evas object. + * @param w Pointer to a double in which to store the padding x. + * @param h Pointer to a double in which to store the padding y. + * @ingroup Evas_Object_Size_Hints_Group + */ +EAPI void +evas_object_size_hint_padding_get(const Evas_Object *obj, Evas_Coord *l, Evas_Coord *r, Evas_Coord *t, Evas_Coord *b) +{ + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + if (l) *l = 0; if (r) *r = 0; + if (t) *t = 0; if (b) *b = 0; + return; + MAGIC_CHECK_END(); + if ((!obj->size_hints) || obj->delete_me) + { + if (l) *l = 0; if (r) *r = 0; + if (t) *t = 0; if (b) *b = 0; + return; + } + if (l) *l = obj->size_hints->padding.l; + if (r) *r = obj->size_hints->padding.r; + if (t) *t = obj->size_hints->padding.t; + if (b) *b = obj->size_hints->padding.b; +} + +/** + * Sets the size padding control hint. + * + * This is not a size enforcement in any way, it's just a hint that should + * be used whenever appropriate. + * + * @param obj The given evas object. + * @param x Double (0.0-1.0) to use as padding x hint. + * @param y Double (0.0-1.0) to use as padding y hint. + * @ingroup Evas_Object_Size_Hints_Group + */ +EAPI void +evas_object_size_hint_padding_set(Evas_Object *obj, Evas_Coord l, Evas_Coord r, Evas_Coord t, Evas_Coord b) +{ + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return; + MAGIC_CHECK_END(); + if (obj->delete_me) + return; + if (!obj->size_hints) + obj->size_hints = calloc(1, sizeof(Evas_Size_Hints)); + + obj->size_hints->padding.l = l; + obj->size_hints->padding.r = r; + obj->size_hints->padding.t = t; + obj->size_hints->padding.b = b; + + evas_object_inform_call_changed_size_hints(obj); +} /** * @defgroup Evas_Object_Visibility_Group Generic Object Visibility Functions diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index bed9703d25..8d6ec6bc7b 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -24,6 +24,8 @@ typedef struct _Evas_Layer Evas_Layer; typedef struct _Evas_Size Evas_Size; typedef struct _Evas_Aspect Evas_Aspect; +typedef struct _Evas_Border Evas_Border; +typedef struct _Evas_Double_Pair Evas_Double_Pair; typedef struct _Evas_Size_Hints Evas_Size_Hints; typedef struct _Evas_Font_Dir Evas_Font_Dir; typedef struct _Evas_Font Evas_Font; @@ -348,10 +350,22 @@ struct _Evas_Aspect Evas_Size size; }; +struct _Evas_Border +{ + Evas_Coord l, r, t, b; +}; + +struct _Evas_Double_Pair +{ + double x, y; +}; + struct _Evas_Size_Hints { Evas_Size min, max, request; Evas_Aspect aspect; + Evas_Double_Pair align, weight; + Evas_Border padding; }; struct _Evas_Object