From f6d680ad4b49af6d607bc68a446d110e316d70d6 Mon Sep 17 00:00:00 2001 From: tsauerbeck Date: Tue, 2 Nov 2004 17:31:56 +0000 Subject: [PATCH] added support for a few more properties for the custom state stuff SVN revision: 12135 --- legacy/edje/data/include/edje.inc | 9 +- legacy/edje/src/lib/edje_embryo.c | 157 ++++++++++++++++++++++++----- legacy/edje/src/lib/edje_private.h | 9 +- 3 files changed, 146 insertions(+), 29 deletions(-) diff --git a/legacy/edje/data/include/edje.inc b/legacy/edje/data/include/edje.inc index 24748006c6..347aa89c5a 100644 --- a/legacy/edje/data/include/edje.inc +++ b/legacy/edje/data/include/edje.inc @@ -144,7 +144,14 @@ native custom_state(part_id, state[], Float:state_val = 0.0); enum State_Param { - STATE_ALIGNMENT = 1 + STATE_ALIGNMENT = 1, + STATE_MIN = 2, + STATE_MAX = 3, + STATE_STEP = 4, + STATE_ASPECT = 5, + STATE_COLOR = 6, + STATE_COLOR2 = 7, + STATE_COLOR3 = 8 }; native set_state_val(part_id, State_Param:p, ...); diff --git a/legacy/edje/src/lib/edje_embryo.c b/legacy/edje/src/lib/edje_embryo.c index a4a23aa2f9..93948b9f40 100644 --- a/legacy/edje/src/lib/edje_embryo.c +++ b/legacy/edje/src/lib/edje_embryo.c @@ -125,7 +125,15 @@ * set_state_val(part_id, State_Param:param, ...) * get_state_val(part_id, State_Param:param, ...) * - * Supported parameters: align[Float:x, Float:y] + * Supported parameters: + * align[Float:x, Float:y] + * min[w, h] + * max[w, h] + * step[x,y] + * aspect[Float:min, Float:max] + * color[r,g,b,a] + * color2[r,g,b,a] + * color3[r,g,b,a] * * ** part_id and program_id need to be able to be "found" from strings * @@ -148,11 +156,7 @@ * Need to implement support for the following properties * in get/set_state_val(): * - * min[w,h] - * max[w,h] - * step[x,y] - * aspect[min,max] - * apsetc_preference + * aspect_preference * rel1[relx,rely,part_id,part_id] * rel1[offx,offy] * rel2[relx,rely,part_id,part_id] @@ -163,9 +167,6 @@ * fill[pos_relx,pos_rely,pos_offx,pos_offy] * fill[sz_relx,sz_rely,sz_offx,sz_offy] * color_class - * color[r,g,b,a] - * color2[r,g,b,a] - * color3[r,g,b,a] * text[text_class] * text[font] * text[size] @@ -186,6 +187,14 @@ ___l = embryo_data_string_length_get(ep, ___cptr); \ if (((str) = alloca(___l + 1))) \ embryo_data_string_get(ep, ___cptr, (str));}} +#define GETFLOAT(val, par) { \ + float *___cptr; \ + if ((___cptr = (float *)embryo_data_address_get(ep, (par)))) { \ + val = *___cptr;}} +#define GETINT(val, par) { \ + int *___cptr; \ + if ((___cptr = (int *)embryo_data_address_get(ep, (par)))) { \ + val = *___cptr;}} #define SETSTR(str, par) { \ Embryo_Cell *___cptr; \ if ((___cptr = embryo_data_address_get(ep, (par)))) { \ @@ -1506,13 +1515,63 @@ _edje_embryo_fn_set_state_val(Embryo_Program *ep, Embryo_Cell *params) case EDJE_STATE_PARAM_ALIGNMENT: CHKPARAM(4); - cptr = embryo_data_address_get(ep, params[3]); - if (cptr) - rp->custom.description->align.x = EMBRYO_CELL_TO_FLOAT(*cptr); + GETFLOAT(rp->custom.description->align.x, params[3]); + GETFLOAT(rp->custom.description->align.y, params[4]); - cptr = embryo_data_address_get(ep, params[4]); - if (cptr) - rp->custom.description->align.y = EMBRYO_CELL_TO_FLOAT(*cptr); + break; + case EDJE_STATE_PARAM_MIN: + CHKPARAM(4); + + GETINT(rp->custom.description->min.w, params[3]); + GETINT(rp->custom.description->min.h, params[4]); + + break; + case EDJE_STATE_PARAM_MAX: + CHKPARAM(4); + + GETINT(rp->custom.description->max.w, params[3]); + GETINT(rp->custom.description->max.h, params[4]); + + break; + case EDJE_STATE_PARAM_STEP: + CHKPARAM(4); + + GETINT(rp->custom.description->step.x, params[3]); + GETINT(rp->custom.description->step.y, params[4]); + + break; + case EDJE_STATE_PARAM_ASPECT: + CHKPARAM(4); + + GETFLOAT(rp->custom.description->aspect.min, params[3]); + GETFLOAT(rp->custom.description->aspect.max, params[4]); + + break; + case EDJE_STATE_PARAM_COLOR: + CHKPARAM(6); + + GETINT(rp->custom.description->color.r, params[3]); + GETINT(rp->custom.description->color.g, params[4]); + GETINT(rp->custom.description->color.b, params[5]); + GETINT(rp->custom.description->color.a, params[6]); + + break; + case EDJE_STATE_PARAM_COLOR2: + CHKPARAM(6); + + GETINT(rp->custom.description->color2.r, params[3]); + GETINT(rp->custom.description->color2.g, params[4]); + GETINT(rp->custom.description->color2.b, params[5]); + GETINT(rp->custom.description->color2.a, params[6]); + + break; + case EDJE_STATE_PARAM_COLOR3: + CHKPARAM(6); + + GETINT(rp->custom.description->color3.r, params[3]); + GETINT(rp->custom.description->color3.g, params[4]); + GETINT(rp->custom.description->color3.b, params[5]); + GETINT(rp->custom.description->color3.a, params[6]); break; default: @@ -1550,19 +1609,63 @@ _edje_embryo_fn_get_state_val(Embryo_Program *ep, Embryo_Cell *params) case EDJE_STATE_PARAM_ALIGNMENT: CHKPARAM(4); - cptr = embryo_data_address_get(ep, params[3]); - if (cptr) - { - f = rp->custom.description->align.x; - *cptr = EMBRYO_FLOAT_TO_CELL(f); - } + SETFLOAT(rp->custom.description->align.x, params[3]); + SETFLOAT(rp->custom.description->align.y, params[4]); - cptr = embryo_data_address_get(ep, params[4]); - if (cptr) - { - f = rp->custom.description->align.y; - *cptr = EMBRYO_FLOAT_TO_CELL(f); - } + break; + case EDJE_STATE_PARAM_MIN: + CHKPARAM(4); + + SETINT(rp->custom.description->min.w, params[3]); + SETINT(rp->custom.description->min.h, params[4]); + + break; + case EDJE_STATE_PARAM_MAX: + CHKPARAM(4); + + SETINT(rp->custom.description->max.w, params[3]); + SETINT(rp->custom.description->max.h, params[4]); + + break; + case EDJE_STATE_PARAM_STEP: + CHKPARAM(4); + + SETINT(rp->custom.description->step.x, params[3]); + SETINT(rp->custom.description->step.y, params[4]); + + break; + case EDJE_STATE_PARAM_ASPECT: + CHKPARAM(4); + + SETFLOAT(rp->custom.description->aspect.min, params[3]); + SETFLOAT(rp->custom.description->aspect.max, params[4]); + + break; + case EDJE_STATE_PARAM_COLOR: + CHKPARAM(6); + + SETINT(rp->custom.description->color.r, params[3]); + SETINT(rp->custom.description->color.g, params[4]); + SETINT(rp->custom.description->color.b, params[5]); + SETINT(rp->custom.description->color.a, params[6]); + + break; + case EDJE_STATE_PARAM_COLOR2: + CHKPARAM(6); + + SETINT(rp->custom.description->color2.r, params[3]); + SETINT(rp->custom.description->color2.g, params[4]); + SETINT(rp->custom.description->color2.b, params[5]); + SETINT(rp->custom.description->color2.a, params[6]); + + break; + case EDJE_STATE_PARAM_COLOR3: + CHKPARAM(6); + + SETINT(rp->custom.description->color3.r, params[3]); + SETINT(rp->custom.description->color3.g, params[4]); + SETINT(rp->custom.description->color3.b, params[5]); + SETINT(rp->custom.description->color3.a, params[6]); break; default: diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 50d5b4df43..5898186afe 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -126,7 +126,14 @@ typedef struct _Edje_Part_Description Edje_Part_Description; #define EDJE_STATE_PARAM_NONE 0 #define EDJE_STATE_PARAM_ALIGNMENT 1 -#define EDJE_STATE_PARAM_LAST 2 +#define EDJE_STATE_PARAM_MIN 2 +#define EDJE_STATE_PARAM_MAX 3 +#define EDJE_STATE_PARAM_STEP 4 +#define EDJE_STATE_PARAM_ASPECT 5 +#define EDJE_STATE_PARAM_COLOR 6 +#define EDJE_STATE_PARAM_COLOR2 7 +#define EDJE_STATE_PARAM_COLOR3 8 +#define EDJE_STATE_PARAM_LAST 9 /*----------*/