From: <no-...@en...> - 2008-09-11 11:15:40
|
Author: cedric Date: 2008-09-11 04:15:39 -0700 (Thu, 11 Sep 2008) New Revision: 35943 Modified: trunk/edje/src/lib/edje_calc.c Log: Replace big serie of if, with a cleaner switch. Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2008-09-11 11:14:39 UTC (rev 35942) +++ trunk/edje/src/lib/edje_calc.c 2008-09-11 11:15:39 UTC (rev 35943) @@ -418,64 +418,70 @@ break; } } - if (apref == EDJE_ASPECT_PREFER_NONE) /* keep botth dimensions in check */ + + switch (apref) { - /* adjust for min aspect (width / height) */ - if ((amin > 0.0) && (aspect < amin)) - { - new_h = (params->w / amin); - new_w = (params->h * amin); - } - /* adjust for max aspect (width / height) */ - if ((amax > 0.0) && (aspect > amax)) - { - new_h = (params->w / amax); - new_w = (params->h * amax); - } - if ((amax > 0.0) && (new_w < params->w)) - { - new_w = params->w; - new_h = params->w / amax; - } - if ((amax > 0.0) && (new_h < params->h)) - { - new_w = params->h * amax; - new_h = params->h; - } - } /* prefer vertical size as determiner */ - else if (apref == EDJE_ASPECT_PREFER_VERTICAL) /* keep both dimensions in check */ - { - /* adjust for max aspect (width / height) */ - if ((amax > 0.0) && (aspect > amax)) - new_w = (params->h * amax); - /* adjust for min aspect (width / height) */ - if ((amin > 0.0) && (aspect < amin)) - new_w = (params->h * amin); - } /* prefer horizontal size as determiner */ - else if (apref == EDJE_ASPECT_PREFER_HORIZONTAL) /* keep both dimensions in check */ - { - /* adjust for max aspect (width / height) */ - if ((amax > 0.0) && (aspect > amax)) - new_h = (params->w / amax); - /* adjust for min aspect (width / height) */ - if ((amin > 0.0) && (aspect < amin)) - new_h = (params->w / amin); + case EDJE_ASPECT_PREFER_NONE: + /* keep botth dimensions in check */ + /* adjust for min aspect (width / height) */ + if ((amin > 0.0) && (aspect < amin)) + { + new_h = (params->w / amin); + new_w = (params->h * amin); + } + /* adjust for max aspect (width / height) */ + if ((amax > 0.0) && (aspect > amax)) + { + new_h = (params->w / amax); + new_w = (params->h * amax); + } + if ((amax > 0.0) && (new_w < params->w)) + { + new_w = params->w; + new_h = params->w / amax; + } + if ((amax > 0.0) && (new_h < params->h)) + { + new_w = params->h * amax; + new_h = params->h; + } + break; + /* prefer vertical size as determiner */ + case EDJE_ASPECT_PREFER_VERTICAL: + /* keep both dimensions in check */ + /* adjust for max aspect (width / height) */ + if ((amax > 0.0) && (aspect > amax)) + new_w = (params->h * amax); + /* adjust for min aspect (width / height) */ + if ((amin > 0.0) && (aspect < amin)) + new_w = (params->h * amin); + break; + /* prefer horizontal size as determiner */ + case EDJE_ASPECT_PREFER_HORIZONTAL: + /* keep both dimensions in check */ + /* adjust for max aspect (width / height) */ + if ((amax > 0.0) && (aspect > amax)) + new_h = (params->w / amax); + /* adjust for min aspect (width / height) */ + if ((amin > 0.0) && (aspect < amin)) + new_h = (params->w / amin); + break; + case EDJE_ASPECT_PREFER_BOTH: + /* keep both dimensions in check */ + /* adjust for max aspect (width / height) */ + if ((amax > 0.0) && (aspect > amax)) + { + new_w = (params->h * amax); + new_h = (params->w / amax); + } + /* adjust for min aspect (width / height) */ + if ((amin > 0.0) && (aspect < amin)) + { + new_w = (params->h * amin); + new_h = (params->w / amin); + } + break; } - else if (apref == EDJE_ASPECT_PREFER_BOTH) /* keep both dimensions in check */ - { - /* adjust for max aspect (width / height) */ - if ((amax > 0.0) && (aspect > amax)) - { - new_w = (params->h * amax); - new_h = (params->w / amax); - } - /* adjust for min aspect (width / height) */ - if ((amin > 0.0) && (aspect < amin)) - { - new_w = (params->h * amin); - new_h = (params->w / amin); - } - } if (!((amin > 0.0) && (amax > 0.0) && (apref == EDJE_ASPECT_PREFER_NONE))) { @@ -1294,18 +1300,27 @@ printf("EDJE: Error loading image collection \"%s\" from " "file \"%s\". Missing EET Evas loader module?\n", buf, ed->file->path); - if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_GENERIC) - printf("Error type: EVAS_LOAD_ERROR_GENERIC\n"); - else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_DOES_NOT_EXIST) - printf("Error type: EVAS_LOAD_ERROR_DOES_NOT_EXIST\n"); - else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_PERMISSION_DENIED) - printf("Error type: EVAS_LOAD_ERROR_PERMISSION_DENIED\n"); - else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED) - printf("Error type: EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED\n"); - else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_CORRUPT_FILE) - printf("Error type: EVAS_LOAD_ERROR_CORRUPT_FILE\n"); - else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_UNKNOWN_FORMAT) - printf("Error type: EVAS_LOAD_ERROR_UNKNOWN_FORMAT\n"); + switch (evas_object_image_load_error_get(ep->object)) + { + case EVAS_LOAD_ERROR_GENERIC: + printf("Error type: EVAS_LOAD_ERROR_GENERIC\n"); + break; + case EVAS_LOAD_ERROR_DOES_NOT_EXIST: + printf("Error type: EVAS_LOAD_ERROR_DOES_NOT_EXIST\n"); + break; + case EVAS_LOAD_ERROR_PERMISSION_DENIED: + printf("Error type: EVAS_LOAD_ERROR_PERMISSION_DENIED\n"); + break; + case EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED: + printf("Error type: EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED\n"); + break; + case EVAS_LOAD_ERROR_CORRUPT_FILE: + printf("Error type: EVAS_LOAD_ERROR_CORRUPT_FILE\n"); + break; + case EVAS_LOAD_ERROR_UNKNOWN_FORMAT: + printf("Error type: EVAS_LOAD_ERROR_UNKNOWN_FORMAT\n"); + break; + } } } } @@ -1430,43 +1445,44 @@ p3.color.b = INTP(p1.color.b, p2.color.b, pos); p3.color.a = INTP(p1.color.a, p2.color.a, pos); - if ((part_type == EDJE_PART_TYPE_IMAGE) || - (part_type == EDJE_PART_TYPE_GRADIENT)) + switch (part_type) { - p3.fill.x = INTP(p1.fill.x, p2.fill.x, pos); - p3.fill.y = INTP(p1.fill.y, p2.fill.y, pos); - p3.fill.w = INTP(p1.fill.w, p2.fill.w, pos); - p3.fill.h = INTP(p1.fill.h, p2.fill.h, pos); - if (part_type == EDJE_PART_TYPE_GRADIENT) - { - p3.fill.angle = INTP(p1.fill.angle, p2.fill.angle, pos); - p3.fill.spread = (beginning_pos) ? p1.fill.spread : p2.fill.spread; - p3.gradient = (beginning_pos) ? p1.gradient : p2.gradient; - } - else - { - p3.border.l = INTP(p1.border.l, p2.border.l, pos); - p3.border.r = INTP(p1.border.r, p2.border.r, pos); - p3.border.t = INTP(p1.border.t, p2.border.t, pos); - p3.border.b = INTP(p1.border.b, p2.border.b, pos); - } - } - else if ((part_type == EDJE_PART_TYPE_TEXT) || - (part_type == EDJE_PART_TYPE_TEXTBLOCK)) - { - p3.color2.r = INTP(p1.color2.r, p2.color2.r, pos); - p3.color2.g = INTP(p1.color2.g, p2.color2.g, pos); - p3.color2.b = INTP(p1.color2.b, p2.color2.b, pos); - p3.color2.a = INTP(p1.color2.a, p2.color2.a, pos); + case EDJE_PART_TYPE_IMAGE: + case EDJE_PART_TYPE_GRADIENT: + p3.fill.x = INTP(p1.fill.x, p2.fill.x, pos); + p3.fill.y = INTP(p1.fill.y, p2.fill.y, pos); + p3.fill.w = INTP(p1.fill.w, p2.fill.w, pos); + p3.fill.h = INTP(p1.fill.h, p2.fill.h, pos); + if (part_type == EDJE_PART_TYPE_GRADIENT) + { + p3.fill.angle = INTP(p1.fill.angle, p2.fill.angle, pos); + p3.fill.spread = (beginning_pos) ? p1.fill.spread : p2.fill.spread; + p3.gradient = (beginning_pos) ? p1.gradient : p2.gradient; + } + else + { + p3.border.l = INTP(p1.border.l, p2.border.l, pos); + p3.border.r = INTP(p1.border.r, p2.border.r, pos); + p3.border.t = INTP(p1.border.t, p2.border.t, pos); + p3.border.b = INTP(p1.border.b, p2.border.b, pos); + } + break; + case EDJE_PART_TYPE_TEXT: + case EDJE_PART_TYPE_TEXTBLOCK: + p3.color2.r = INTP(p1.color2.r, p2.color2.r, pos); + p3.color2.g = INTP(p1.color2.g, p2.color2.g, pos); + p3.color2.b = INTP(p1.color2.b, p2.color2.b, pos); + p3.color2.a = INTP(p1.color2.a, p2.color2.a, pos); - p3.color3.r = INTP(p1.color3.r, p2.color3.r, pos); - p3.color3.g = INTP(p1.color3.g, p2.color3.g, pos); - p3.color3.b = INTP(p1.color3.b, p2.color3.b, pos); - p3.color3.a = INTP(p1.color3.a, p2.color3.a, pos); + p3.color3.r = INTP(p1.color3.r, p2.color3.r, pos); + p3.color3.g = INTP(p1.color3.g, p2.color3.g, pos); + p3.color3.b = INTP(p1.color3.b, p2.color3.b, pos); + p3.color3.a = INTP(p1.color3.a, p2.color3.a, pos); - p3.text.align.x = INTP(p1.text.align.x, p2.text.align.x, pos); - p3.text.align.y = INTP(p1.text.align.y, p2.text.align.y, pos); - p3.text.elipsis = INTP(p1.text.elipsis, p2.text.elipsis, pos); + p3.text.align.x = INTP(p1.text.align.x, p2.text.align.x, pos); + p3.text.align.y = INTP(p1.text.align.y, p2.text.align.y, pos); + p3.text.elipsis = INTP(p1.text.elipsis, p2.text.elipsis, pos); + break; } pf = &p3; |
From: <no-...@en...> - 2008-09-11 11:18:37
|
Author: cedric Date: 2008-09-11 04:18:33 -0700 (Thu, 11 Sep 2008) New Revision: 35944 Modified: trunk/edje/src/lib/edje_calc.c Log: Only update Evas_Object geometry when they are visible. This should prevent them from being put in the evas_render_update phase. I did extensively test this patch since a few month and didn't notice any bug with it in my apps, nor in E. But please report anything that goes wrong for you after this version. Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2008-09-11 11:15:39 UTC (rev 35943) +++ trunk/edje/src/lib/edje_calc.c 2008-09-11 11:18:33 UTC (rev 35944) @@ -1521,8 +1521,12 @@ (pf->color.g * pf->color.a) / 255, (pf->color.b * pf->color.a) / 255, pf->color.a); - if (pf->visible) evas_object_show(ep->object); - else evas_object_hide(ep->object); + if (!pf->visible) + { + evas_object_hide(ep->object); + break; + } + evas_object_show(ep->object); /* move and resize are needed for all previous object => no break here. */ case EDJE_PART_TYPE_SWALLOW: case EDJE_PART_TYPE_GROUP: @@ -1566,10 +1570,14 @@ // (pf->color.g * pf->color.a) / 255, // (pf->color.b * pf->color.a) / 255, // pf->color.a); - evas_object_move(ep->swallowed_object, ed->x + pf->x, ed->y + pf->y); - evas_object_resize(ep->swallowed_object, pf->w, pf->h); - if (pf->visible) evas_object_show(ep->swallowed_object); - else evas_object_hide(ep->swallowed_object); + if (pf->visible) + { + evas_object_show(ep->swallowed_object); + evas_object_move(ep->swallowed_object, ed->x + pf->x, ed->y + pf->y); + evas_object_resize(ep->swallowed_object, pf->w, pf->h); + } + else + evas_object_hide(ep->swallowed_object); } } |
From: <no-...@en...> - 2008-09-11 11:20:45
|
Author: cedric Date: 2008-09-11 04:20:42 -0700 (Thu, 11 Sep 2008) New Revision: 35945 Modified: trunk/edje/src/lib/edje_match.c Log: This patch reduce the usage of memset by edje_match function. I did test this patch since three month in my apps and in E, and I didn't notice anything going wrong with it. If you experience strange bug with matching please report them. Modified: trunk/edje/src/lib/edje_match.c =================================================================== --- trunk/edje/src/lib/edje_match.c 2008-09-11 11:18:33 UTC (rev 35944) +++ trunk/edje/src/lib/edje_match.c 2008-09-11 11:20:42 UTC (rev 35945) @@ -67,10 +67,12 @@ ALIGN(struct_size); struct_size += states_has_size; - l = calloc(1, n * struct_size); + l = malloc(n * struct_size); if (!l) return 0; ppat->states = l; + ppat->states->size = 0; + states = (unsigned char *) (l + n); has = states + states_size; @@ -78,6 +80,9 @@ { l[i].states = (Edje_State *) states; l[i].has = (_Bool *) has; + + memset(l[i].has, 0, has_size); + states += states_has_size; has += states_has_size; } @@ -95,7 +100,7 @@ i = (idx * (patterns_max_length + 1)) + pos; - if (list->size > i) + if (i < list->size) { if (list->has[i]) return; } |
From: Enlightenment S. <no-...@en...> - 2008-10-20 09:17:20
|
Log: Use common eina convertion code. Author: cedric Date: 2008-10-20 02:11:19 -0700 (Mon, 20 Oct 2008) New Revision: 36841 Modified: trunk/edje/src/lib/edje_calc.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2008-10-20 08:05:42 UTC (rev 36840) +++ trunk/edje/src/lib/edje_calc.c 2008-10-20 09:11:19 UTC (rev 36841) @@ -2,6 +2,8 @@ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 */ +#include <eina_convert.h> + #include "edje_private.h" #define FLAG_NONE 0 @@ -1183,65 +1185,9 @@ } } -static int -_edje_nitoa_rec(char *string, int len, unsigned int value) -{ - const char *array = "0123456789"; - int length; - int quotient; - int modulo; - - if (len <= 0) return 0; - if (value == 0) return 0; - - quotient = value / 10; - modulo = value % 10; - - length = _edje_nitoa_rec(string, len - 1, quotient); - - if (length + 1 > len) return length; - - string[length] = array[modulo]; - - return length + 1; -} - -static int -_edje_nitoa(char *string, int len, int value) -{ - int length; - - if (len <= 0) return 0; - if (len == 1) - { - *string = '\0'; - return 1; - } - - if (value < 0) - { - *string = '-'; - - ++string; - --len; - } - - if (value == 0) - { - strncpy(string, "0", len); - return 1; - } - - length = _edje_nitoa_rec(string, len, value); - string[length] = '\0'; - - return length; -} - static void _edje_image_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edje_Part_Description *chosen_desc, double pos) { - char buf[4096]; int image_id; int image_count, image_num; @@ -1297,10 +1243,12 @@ } else { + char buf[1024]; + /* Replace snprint("images/%i") == memcpy + itoa */ #define IMAGES "images/" memcpy(buf, IMAGES, strlen(IMAGES)); - _edje_nitoa(buf + strlen(IMAGES), sizeof(buf) - strlen(IMAGES), image_id); + eina_convert_itoa(image_id, buf + strlen(IMAGES)); /* No need to check length as 2³² need only 10 characteres. */ evas_object_image_file_set(ep->object, ed->file->path, buf); if (evas_object_image_load_error_get(ep->object) != EVAS_LOAD_ERROR_NONE) |
From: Enlightenment S. <no-...@en...> - 2008-11-10 16:37:57
|
Log: This is a quick fix for edje match memory consuption. It is not the best solution, but the fastest to implement without breaking edje file format. So now, when a callback or a program don't use globbing charactere (*, ?, [] and \), the match are put in a little rbtree instead of the big automate matrix. This patch could potentially break edje user, if you experience anything strange with your edje file, please report. Author: cedric Date: 2008-11-10 08:37:52 -0800 (Mon, 10 Nov 2008) New Revision: 37577 Modified: trunk/edje/src/lib/edje_load.c trunk/edje/src/lib/edje_match.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_program.c Modified: trunk/edje/src/lib/edje_load.c =================================================================== --- trunk/edje/src/lib/edje_load.c 2008-11-10 16:23:56 UTC (rev 37576) +++ trunk/edje/src/lib/edje_load.c 2008-11-10 16:37:52 UTC (rev 37577) @@ -214,19 +214,28 @@ _edje_programs_patterns_clean(Edje *ed) { _edje_signals_sources_patterns_clean(&ed->patterns.programs); + + eina_rbtree_delete(ed->patterns.programs.exact_match, + EINA_RBTREE_FREE_CB(edje_match_signal_source_free), + NULL); + ed->patterns.programs.exact_match = NULL; + + ed->patterns.programs.globing = eina_list_free(ed->patterns.programs.globing); } static void _edje_programs_patterns_init(Edje *ed) { Edje_Signals_Sources_Patterns *ssp = &ed->patterns.programs; - Eina_List *programs = ed->collection->programs; if (ssp->signals_patterns) return; - ssp->signals_patterns = edje_match_programs_signal_init(programs); - ssp->sources_patterns = edje_match_programs_source_init(programs); + ssp->globing = edje_match_program_hash_build(ed->collection->programs, + &ssp->exact_match); + + ssp->signals_patterns = edje_match_programs_signal_init(ssp->globing); + ssp->sources_patterns = edje_match_programs_source_init(ssp->globing); } static int Modified: trunk/edje/src/lib/edje_match.c =================================================================== --- trunk/edje/src/lib/edje_match.c 2008-11-10 16:23:56 UTC (rev 37576) +++ trunk/edje/src/lib/edje_match.c 2008-11-10 16:37:52 UTC (rev 37577) @@ -55,7 +55,7 @@ unsigned char *states; unsigned char *has; - size_t i; + int i; states_size = sizeof (*l->states) * array_len; ALIGN(states_size); @@ -116,9 +116,9 @@ } static void -_edje_match_states_clear(Edje_States *list, - size_t patterns_size, - size_t patterns_max_length) +_edje_match_states_clear(Edje_States *list, + __UNUSED__ size_t patterns_size, + __UNUSED__ size_t patterns_max_length) { list->size = 0; } @@ -276,7 +276,7 @@ Type *data; \ size_t j; \ \ - data = eina_list_data_get(lst); \ + data = eina_list_data_get(lst); \ if (!data) \ { \ free(r); \ @@ -562,3 +562,134 @@ ssp->signals_patterns = NULL; ssp->sources_patterns = NULL; } + +static Eina_Rbtree_Direction +_edje_signal_source_node_cmp(const Edje_Signal_Source_Char *n1, + const Edje_Signal_Source_Char *n2, + __UNUSED__ void *data) +{ + int cmp; + + cmp = strcmp(n1->signal, n2->signal); + if (cmp) return cmp < 0 ? EINA_RBTREE_LEFT : EINA_RBTREE_RIGHT; + + return strcmp(n1->source, n2->source) < 0 ? EINA_RBTREE_LEFT : EINA_RBTREE_RIGHT; +} + +static int +_edje_signal_source_key_cmp(const Edje_Signal_Source_Char *node, + const char *signal, + __UNUSED__ int length, + const char *source) +{ + int cmp; + + cmp = strcmp(node->signal, signal); + if (cmp) return cmp; + + return strcmp(node->source, source); +} + + +Eina_List * +edje_match_program_hash_build(const Eina_List *callbacks, + Eina_Rbtree **tree) +{ + Eina_List *result = NULL; + Eina_Rbtree *new = NULL; + Edje_Program *program; + const Eina_List *l; + + EINA_LIST_FOREACH(callbacks, l, program) + { + if (program->signal && strpbrk(program->signal, "*?[\\") == NULL + && program->source && strpbrk(program->source, "*?[\\") == NULL) + { + Edje_Signal_Source_Char *item; + + item = (Edje_Signal_Source_Char*) eina_rbtree_inline_lookup(new, program->signal, 0, + EINA_RBTREE_CMP_KEY_CB(_edje_signal_source_key_cmp), program->source); + if (!item) + { + item = malloc(sizeof (Edje_Signal_Source_Char)); + if (!item) continue ; + + item->signal = program->signal; + item->source = program->source; + item->list = NULL; + + new = eina_rbtree_inline_insert(new, EINA_RBTREE_GET(item), + EINA_RBTREE_CMP_NODE_CB(_edje_signal_source_node_cmp), NULL); + } + + item->list = eina_list_prepend(item->list, program); + } + else + result = eina_list_prepend(result, program); + } + + *tree = new; + return result; +} + +Eina_List * +edje_match_callback_hash_build(const Eina_List *callbacks, + Eina_Rbtree **tree) +{ + Eina_List *result = NULL; + Eina_Rbtree *new = NULL; + Edje_Signal_Callback *callback; + const Eina_List *l; + + EINA_LIST_FOREACH(callbacks, l, callback) + { + if (callback->signal && strpbrk(callback->signal, "*?[\\") == NULL + && callback->source && strpbrk(callback->source, "*?[\\") == NULL) + { + Edje_Signal_Source_Char *item; + + item = (Edje_Signal_Source_Char*) eina_rbtree_inline_lookup(new, callback->signal, 0, + EINA_RBTREE_CMP_KEY_CB(_edje_signal_source_key_cmp), callback->source); + if (!item) + { + item = malloc(sizeof (Edje_Signal_Source_Char)); + if (!item) continue ; + + item->signal = callback->signal; + item->source = callback->source; + item->list = NULL; + + new = eina_rbtree_inline_insert(new, EINA_RBTREE_GET(item), + EINA_RBTREE_CMP_NODE_CB(_edje_signal_source_node_cmp), NULL); + } + + item->list = eina_list_prepend(item->list, callback); + } + else + result = eina_list_prepend(result, callback); + } + + *tree = new; + return result; +} + +const Eina_List * +edje_match_signal_source_hash_get(const char *signal, + const char *source, + const Eina_Rbtree *tree) +{ + Edje_Signal_Source_Char *lookup; + + lookup = (Edje_Signal_Source_Char*) eina_rbtree_inline_lookup(tree, signal, 0, + EINA_RBTREE_CMP_KEY_CB(_edje_signal_source_key_cmp), source); + + if (lookup) return lookup->list; + return NULL; +} + +void +edje_match_signal_source_free(Edje_Signal_Source_Char *key, __UNUSED__ void *data) +{ + eina_list_free(key->list); + free(key); +} Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2008-11-10 16:23:56 UTC (rev 37576) +++ trunk/edje/src/lib/edje_private.h 2008-11-10 16:37:52 UTC (rev 37577) @@ -581,11 +581,25 @@ typedef struct _Edje_Var_Animator Edje_Var_Animator; typedef struct _Edje_Var_Timer Edje_Var_Timer; typedef struct _Edje_Var_Pool Edje_Var_Pool; +typedef struct _Edje_Signal_Source_Char Edje_Signal_Source_Char; +struct _Edje_Signal_Source_Char +{ + EINA_RBTREE; + + const char *signal; + const char *source; + + Eina_List *list; +}; + struct _Edje_Signals_Sources_Patterns { Edje_Patterns *signals_patterns; Edje_Patterns *sources_patterns; + + Eina_Rbtree *exact_match; + Eina_List *globing; }; typedef struct _Edje_Signals_Sources_Patterns Edje_Signals_Sources_Patterns; @@ -952,6 +966,15 @@ void edje_match_patterns_free(Edje_Patterns *ppat); +Eina_List *edje_match_program_hash_build(const Eina_List *callbacks, + Eina_Rbtree **tree); +Eina_List *edje_match_callback_hash_build(const Eina_List *callbacks, + Eina_Rbtree **tree); +const Eina_List *edje_match_signal_source_hash_get(const char *signal, + const char *source, + const Eina_Rbtree *tree); +void edje_match_signal_source_free(Edje_Signal_Source_Char *key, void *data); + EAPI extern Eet_Data_Descriptor *_edje_edd_edje_file; EAPI extern Eet_Data_Descriptor *_edje_edd_edje_style; EAPI extern Eet_Data_Descriptor *_edje_edd_edje_style_tag; Modified: trunk/edje/src/lib/edje_program.c =================================================================== --- trunk/edje/src/lib/edje_program.c 2008-11-10 16:23:56 UTC (rev 37576) +++ trunk/edje/src/lib/edje_program.c 2008-11-10 16:37:52 UTC (rev 37577) @@ -860,6 +860,13 @@ _edje_callbacks_patterns_clean(Edje *ed) { _edje_signals_sources_patterns_clean(&ed->patterns.callbacks); + + eina_rbtree_delete(ed->patterns.callbacks.exact_match, + EINA_RBTREE_FREE_CB(edje_match_signal_source_free), + NULL); + ed->patterns.callbacks.exact_match = NULL; + + ed->patterns.callbacks.globing = eina_list_free(ed->patterns.callbacks.globing); } static void @@ -870,8 +877,11 @@ if (ssp->signals_patterns) return; - ssp->signals_patterns = edje_match_callback_signal_init(ed->callbacks); - ssp->sources_patterns = edje_match_callback_source_init(ed->callbacks); + ssp->globing = edje_match_callback_hash_build(ed->callbacks, + &ssp->exact_match); + + ssp->signals_patterns = edje_match_callback_signal_init(ssp->globing); + ssp->sources_patterns = edje_match_callback_source_init(ssp->globing); } /* FIXME: what if we delete the evas object??? */ @@ -942,14 +952,24 @@ #endif if (ed->collection->programs) { - if (edje_match_programs_exec(ed->patterns.programs.signals_patterns, - ed->patterns.programs.sources_patterns, - sig, - src, - ed->collection->programs, - _edje_glob_callback, - &data) == 0) - goto break_prog; + const Eina_List *match; + const Eina_List *l; + Edje_Program *pr; + + if (ed->patterns.programs.globing) + if (edje_match_programs_exec(ed->patterns.programs.signals_patterns, + ed->patterns.programs.sources_patterns, + sig, + src, + ed->patterns.programs.globing, + _edje_glob_callback, + &data) == 0) + goto break_prog; + + match = edje_match_signal_source_hash_get(sig, src, + ed->patterns.programs.exact_match); + EINA_LIST_FOREACH(match, l, pr) + _edje_glob_callback(pr, &data); } #ifdef EDJE_PROGRAM_CACHE @@ -994,18 +1014,32 @@ if (ed->callbacks) { - int r; + Edje_Signal_Callback *escb; + const Eina_List *match; + const Eina_List *l; + int r = 1; _edje_callbacks_patterns_init(ed); - r = edje_match_callback_exec(ed->patterns.callbacks.signals_patterns, - ed->patterns.callbacks.sources_patterns, - sig, - src, - ed->callbacks, - ed); + if (ed->patterns.callbacks.globing) + r = edje_match_callback_exec(ed->patterns.callbacks.signals_patterns, + ed->patterns.callbacks.sources_patterns, + sig, + src, + ed->patterns.callbacks.globing, + ed); if (!r) goto break_prog; + + match = edje_match_signal_source_hash_get(sig, src, + ed->patterns.callbacks.exact_match); + EINA_LIST_FOREACH(match, l, escb) + if ((!escb->just_added) && (!escb->delete_me)) + { + escb->func(escb->data, ed->obj, sig, src); + if (_edje_block_break(ed)) + goto break_prog; + } } ed->walking_callbacks = 0; |
From: Enlightenment S. <no-...@en...> - 2008-12-08 14:23:29
|
Log: The for loop inside _edje_file_del is accessing Edje_Real_Part that could be destroyed by _edje_cache_coll_unref. So moving the call to _edje_cache_coll_unref after the last use of Edje_Real_Part should be better. Author: cedric Date: 2008-12-08 06:23:26 -0800 (Mon, 08 Dec 2008) New Revision: 38020 Modified: trunk/edje/src/lib/edje_load.c Modified: trunk/edje/src/lib/edje_load.c =================================================================== --- trunk/edje/src/lib/edje_load.c 2008-12-08 12:49:36 UTC (rev 38019) +++ trunk/edje/src/lib/edje_load.c 2008-12-08 14:23:26 UTC (rev 38020) @@ -717,20 +717,6 @@ _edje_programs_patterns_clean(ed); if (!((ed->file) && (ed->collection))) return; - if ((ed->file) && (ed->collection)) - { - Eina_List *l; - Edje_Part *ep; - - _edje_textblock_styles_del(ed); - EINA_LIST_FOREACH(ed->collection->parts, l, ep) - { - _edje_text_part_on_del(ed, ep); - _edje_color_class_on_del(ed, ep); - } - _edje_cache_coll_unref(ed->file, ed->collection); - ed->collection = NULL; - } if (ed->table_parts) { int i; @@ -787,6 +773,20 @@ free(rp); } } + if ((ed->file) && (ed->collection)) + { + Eina_List *l; + Edje_Part *ep; + + _edje_textblock_styles_del(ed); + EINA_LIST_FOREACH(ed->collection->parts, l, ep) + { + _edje_text_part_on_del(ed, ep); + _edje_color_class_on_del(ed, ep); + } + _edje_cache_coll_unref(ed->file, ed->collection); + ed->collection = NULL; + } if (ed->file) { _edje_cache_file_unref(ed->file); |
From: Enlightenment S. <no-...@en...> - 2008-12-17 16:10:17
|
Log: Use small hash table insteed of bigger one. And move collection hash initialization a bit later. Author: cedric Date: 2008-12-17 08:10:07 -0800 (Wed, 17 Dec 2008) New Revision: 38186 Modified: trunk/edje/src/lib/edje_cache.c Modified: trunk/edje/src/lib/edje_cache.c =================================================================== --- trunk/edje/src/lib/edje_cache.c 2008-12-17 15:33:43 UTC (rev 38185) +++ trunk/edje/src/lib/edje_cache.c 2008-12-17 16:10:07 UTC (rev 38186) @@ -70,7 +70,7 @@ edc->part = eina_stringshare_add(coll); edc->references = 1; if (!edf->collection_hash) - edf->collection_hash = eina_hash_string_superfast_new(NULL); + edf->collection_hash = eina_hash_string_small_new(NULL); eina_hash_add(edf->collection_hash, coll, edc); return edc; } @@ -81,7 +81,7 @@ int count = 0; if (!edf->font_hash) - edf->font_hash = eina_hash_string_superfast_new(NULL); + edf->font_hash = eina_hash_string_small_new(NULL); if (edf->font_dir) { @@ -162,7 +162,8 @@ _edje_textblock_style_parse_and_fix(edf); if (!edf->data_cache) - edf->data_cache = eina_hash_string_superfast_new(NULL); + edf->data_cache = eina_hash_string_small_new(NULL); + EINA_LIST_FOREACH(edf->data, l, di) eina_hash_add(edf->data_cache, di->key, di->value); @@ -192,14 +193,12 @@ Edje_Part *ep; if (!_edje_file_hash) - _edje_file_hash = eina_hash_string_superfast_new(NULL); + _edje_file_hash = eina_hash_string_small_new(NULL); edf = eina_hash_find(_edje_file_hash, file); if (edf) { edf->references++; - if (!edf->collection_hash) - edf->collection_hash = eina_hash_string_superfast_new(NULL); } else { @@ -223,6 +222,9 @@ return edf; } + if (!edf->collection_hash) + edf->collection_hash = eina_hash_string_small_new(NULL); + if (!coll) return edf; edc = eina_hash_find(edf->collection_hash, coll); |
From: Enlightenment S. <no-...@en...> - 2008-12-31 12:20:20
|
Log: Return success or not for table API. Author: cedric Date: 2008-12-31 03:49:42 -0800 (Wed, 31 Dec 2008) New Revision: 38381 Modified: trunk/edje/src/lib/Edje.h trunk/edje/src/lib/edje_util.c Modified: trunk/edje/src/lib/Edje.h =================================================================== --- trunk/edje/src/lib/Edje.h 2008-12-31 11:48:53 UTC (rev 38380) +++ trunk/edje/src/lib/Edje.h 2008-12-31 11:49:42 UTC (rev 38381) @@ -278,8 +278,8 @@ EAPI Evas_Bool edje_object_part_box_remove_all (Evas_Object *obj, const char *part, Evas_Bool clear); EAPI Evas_Bool edje_object_part_table_pack (Evas_Object *obj, const char *part, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan); EAPI Evas_Bool edje_object_part_table_unpack (Evas_Object *obj, const char *part, Evas_Object *child_obj); - EAPI void edje_object_part_table_col_row_size_get (const Evas_Object *obj, const char *part, int *cols, int *rows); - EAPI void edje_object_part_table_clear (Evas_Object *obj, const char *part, Evas_Bool clear); + EAPI Evas_Bool edje_object_part_table_col_row_size_get (const Evas_Object *obj, const char *part, int *cols, int *rows); + EAPI Evas_Bool edje_object_part_table_clear (Evas_Object *obj, const char *part, Evas_Bool clear); /* edje_message_queue.c */ EAPI void edje_object_message_send (Evas_Object *obj, Edje_Message_Type type, int id, void *msg); Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2008-12-31 11:48:53 UTC (rev 38380) +++ trunk/edje/src/lib/edje_util.c 2008-12-31 11:49:42 UTC (rev 38381) @@ -2487,22 +2487,26 @@ * @param cols Pointer where to store number of columns (can be NULL) * @param rows Pointer where to store number of rows (can be NULL) * + * @return 1: Successfully get some data.\n + * 0: An error occured. + * * Retrieves the size of the table in number of columns and rows.\n */ -EAPI void +EAPI Evas_Bool edje_object_part_table_col_row_size_get(const Evas_Object *obj, const char *part, int *cols, int *rows) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return; + if ((!ed) || (!part)) return 0; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return; - if (rp->part->type != EDJE_PART_TYPE_TABLE) return; + if (!rp) return 0; + if (rp->part->type != EDJE_PART_TYPE_TABLE) return 0; - return evas_object_table_col_row_size_get(rp->object, cols, rows); + evas_object_table_col_row_size_get(rp->object, cols, rows); + return 1; } /** Removes all object from the table @@ -2510,23 +2514,27 @@ * @param part The part name * @param clear If set, will delete subobjs on remove * + * @return 1: Successfully clear table.\n + * 0: An error occured. + * * Removes all object from the table indicated by part, except * the internal ones set from the theme.\n */ -EAPI void +EAPI Evas_Bool edje_object_part_table_clear(Evas_Object *obj, const char *part, Evas_Bool clear) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return; + if ((!ed) || (!part)) return 0; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return; - if (rp->part->type != EDJE_PART_TYPE_TABLE) return; + if (!rp) return 0; + if (rp->part->type != EDJE_PART_TYPE_TABLE) return 0; - return _edje_real_part_table_clear(rp, clear); + _edje_real_part_table_clear(rp, clear); + return 1; } Evas_Bool |
From: Enlightenment S. <no-...@en...> - 2009-06-17 11:10:41
|
Log: * edje: Remove last set of Evas_Hash, and move to Eina_Bool. Author: cedric Date: 2009-06-17 04:10:32 -0700 (Wed, 17 Jun 2009) New Revision: 41068 Modified: trunk/edje/src/lib/Edje.h trunk/edje/src/lib/edje_cache.c trunk/edje/src/lib/edje_entry.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_util.c Modified: trunk/edje/src/lib/Edje.h =================================================================== --- trunk/edje/src/lib/Edje.h 2009-06-17 10:01:52 UTC (rev 41067) +++ trunk/edje/src/lib/Edje.h 2009-06-17 11:10:32 UTC (rev 41068) @@ -258,7 +258,7 @@ EAPI const Eina_List *edje_object_part_text_anchor_list_get(const Evas_Object *obj, const char *part); EAPI const Eina_List *edje_object_part_text_anchor_geometry_get(const Evas_Object *obj, const char *part, const char *anchor); EAPI void edje_object_part_text_cursor_geometry_get(const Evas_Object *obj, const char *part, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); - EAPI void edje_object_part_text_select_allow_set(const Evas_Object *obj, const char *part, Evas_Bool allow); + EAPI void edje_object_part_text_select_allow_set(const Evas_Object *obj, const char *part, Eina_Bool allow); EAPI void edje_object_part_text_select_abort(const Evas_Object *obj, const char *part); EAPI void edje_object_part_swallow (Evas_Object *obj, const char *part, Evas_Object *obj_swallow); @@ -276,17 +276,17 @@ EAPI void edje_object_part_drag_page_get (const Evas_Object *obj, const char *part, double *dx, double *dy); EAPI void edje_object_part_drag_step (Evas_Object *obj, const char *part, double dx, double dy); EAPI void edje_object_part_drag_page (Evas_Object *obj, const char *part, double dx, double dy); - EAPI Evas_Bool edje_object_part_box_append (Evas_Object *obj, const char *part, Evas_Object *child); - EAPI Evas_Bool edje_object_part_box_prepend (Evas_Object *obj, const char *part, Evas_Object *child); - EAPI Evas_Bool edje_object_part_box_insert_before (Evas_Object *obj, const char *part, Evas_Object *child, const Evas_Object *reference); - EAPI Evas_Bool edje_object_part_box_insert_at (Evas_Object *obj, const char *part, Evas_Object *child, unsigned int pos); + EAPI Eina_Bool edje_object_part_box_append (Evas_Object *obj, const char *part, Evas_Object *child); + EAPI Eina_Bool edje_object_part_box_prepend (Evas_Object *obj, const char *part, Evas_Object *child); + EAPI Eina_Bool edje_object_part_box_insert_before (Evas_Object *obj, const char *part, Evas_Object *child, const Evas_Object *reference); + EAPI Eina_Bool edje_object_part_box_insert_at (Evas_Object *obj, const char *part, Evas_Object *child, unsigned int pos); EAPI Evas_Object *edje_object_part_box_remove (Evas_Object *obj, const char *part, Evas_Object *child); EAPI Evas_Object *edje_object_part_box_remove_at (Evas_Object *obj, const char *part, unsigned int pos); - EAPI Evas_Bool edje_object_part_box_remove_all (Evas_Object *obj, const char *part, Evas_Bool clear); - EAPI Evas_Bool edje_object_part_table_pack (Evas_Object *obj, const char *part, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan); - EAPI Evas_Bool edje_object_part_table_unpack (Evas_Object *obj, const char *part, Evas_Object *child_obj); - EAPI Evas_Bool edje_object_part_table_col_row_size_get (const Evas_Object *obj, const char *part, int *cols, int *rows); - EAPI Evas_Bool edje_object_part_table_clear (Evas_Object *obj, const char *part, Evas_Bool clear); + EAPI Eina_Bool edje_object_part_box_remove_all (Evas_Object *obj, const char *part, Eina_Bool clear); + EAPI Eina_Bool edje_object_part_table_pack (Evas_Object *obj, const char *part, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan); + EAPI Eina_Bool edje_object_part_table_unpack (Evas_Object *obj, const char *part, Evas_Object *child_obj); + EAPI Eina_Bool edje_object_part_table_col_row_size_get (const Evas_Object *obj, const char *part, int *cols, int *rows); + EAPI Eina_Bool edje_object_part_table_clear (Evas_Object *obj, const char *part, Eina_Bool clear); /* edje_message_queue.c */ EAPI void edje_object_message_send (Evas_Object *obj, Edje_Message_Type type, int id, void *msg); Modified: trunk/edje/src/lib/edje_cache.c =================================================================== --- trunk/edje/src/lib/edje_cache.c 2009-06-17 10:01:52 UTC (rev 41067) +++ trunk/edje/src/lib/edje_cache.c 2009-06-17 11:10:32 UTC (rev 41068) @@ -28,7 +28,7 @@ #include "edje_private.h" -static Evas_Hash *_edje_file_hash = NULL; +static Eina_Hash *_edje_file_hash = NULL; static int _edje_file_cache_size = 16; static Eina_List *_edje_file_cache = NULL; Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2009-06-17 10:01:52 UTC (rev 41067) +++ trunk/edje/src/lib/edje_entry.c 2009-06-17 11:10:32 UTC (rev 41068) @@ -50,16 +50,16 @@ Eina_List *anchors; Eina_List *anchorlist; char *selection; - Evas_Bool selecting : 1; - Evas_Bool have_selection : 1; - Evas_Bool select_allow : 1; - Evas_Bool select_mod_start : 1; - Evas_Bool select_mod_end : 1; - Evas_Bool had_sel : 1; + Eina_Bool selecting : 1; + Eina_Bool have_selection : 1; + Eina_Bool select_allow : 1; + Eina_Bool select_mod_start : 1; + Eina_Bool select_mod_end : 1; + Eina_Bool had_sel : 1; #ifdef HAVE_ECORE_IMF int comp_len; - Evas_Bool have_composition : 1; + Eina_Bool have_composition : 1; Ecore_IMF_Context *imf_context; Ecore_Event_Handler *imf_ee_handler_commit; @@ -367,7 +367,7 @@ en->sel_end = evas_object_textblock_cursor_new(o); evas_textblock_cursor_copy(c, en->sel_end); - en->have_selection = 0; + en->have_selection = EINA_FALSE; if (en->selection) { free(en->selection); @@ -379,7 +379,7 @@ _sel_enable(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) { if (en->have_selection) return; - en->have_selection = 1; + en->have_selection = EINA_TRUE; if (en->selection) { free(en->selection); @@ -421,7 +421,7 @@ static void _sel_clear(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) { - en->had_sel = 0; + en->had_sel = EINA_FALSE; if (en->sel_start) { evas_textblock_cursor_free(en->sel_start); @@ -448,7 +448,7 @@ } if (en->have_selection) { - en->have_selection = 0; + en->have_selection = EINA_FALSE; _edje_emit(en->rp->edje, "selection,cleared", en->rp->part->name); } } @@ -930,9 +930,9 @@ Evas_Event_Key_Down *ev = event_info; Edje_Real_Part *rp = ed->focused_part; Entry *en; - Evas_Bool control, alt, shift; - Evas_Bool multiline; - Evas_Bool cursor_changed; + Eina_Bool control, alt, shift; + Eina_Bool multiline; + Eina_Bool cursor_changed; Evas_Textblock_Cursor *tc; if (!rp) return; en = rp->entry_data; @@ -962,7 +962,7 @@ alt = evas_key_modifier_is_set(ev->modifiers, "Alt"); shift = evas_key_modifier_is_set(ev->modifiers, "Shift"); multiline = rp->part->multiline; - cursor_changed = 0; + cursor_changed = EINA_FALSE; if (!strcmp(ev->key, "Escape")) { // dead keys here. Escape for now (should emit these) @@ -1188,7 +1188,7 @@ _anchors_get(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); _edje_emit(ed, "cursor,changed", rp->part->name); - cursor_changed = 1; + cursor_changed = EINA_TRUE; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } _edje_emit(ed, "entry,key,enter", rp->part->name); @@ -1217,7 +1217,7 @@ _anchors_get(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); _edje_emit(ed, "cursor,changed", rp->part->name); - cursor_changed = 1; + cursor_changed = EINA_TRUE; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } } @@ -1272,9 +1272,9 @@ Evas_Event_Mouse_Down *ev = event_info; Entry *en; Evas_Coord x, y, w, h; - Evas_Bool multiline; + Eina_Bool multiline; Evas_Textblock_Cursor *tc; - Evas_Bool dosel = 0; + Eina_Bool dosel = EINA_FALSE; if (!rp) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; en = rp->entry_data; @@ -1287,13 +1287,13 @@ return; } if (ev->button != 1) return; - en->select_mod_start = 0; - en->select_mod_end = 0; + en->select_mod_start = EINA_FALSE; + en->select_mod_end = EINA_FALSE; if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_DEFAULT) - dosel = 1; + dosel = EINA_TRUE; else if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT) { - if (en->select_allow) dosel = 1; + if (en->select_allow) dosel = EINA_TRUE; } if (dosel) { @@ -1364,23 +1364,23 @@ { if (d1 <= d) { - en->select_mod_start = 1; - en->selecting = 1; + en->select_mod_start = EINA_TRUE; + en->selecting = EINA_TRUE; } } else { if (d2 <= d) { - en->select_mod_end = 1; - en->selecting = 1; + en->select_mod_end = EINA_TRUE; + en->selecting = EINA_TRUE; } } } } else { - en->selecting = 1; + en->selecting = EINA_TRUE; _sel_clear(en->cursor, rp->object, en); _sel_start(en->cursor, rp->object, en); } @@ -1408,9 +1408,9 @@ Evas_Event_Mouse_Up *ev = event_info; Entry *en; Evas_Coord x, y, w, h; - Evas_Bool multiline; + Eina_Bool multiline; Evas_Textblock_Cursor *tc; - Evas_Bool dosel = 0; + Eina_Bool dosel = EINA_FALSE; if (ev->button != 1) return; if (!rp) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; @@ -1456,8 +1456,8 @@ if (en->selecting) { if (en->have_selection) - en->had_sel = 1; - en->selecting = 0; + en->had_sel = EINA_TRUE; + en->selecting = EINA_FALSE; } if (evas_textblock_cursor_compare(tc, en->cursor)) _edje_emit(rp->edje, "cursor,changed", rp->part->name); @@ -1473,7 +1473,7 @@ Entry *en; Evas_Coord x, y, w, h; Evas_Textblock_Cursor *tc; - Evas_Bool multiline; + Eina_Bool multiline; if (!rp) return; en = rp->entry_data; if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || @@ -1867,7 +1867,7 @@ } void -_edje_entry_select_allow_set(Edje_Real_Part *rp, Evas_Bool allow) +_edje_entry_select_allow_set(Edje_Real_Part *rp, Eina_Bool allow) { Entry *en = rp->entry_data; en->select_allow = allow; @@ -1879,7 +1879,7 @@ Entry *en = rp->entry_data; if (en->selecting) { - en->selecting = 0; + en->selecting = EINA_FALSE; _edje_entry_real_part_configure(rp); } } @@ -1921,8 +1921,8 @@ Ecore_IMF_Event_Commit *ev = event; int cursor_pos, composition_pos; int start_pos, end_pos; - Evas_Bool selecting; - Evas_Bool changed = 0; + Eina_Bool selecting; + Eina_Bool changed = EINA_FALSE; int i; if (!rp) return 1; @@ -1939,7 +1939,7 @@ for (i = 0; i < en->comp_len; i++) _backspace(en->cursor, rp->object, en); _sel_clear(en->cursor, rp->object, en); - en->have_composition = 0; + en->have_composition = EINA_FALSE; } evas_textblock_cursor_text_prepend(en->cursor, ev->str); @@ -1961,8 +1961,8 @@ int cursor_pos; int composition_pos, length; int start_pos, end_pos; - Evas_Bool selecting = 0; - Evas_Bool changed = 0; + Eina_Bool selecting = EINA_FALSE; + Eina_Bool changed = EINA_FALSE; Ecore_IMF_Event_Commit *ev = event; Evas_Textblock_Cursor *start_cur, *end_cur; int i; @@ -2000,7 +2000,7 @@ _sel_enable(en->cursor, rp->object, en); _sel_start(en->cursor, rp->object, en); - en->have_composition = 1; + en->have_composition = EINA_TRUE; evas_textblock_cursor_text_prepend(en->cursor, preedit_string); Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-06-17 10:01:52 UTC (rev 41067) +++ trunk/edje/src/lib/edje_private.h 2009-06-17 11:10:32 UTC (rev 41068) @@ -1143,18 +1143,18 @@ void _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow); void _edje_box_init(void); void _edje_box_shutdown(void); -Evas_Bool _edje_box_layout_find(const char *name, Evas_Object_Box_Layout *cb, void **data, void (**free_data)(void *data)); +Eina_Bool _edje_box_layout_find(const char *name, Evas_Object_Box_Layout *cb, void **data, void (**free_data)(void *data)); -Evas_Bool _edje_real_part_box_append(Edje_Real_Part *rp, Evas_Object *child_obj); -Evas_Bool _edje_real_part_box_prepend(Edje_Real_Part *rp, Evas_Object *child_obj); -Evas_Bool _edje_real_part_box_insert_before(Edje_Real_Part *rp, Evas_Object *child_obj, const Evas_Object *ref); -Evas_Bool _edje_real_part_box_insert_at(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned int pos); +Eina_Bool _edje_real_part_box_append(Edje_Real_Part *rp, Evas_Object *child_obj); +Eina_Bool _edje_real_part_box_prepend(Edje_Real_Part *rp, Evas_Object *child_obj); +Eina_Bool _edje_real_part_box_insert_before(Edje_Real_Part *rp, Evas_Object *child_obj, const Evas_Object *ref); +Eina_Bool _edje_real_part_box_insert_at(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned int pos); Evas_Object *_edje_real_part_box_remove(Edje_Real_Part *rp, Evas_Object *child_obj); Evas_Object *_edje_real_part_box_remove_at(Edje_Real_Part *rp, unsigned int pos); -Evas_Bool _edje_real_part_box_remove_all(Edje_Real_Part *rp, Evas_Bool clear); -Evas_Bool _edje_real_part_table_pack(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan); -Evas_Bool _edje_real_part_table_unpack(Edje_Real_Part *rp, Evas_Object *child_obj); -void _edje_real_part_table_clear(Edje_Real_Part *rp, Evas_Bool clear); +Eina_Bool _edje_real_part_box_remove_all(Edje_Real_Part *rp, Eina_Bool clear); +Eina_Bool _edje_real_part_table_pack(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan); +Eina_Bool _edje_real_part_table_unpack(Edje_Real_Part *rp, Evas_Object *child_obj); +void _edje_real_part_table_clear(Edje_Real_Part *rp, Eina_Bool clear); void _edje_embryo_script_init (Edje *ed); void _edje_embryo_script_shutdown (Edje *ed); @@ -1309,7 +1309,7 @@ const Eina_List *_edje_entry_anchor_geometry_get(Edje_Real_Part *rp, const char *anchor); const Eina_List *_edje_entry_anchors_list(Edje_Real_Part *rp); void _edje_entry_cursor_geometry_get(Edje_Real_Part *rp, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch); -void _edje_entry_select_allow_set(Edje_Real_Part *rp, Evas_Bool allow); +void _edje_entry_select_allow_set(Edje_Real_Part *rp, Eina_Bool allow); void _edje_entry_select_abort(Edje_Real_Part *rp); #endif Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2009-06-17 10:01:52 UTC (rev 41067) +++ trunk/edje/src/lib/edje_util.c 2009-06-17 11:10:32 UTC (rev 41068) @@ -20,11 +20,11 @@ typedef struct _Edje_Box_Layout Edje_Box_Layout; -static Evas_Hash *_edje_color_class_hash = NULL; -static Evas_Hash *_edje_color_class_member_hash = NULL; +static Eina_Hash *_edje_color_class_hash = NULL; +static Eina_Hash *_edje_color_class_member_hash = NULL; -static Evas_Hash *_edje_text_class_hash = NULL; -static Evas_Hash *_edje_text_class_member_hash = NULL; +static Eina_Hash *_edje_text_class_hash = NULL; +static Eina_Hash *_edje_text_class_member_hash = NULL; static Eina_Rbtree *_edje_box_layout_registry = NULL; @@ -40,8 +40,8 @@ Eina_List *list; }; -static Evas_Bool _edje_color_class_list_foreach(const Eina_Hash *hash, const void *key, void *data, void *fdata); -static Evas_Bool _edje_text_class_list_foreach(const Eina_Hash *hash, const void *key, void *data, void *fdata); +static Eina_Bool _edje_color_class_list_foreach(const Eina_Hash *hash, const void *key, void *data, void *fdata); +static Eina_Bool _edje_text_class_list_foreach(const Eina_Hash *hash, const void *key, void *data, void *fdata); Edje_Real_Part *_edje_real_part_recursive_get_helper(Edje *ed, char **path); @@ -421,7 +421,7 @@ fd = fdata; fd->list = eina_list_append(fd->list, strdup(key)); - return 1; + return EINA_TRUE; } /** Sets the object color class @@ -692,7 +692,7 @@ fd = fdata; fd->list = eina_list_append(fd->list, eina_stringshare_add(key)); - return 1; + return EINA_TRUE; } /** Sets Edje text class @@ -970,7 +970,7 @@ free(*p_str); *p_str = NULL; *allocated = 0; - return 0; + return EINA_FALSE; } *p_str = tmp; @@ -979,7 +979,7 @@ memcpy(*p_str + *used, news, news_len); *used = *used + news_len; - return 1; + return EINA_TRUE; } static char * @@ -1330,7 +1330,7 @@ * @param part The part name */ EAPI void -edje_object_part_text_select_allow_set(const Evas_Object *obj, const char *part, Evas_Bool allow) +edje_object_part_text_select_allow_set(const Evas_Object *obj, const char *part, Eina_Bool allow) { Edje *ed; Edje_Real_Part *rp; @@ -1568,25 +1568,23 @@ NULL); } -Evas_Bool +Eina_Bool _edje_box_layout_find(const char *name, Evas_Object_Box_Layout *cb, void **data, void (**free_data)(void *data)) { const Edje_Box_Layout *l; - if (!name) - return 0; + if (!name) return EINA_FALSE; *cb = _edje_box_layout_builtin_find(name); if (*cb) { *free_data = NULL; *data = NULL; - return 1; + return EINA_TRUE; } l = _edje_box_layout_external_find(name); - if (!l) - return 0; + if (!l) return EINA_FALSE; *cb = l->func; *free_data = l->layout_data_free; @@ -1595,7 +1593,7 @@ else *data = NULL; - return 1; + return EINA_TRUE; } void @@ -2441,18 +2439,18 @@ * * Appends child to the box indicated by part.\n */ -EAPI Evas_Bool +EAPI Eina_Bool edje_object_part_box_append(Evas_Object *obj, const char *part, Evas_Object *child) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part) || (!child)) return 0; + if ((!ed) || (!part) || (!child)) return EINA_FALSE; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return 0; - if (rp->part->type != EDJE_PART_TYPE_BOX) return 0; + if (!rp) return EINA_FALSE; + if (rp->part->type != EDJE_PART_TYPE_BOX) return EINA_FALSE; return _edje_real_part_box_append(rp, child); } @@ -2467,18 +2465,18 @@ * * Prepends child to the box indicated by part.\n */ -EAPI Evas_Bool +EAPI Eina_Bool edje_object_part_box_prepend(Evas_Object *obj, const char *part, Evas_Object *child) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return 0; + if ((!ed) || (!part)) return EINA_FALSE; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return 0; - if (rp->part->type != EDJE_PART_TYPE_BOX) return 0; + if (!rp) return EINA_FALSE; + if (rp->part->type != EDJE_PART_TYPE_BOX) return EINA_FALSE; return _edje_real_part_box_prepend(rp, child); } @@ -2494,18 +2492,18 @@ * * Inserts child in the box given by part, in the position marked by reference.\n */ -EAPI Evas_Bool +EAPI Eina_Bool edje_object_part_box_insert_before(Evas_Object *obj, const char *part, Evas_Object *child, const Evas_Object *reference) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return 0; + if ((!ed) || (!part)) return EINA_FALSE; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return 0; - if (rp->part->type != EDJE_PART_TYPE_BOX) return 0; + if (!rp) return EINA_FALSE; + if (rp->part->type != EDJE_PART_TYPE_BOX) return EINA_FALSE; return _edje_real_part_box_insert_before(rp, child, reference); } @@ -2521,18 +2519,18 @@ * * Adds child to the box indicated by part, in the position given by pos.\n */ -EAPI Evas_Bool +EAPI Eina_Bool edje_object_part_box_insert_at(Evas_Object *obj, const char *part, Evas_Object *child, unsigned int pos) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return 0; + if ((!ed) || (!part)) return EINA_FALSE; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return 0; - if (rp->part->type != EDJE_PART_TYPE_BOX) return 0; + if (!rp) return EINA_FALSE; + if (rp->part->type != EDJE_PART_TYPE_BOX) return EINA_FALSE; return _edje_real_part_box_insert_at(rp, child, pos); } @@ -2600,18 +2598,18 @@ * Removes all the external objects from the box indicated by part. * Elements created from the theme will not be removed.\n */ -EAPI Evas_Bool -edje_object_part_box_remove_all(Evas_Object *obj, const char *part, Evas_Bool clear) +EAPI Eina_Bool +edje_object_part_box_remove_all(Evas_Object *obj, const char *part, Eina_Bool clear) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return 0; + if ((!ed) || (!part)) return EINA_FALSE; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return 0; - if (rp->part->type != EDJE_PART_TYPE_BOX) return 0; + if (!rp) return EINA_FALSE; + if (rp->part->type != EDJE_PART_TYPE_BOX) return EINA_FALSE; return _edje_real_part_box_remove_all(rp, clear); @@ -2645,56 +2643,56 @@ _edje_recalc(rp->edje); } -Evas_Bool +Eina_Bool _edje_real_part_box_append(Edje_Real_Part *rp, Evas_Object *child_obj) { Evas_Object_Box_Option *opt; opt = evas_object_box_append(rp->object, child_obj); - if (!opt) return 0; + if (!opt) return EINA_FALSE; _edje_box_child_add(rp, child_obj); - return 1; + return EINA_TRUE; } -Evas_Bool +Eina_Bool _edje_real_part_box_prepend(Edje_Real_Part *rp, Evas_Object *child_obj) { Evas_Object_Box_Option *opt; opt = evas_object_box_prepend(rp->object, child_obj); - if (!opt) return 0; + if (!opt) return EINA_FALSE; _edje_box_child_add(rp, child_obj); - return 1; + return EINA_TRUE; } -Evas_Bool +Eina_Bool _edje_real_part_box_insert_before(Edje_Real_Part *rp, Evas_Object *child_obj, const Evas_Object *ref) { Evas_Object_Box_Option *opt; opt = evas_object_box_insert_before(rp->object, child_obj, ref); - if (!opt) return 0; + if (!opt) return EINA_FALSE; _edje_box_child_add(rp, child_obj); - return 1; + return EINA_TRUE; } -Evas_Bool +Eina_Bool _edje_real_part_box_insert_at(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned int pos) { Evas_Object_Box_Option *opt; opt = evas_object_box_insert_at(rp->object, child_obj, pos); - if (!opt) return 0; + if (!opt) return EINA_FALSE; _edje_box_child_add(rp, child_obj); - return 1; + return EINA_TRUE; } Evas_Object * @@ -2723,8 +2721,8 @@ return child_obj; } -Evas_Bool -_edje_real_part_box_remove_all(Edje_Real_Part *rp, Evas_Bool clear) +Eina_Bool +_edje_real_part_box_remove_all(Edje_Real_Part *rp, Eina_Bool clear) { Eina_List *children; int i; @@ -2740,13 +2738,13 @@ else { if (!evas_object_box_remove_at(rp->object, i)) - return 0; + return EINA_FALSE; if (clear) evas_object_del(child_obj); } children = eina_list_remove_list(children, children); } - return 1; + return EINA_TRUE; } static void @@ -2791,18 +2789,18 @@ * * Packs an object into the table indicated by part.\n */ -EAPI Evas_Bool +EAPI Eina_Bool edje_object_part_table_pack(Evas_Object *obj, const char *part, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return 0; + if ((!ed) || (!part)) return EINA_FALSE; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return 0; - if (rp->part->type != EDJE_PART_TYPE_TABLE) return 0; + if (!rp) return EINA_FALSE; + if (rp->part->type != EDJE_PART_TYPE_TABLE) return EINA_FALSE; return _edje_real_part_table_pack(rp, child_obj, col, row, colspan, rowspan); } @@ -2817,18 +2815,18 @@ * * Removes an object from the table indicated by part.\n */ -EAPI Evas_Bool +EAPI Eina_Bool edje_object_part_table_unpack(Evas_Object *obj, const char *part, Evas_Object *child_obj) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return 0; + if ((!ed) || (!part)) return EINA_FALSE; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return 0; - if (rp->part->type != EDJE_PART_TYPE_TABLE) return 0; + if (!rp) return EINA_FALSE; + if (rp->part->type != EDJE_PART_TYPE_TABLE) return EINA_FALSE; return _edje_real_part_table_unpack(rp, child_obj); } @@ -2844,21 +2842,21 @@ * * Retrieves the size of the table in number of columns and rows.\n */ -EAPI Evas_Bool +EAPI Eina_Bool edje_object_part_table_col_row_size_get(const Evas_Object *obj, const char *part, int *cols, int *rows) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return 0; + if ((!ed) || (!part)) return EINA_FALSE; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return 0; - if (rp->part->type != EDJE_PART_TYPE_TABLE) return 0; + if (!rp) return EINA_FALSE; + if (rp->part->type != EDJE_PART_TYPE_TABLE) return EINA_FALSE; evas_object_table_col_row_size_get(rp->object, cols, rows); - return 1; + return EINA_TRUE; } /** Removes all object from the table @@ -2872,37 +2870,37 @@ * Removes all object from the table indicated by part, except * the internal ones set from the theme.\n */ -EAPI Evas_Bool -edje_object_part_table_clear(Evas_Object *obj, const char *part, Evas_Bool clear) +EAPI Eina_Bool +edje_object_part_table_clear(Evas_Object *obj, const char *part, Eina_Bool clear) { Edje *ed; Edje_Real_Part *rp; ed = _edje_fetch(obj); - if ((!ed) || (!part)) return 0; + if ((!ed) || (!part)) return EINA_FALSE; rp = _edje_real_part_recursive_get(ed, part); - if (!rp) return 0; - if (rp->part->type != EDJE_PART_TYPE_TABLE) return 0; + if (!rp) return EINA_FALSE; + if (rp->part->type != EDJE_PART_TYPE_TABLE) return EINA_FALSE; _edje_real_part_table_clear(rp, clear); - return 1; + return EINA_TRUE; } -Evas_Bool +Eina_Bool _edje_real_part_table_pack(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) { - Evas_Bool ret = evas_object_table_pack(rp->object, child_obj, col, row, colspan, rowspan); + Eina_Bool ret = evas_object_table_pack(rp->object, child_obj, col, row, colspan, rowspan); _edje_table_child_add(rp, child_obj); return ret; } -Evas_Bool +Eina_Bool _edje_real_part_table_unpack(Edje_Real_Part *rp, Evas_Object *child_obj) { - Evas_Bool ret = evas_object_table_unpack(rp->object, child_obj); + Eina_Bool ret = evas_object_table_unpack(rp->object, child_obj); if (ret) _edje_table_child_remove(rp, child_obj); @@ -2911,7 +2909,7 @@ } void -_edje_real_part_table_clear(Edje_Real_Part *rp, Evas_Bool clear) +_edje_real_part_table_clear(Edje_Real_Part *rp, Eina_Bool clear) { Eina_List *children; @@ -3047,7 +3045,7 @@ member_list_free(const Eina_Hash *hash, const void *key, void *data, void *fdata) { eina_list_free(data); - return 1; + return EINA_TRUE; } void @@ -3067,7 +3065,7 @@ cc = data; if (cc->name) eina_stringshare_del(cc->name); free(cc); - return 1; + return EINA_TRUE; } void @@ -3165,7 +3163,7 @@ if (tc->name) eina_stringshare_del(tc->name); if (tc->font) eina_stringshare_del(tc->font); free(tc); - return 1; + return EINA_TRUE; } void |
From: Enlightenment S. <no-...@en...> - 2009-08-10 09:56:31
|
Log: * edje: Reduce sizeof (Edje_Calc_Params). Note: It doesn't really impact edje memory foot print yet. But in the plan to do a computation cache inside edje, this structure will be used a lot (I am planning to do this feature at some point, but no ETA yet, and be reassured it will be optionnal so we can choose between CPU load or memory load). Note: As I was looking for similar area of improvements, Edje_Part_Description could really use an union to reduce it's size, but as we load this structure directly from an Eet file, we need union in Eet first. And this should be part of a comming Edje file format break. Author: cedric Date: 2009-08-10 02:56:19 -0700 (Mon, 10 Aug 2009) New Revision: 41652 Modified: trunk/edje/src/lib/edje_calc.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_text.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2009-08-09 22:23:46 UTC (rev 41651) +++ trunk/edje/src/lib/edje_calc.c 2009-08-10 09:56:19 UTC (rev 41652) @@ -879,7 +879,7 @@ font = _edje_text_class_font_get(ed, desc, &size, &sfont); free(sfont); - params->text.size = size; + params->type.text.size = size; } /* rememebr what our size is BEFORE we go limit it */ params->req.x = params->x; @@ -1148,32 +1148,48 @@ } } - /* visible */ params->visible = desc->visible; - /* border */ - if (flags & FLAG_X) + + switch (ep->part->type) { - params->border.l = desc->border.l; - params->border.r = desc->border.r; + case EDJE_PART_TYPE_IMAGE: + /* border */ + if (flags & FLAG_X) + { + params->type.border.l = desc->border.l; + params->type.border.r = desc->border.r; + } + if (flags & FLAG_Y) + { + params->type.border.t = desc->border.t; + params->type.border.b = desc->border.b; + } + break; + case EDJE_PART_TYPE_GRADIENT: + params->type.gradient.id = desc->gradient.id; + params->type.gradient.type = desc->gradient.type; + break; + case EDJE_PART_TYPE_TEXT: + case EDJE_PART_TYPE_TEXTBLOCK: + /* text.align */ + if (flags & FLAG_X) + { + params->type.text.align.x = desc->text.align.x; + } + if (flags & FLAG_Y) + { + params->type.text.align.y = desc->text.align.y; + } + params->type.text.elipsis = desc->text.elipsis; + break; + case EDJE_PART_TYPE_RECTANGLE: + case EDJE_PART_TYPE_BOX: + case EDJE_PART_TYPE_TABLE: + case EDJE_PART_TYPE_SWALLOW: + case EDJE_PART_TYPE_GROUP: + break; } - if (flags & FLAG_Y) - { - params->border.t = desc->border.t; - params->border.b = desc->border.b; - } - /* text.align */ - if (flags & FLAG_X) - { - params->text.align.x = desc->text.align.x; - } - if (flags & FLAG_Y) - { - params->text.align.y = desc->text.align.y; - } - params->text.elipsis = desc->text.elipsis; - params->gradient.id = desc->gradient.id; - params->gradient.type = desc->gradient.type; } static void @@ -1184,17 +1200,17 @@ evas_object_gradient_fill_set(ep->object, p3->fill.x, p3->fill.y, p3->fill.w, p3->fill.h); - if (p3->gradient.type && p3->gradient.type[0]) - evas_object_gradient_type_set(ep->object, p3->gradient.type, NULL); + if (p3->type.gradient.type && p3->type.gradient.type[0]) + evas_object_gradient_type_set(ep->object, p3->type.gradient.type, NULL); if (ed->file->spectrum_dir && ed->file->spectrum_dir->entries && - p3->gradient.id != ep->gradient_id) + p3->type.gradient.id != ep->gradient_id) { Edje_Spectrum_Directory_Entry *se; Edje_Spectrum_Color *sc; Eina_List *l; - se = eina_list_nth(ed->file->spectrum_dir->entries, p3->gradient.id); + se = eina_list_nth(ed->file->spectrum_dir->entries, p3->type.gradient.id); if (se) { evas_object_gradient_clear(ep->object); @@ -1206,7 +1222,7 @@ evas_object_gradient_alpha_stop_add(ep->object, sc->a, sc->d); } - ep->gradient_id = p3->gradient.id; + ep->gradient_id = p3->type.gradient.id; } } } @@ -1270,8 +1286,8 @@ evas_object_image_fill_set(ep->object, p3->fill.x, p3->fill.y, p3->fill.w, p3->fill.h); evas_object_image_smooth_scale_set(ep->object, p3->smooth); - evas_object_image_border_set(ep->object, p3->border.l, p3->border.r, - p3->border.t, p3->border.b); + evas_object_image_border_set(ep->object, p3->type.border.l, p3->type.border.r, + p3->type.border.t, p3->type.border.b); if (chosen_desc->border.no_fill == 0) evas_object_image_border_center_fill_set(ep->object, EVAS_BORDER_FILL_DEFAULT); else if (chosen_desc->border.no_fill == 1) @@ -1492,18 +1508,18 @@ { p3.fill.angle = INTP(p1.fill.angle, p2.fill.angle, pos); p3.fill.spread = (beginning_pos) ? p1.fill.spread : p2.fill.spread; - p3.gradient = (beginning_pos) ? p1.gradient : p2.gradient; + p3.type.gradient = (beginning_pos) ? p1.type.gradient : p2.type.gradient; } else { - p3.border.l = INTP(p1.border.l, p2.border.l, pos); - p3.border.r = INTP(p1.border.r, p2.border.r, pos); - p3.border.t = INTP(p1.border.t, p2.border.t, pos); - p3.border.b = INTP(p1.border.b, p2.border.b, pos); + p3.type.border.l = INTP(p1.type.border.l, p2.type.border.l, pos); + p3.type.border.r = INTP(p1.type.border.r, p2.type.border.r, pos); + p3.type.border.t = INTP(p1.type.border.t, p2.type.border.t, pos); + p3.type.border.b = INTP(p1.type.border.b, p2.type.border.b, pos); } break; case EDJE_PART_TYPE_TEXT: - p3.text.size = INTP(p1.text.size, p2.text.size, pos); + p3.type.text.size = INTP(p1.type.text.size, p2.type.text.size, pos); case EDJE_PART_TYPE_TEXTBLOCK: p3.color2.r = INTP(p1.color2.r, p2.color2.r, pos); p3.color2.g = INTP(p1.color2.g, p2.color2.g, pos); @@ -1515,9 +1531,9 @@ p3.color3.b = INTP(p1.color3.b, p2.color3.b, pos); p3.color3.a = INTP(p1.color3.a, p2.color3.a, pos); - p3.text.align.x = INTP(p1.text.align.x, p2.text.align.x, pos); - p3.text.align.y = INTP(p1.text.align.y, p2.text.align.y, pos); - p3.text.elipsis = INTP(p1.text.elipsis, p2.text.elipsis, pos); + p3.type.text.align.x = INTP(p1.type.text.align.x, p2.type.text.align.x, pos); + p3.type.text.align.y = INTP(p1.type.text.align.y, p2.type.text.align.y, pos); + p3.type.text.elipsis = INTP(p1.type.text.elipsis, p2.type.text.elipsis, pos); break; } Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-08-09 22:23:46 UTC (rev 41651) +++ trunk/edje/src/lib/edje_private.h 2009-08-10 09:56:19 UTC (rev 41652) @@ -827,18 +827,20 @@ int spread; } fill; Edje_Color color, color2, color3; - struct { - int l, r, t, b; - } border; - struct { - Edje_Alignment align; /* text alignment within bounds */ - double elipsis; - int size; - } text; - struct { - int id; - char *type; - } gradient; + union { + struct { + int l, r, t, b; + } border; + struct { + Edje_Alignment align; /* text alignment within bounds */ + double elipsis; + int size; + } text; + struct { + int id; + char *type; + } gradient; + } type; unsigned char visible : 1; unsigned char smooth : 1; }; Modified: trunk/edje/src/lib/edje_text.c =================================================================== --- trunk/edje/src/lib/edje_text.c 2009-08-09 22:23:46 UTC (rev 41651) +++ trunk/edje/src/lib/edje_text.c 2009-08-10 09:56:19 UTC (rev 41652) @@ -162,16 +162,16 @@ part_get_geometry(ep, &tw, &th); evas_object_text_style_pad_get(ep->object, &l, &r, NULL, NULL); - p = ((sw - tw) * params->text.elipsis); + p = ((sw - tw) * params->type.text.elipsis); /* chop chop */ if (tw > sw) { - if (params->text.elipsis != 0.0) + if (params->type.text.elipsis != 0.0) c1 = evas_object_text_char_coords_get(ep->object, -p + l, th / 2, NULL, NULL, NULL, NULL); - if (params->text.elipsis != 1.0) + if (params->type.text.elipsis != 1.0) c2 = evas_object_text_char_coords_get(ep->object, -p + sw - r, th / 2, NULL, NULL, NULL, NULL); @@ -393,7 +393,7 @@ sh = params->h; } - size = params->text.size; + size = params->type.text.size; if ((ep->text.cache.in_size == size) && (ep->text.cache.in_w == sw) && @@ -401,9 +401,9 @@ (ep->text.cache.in_str) && (text) && (!strcmp(ep->text.cache.in_str, text)) && - (ep->text.cache.align_x == params->text.align.x) && - (ep->text.cache.align_y == params->text.align.y) && - (ep->text.cache.elipsis == params->text.elipsis) && + (ep->text.cache.align_x == params->type.text.align.x) && + (ep->text.cache.align_y == params->type.text.align.y) && + (ep->text.cache.elipsis == params->type.text.elipsis) && (ep->text.cache.fit_x == chosen_desc->text.fit_x) && (ep->text.cache.fit_y == chosen_desc->text.fit_y)) { @@ -569,9 +569,9 @@ ep->text.cache.in_w = sw; ep->text.cache.in_h = sh; ep->text.cache.out_size = size; - ep->text.cache.align_x = params->text.align.x; - ep->text.cache.align_y = params->text.align.y; - ep->text.cache.elipsis = params->text.elipsis; + ep->text.cache.align_x = params->type.text.align.x; + ep->text.cache.align_y = params->type.text.align.y; + ep->text.cache.elipsis = params->type.text.elipsis; ep->text.cache.fit_x = chosen_desc->text.fit_x; ep->text.cache.fit_y = chosen_desc->text.fit_y; arrange_text: @@ -583,8 +583,8 @@ evas_object_text_font_set(ep->object, font, size); evas_object_text_text_set(ep->object, text); part_get_geometry(ep, &tw, &th); - ep->offset.x = ((sw - tw) * params->text.align.x); - ep->offset.y = ((sh - th) * params->text.align.y); + ep->offset.x = ((sw - tw) * params->type.text.align.x); + ep->offset.y = ((sh - th) * params->type.text.align.y); evas_object_move(ep->object, ed->x + params->x + ep->offset.x, |
From: Enlightenment S. <no-...@en...> - 2009-08-10 11:33:44
|
Log: * edje: Delay edje_recalc on edje object resize. WARNING: THIS MAY CAUSE RENDER GLITCH, IF YOU SEE ANYTHING STRANGE PLEASE REPORT TO ME. Author: cedric Date: 2009-08-10 04:33:36 -0700 (Mon, 10 Aug 2009) New Revision: 41654 Modified: trunk/edje/src/lib/edje_smart.c Modified: trunk/edje/src/lib/edje_smart.c =================================================================== --- trunk/edje/src/lib/edje_smart.c 2009-08-10 11:15:38 UTC (rev 41653) +++ trunk/edje/src/lib/edje_smart.c 2009-08-10 11:33:36 UTC (rev 41654) @@ -171,7 +171,7 @@ } // evas_object_resize(ed->clipper, ed->w, ed->h); ed->dirty = 1; - _edje_recalc_do(ed); + _edje_recalc(ed); _edje_emit(ed, "resize", NULL); } |
From: Enlightenment S. <no-...@en...> - 2009-08-10 11:53:01
|
Log: * edje_recalc: Reduce use of stack. Author: cedric Date: 2009-08-10 04:52:46 -0700 (Mon, 10 Aug 2009) New Revision: 41656 Modified: trunk/edje/src/lib/edje_calc.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2009-08-10 11:36:37 UTC (rev 41655) +++ trunk/edje/src/lib/edje_calc.c 2009-08-10 11:52:46 UTC (rev 41656) @@ -1381,7 +1381,7 @@ static void _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags) { - Edje_Calc_Params p1, p2, p3, *pf; + Edje_Calc_Params p1, p2, *pf; Edje_Part_Description *chosen_desc; double pos = 0.0; @@ -1447,12 +1447,21 @@ return; } if (ep->param1.description) - _edje_part_recalc_single(ed, ep, ep->param1.description, chosen_desc, ep->param1.rel1_to_x, ep->param1.rel1_to_y, ep->param1.rel2_to_x, ep->param1.rel2_to_y, ep->confine_to, &p1, flags); + _edje_part_recalc_single(ed, ep, ep->param1.description, chosen_desc, + ep->param1.rel1_to_x, ep->param1.rel1_to_y, ep->param1.rel2_to_x, ep->param1.rel2_to_y, + ep->confine_to, + &p1, + flags); if (ep->param2.description) { int beginning_pos, part_type; + Edje_Calc_Params p3; - _edje_part_recalc_single(ed, ep, ep->param2.description, chosen_desc, ep->param2.rel1_to_x, ep->param2.rel1_to_y, ep->param2.rel2_to_x, ep->param2.rel2_to_y, ep->confine_to, &p2, flags); + _edje_part_recalc_single(ed, ep, ep->param2.description, chosen_desc, + ep->param2.rel1_to_x, ep->param2.rel1_to_y, ep->param2.rel2_to_x, ep->param2.rel2_to_y, + ep->confine_to, + &p2, + flags); pos = ep->description_pos; beginning_pos = (pos < 0.5); |
From: Enlightenment S. <no-...@en...> - 2009-08-10 12:38:50
|
Log: * edje: Oops, not the right one. Author: cedric Date: 2009-08-10 05:38:39 -0700 (Mon, 10 Aug 2009) New Revision: 41658 Modified: trunk/edje/src/lib/edje_calc.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2009-08-10 12:02:10 UTC (rev 41657) +++ trunk/edje/src/lib/edje_calc.c 2009-08-10 12:38:39 UTC (rev 41658) @@ -1381,7 +1381,7 @@ static void _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags) { - Edje_Calc_Params p1, p2, *pf; + Edje_Calc_Params p1, p3, *pf; Edje_Part_Description *chosen_desc; double pos = 0.0; @@ -1455,7 +1455,7 @@ if (ep->param2.description) { int beginning_pos, part_type; - Edje_Calc_Params p3; + Edje_Calc_Params p2; _edje_part_recalc_single(ed, ep, ep->param2.description, chosen_desc, ep->param2.rel1_to_x, ep->param2.rel1_to_y, ep->param2.rel2_to_x, ep->param2.rel2_to_y, |
From: Enlightenment S. <no-...@en...> - 2009-08-10 15:18:19
|
Log: * edje: Fix memory count. Author: cedric Date: 2009-08-10 08:18:07 -0700 (Mon, 10 Aug 2009) New Revision: 41664 Modified: trunk/edje/src/lib/edje_private.h Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-08-10 15:16:51 UTC (rev 41663) +++ trunk/edje/src/lib/edje_private.h 2009-08-10 15:18:07 UTC (rev 41664) @@ -821,11 +821,11 @@ int state; // 4 #endif } param1, param2, custom; // 60 // FIXME: custom should be alloced on demand - 20-- - // WITH EDJE_CALC_CACHE: 180 + // WITH EDJE_CALC_CACHE: 420 #ifdef EDJE_CALC_CACHE - Edje_Calc_Params p; - int state; + Edje_Calc_Params p; // 116 + int state; // 4 #endif Edje_Real_Part *confine_to; // 4 // fixme - make part of drag @@ -845,7 +845,7 @@ unsigned char invalidate : 1; #endif }; // 394 -// WITH EDJE_CALC_CACHE: 514 +// WITH EDJE_CALC_CACHE: 874 struct _Edje_Running_Program { |
From: Enlightenment S. <no-...@en...> - 2009-08-11 09:45:20
|
Log: * edje: Some cleanup, mainly removing dead code. Author: cedric Date: 2009-08-11 02:45:06 -0700 (Tue, 11 Aug 2009) New Revision: 41679 Modified: trunk/edje/src/lib/edje_edit.c trunk/edje/src/lib/edje_load.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_smart.c trunk/edje/src/lib/edje_text.c Modified: trunk/edje/src/lib/edje_edit.c =================================================================== --- trunk/edje/src/lib/edje_edit.c 2009-08-11 08:59:20 UTC (rev 41678) +++ trunk/edje/src/lib/edje_edit.c 2009-08-11 09:45:06 UTC (rev 41679) @@ -179,19 +179,10 @@ if (rp->object) { - _edje_text_real_part_on_del(rp->edje, rp); _edje_callbacks_del(rp->object); evas_object_del(rp->object); } - l = rp->extra_objects; - while (rp->extra_objects) - { - evas_object_del(eina_list_data_get(rp->extra_objects)); - rp->extra_objects = eina_list_remove_list(rp->extra_objects, - rp->extra_objects); - } - if (rp->swallowed_object) { evas_object_smart_member_del(rp->swallowed_object); Modified: trunk/edje/src/lib/edje_load.c =================================================================== --- trunk/edje/src/lib/edje_load.c 2009-08-11 08:59:20 UTC (rev 41678) +++ trunk/edje/src/lib/edje_load.c 2009-08-11 09:45:06 UTC (rev 41679) @@ -360,35 +360,44 @@ rp->chosen_description = rp->param1.description; if (!rp->param1.description) printf("EDJE ERROR: no default part description!\n"); - if (ep->type == EDJE_PART_TYPE_RECTANGLE) - rp->object = evas_object_rectangle_add(ed->evas); - else if (ep->type == EDJE_PART_TYPE_IMAGE) - rp->object = evas_object_image_add(ed->evas); - else if (ep->type == EDJE_PART_TYPE_TEXT) + + switch (ep->type) { - _edje_text_part_on_add(ed, rp); - rp->object = evas_object_text_add(ed->evas); - evas_object_text_font_source_set(rp->object, ed->path); + case EDJE_PART_TYPE_RECTANGLE: + rp->object = evas_object_rectangle_add(ed->evas); + break; + case EDJE_PART_TYPE_IMAGE: + rp->object = evas_object_image_add(ed->evas); + break; + case EDJE_PART_TYPE_TEXT: + _edje_text_part_on_add(ed, rp); + rp->object = evas_object_text_add(ed->evas); + evas_object_text_font_source_set(rp->object, ed->path); + break; + case EDJE_PART_TYPE_SWALLOW: + case EDJE_PART_TYPE_GROUP: + rp->object = evas_object_rectangle_add(ed->evas); + evas_object_color_set(rp->object, 0, 0, 0, 0); + evas_object_pass_events_set(rp->object, 1); + evas_object_pointer_mode_set(rp->object, EVAS_OBJECT_POINTER_MODE_NOGRAB); + break; + case EDJE_PART_TYPE_TEXTBLOCK: + rp->object = evas_object_textblock_add(ed->evas); + break; + case EDJE_PART_TYPE_GRADIENT: + rp->object = evas_object_gradient_add(ed->evas); + break; + case EDJE_PART_TYPE_BOX: + rp->object = evas_object_box_add(ed->evas); + break; + case EDJE_PART_TYPE_TABLE: + rp->object = evas_object_table_add(ed->evas); + break; + default: + printf("EDJE ERROR: wrong part type %i!\n", ep->type); + break; } - else if (ep->type == EDJE_PART_TYPE_SWALLOW || ep->type == EDJE_PART_TYPE_GROUP) - { - rp->object = evas_object_rectangle_add(ed->evas); - evas_object_color_set(rp->object, 0, 0, 0, 0); - evas_object_pass_events_set(rp->object, 1); - evas_object_pointer_mode_set(rp->object, EVAS_OBJECT_POINTER_MODE_NOGRAB); - } - else if (ep->type == EDJE_PART_TYPE_TEXTBLOCK) - rp->object = evas_object_textblock_add(ed->evas); - else if (ep->type == EDJE_PART_TYPE_GRADIENT) - rp->object = evas_object_gradient_add(ed->evas); - else if (ep->type == EDJE_PART_TYPE_BOX) - { - rp->object = evas_object_box_add(ed->evas); - } - else if (ep->type == EDJE_PART_TYPE_TABLE) - rp->object = evas_object_table_add(ed->evas); - else - printf("EDJE ERROR: wrong part type %i!\n", ep->type); + if (rp->object) { evas_object_smart_member_add(rp->object, ed->obj); @@ -443,7 +452,6 @@ rp->param1.rel2_to_x = ed->table_parts[rp->param1.description->rel2.id_x % ed->table_parts_size]; if (rp->param1.description->rel2.id_y >= 0) rp->param1.rel2_to_y = ed->table_parts[rp->param1.description->rel2.id_y % ed->table_parts_size]; - _edje_text_part_on_add_clippers(ed, rp); if (rp->part->clip_to_id >= 0) { rp->clip_to = ed->table_parts[rp->part->clip_to_id % ed->table_parts_size]; @@ -785,7 +793,6 @@ _edje_entry_real_part_shutdown(rp); if (rp->object) { - _edje_text_real_part_on_del(ed, rp); _edje_callbacks_del(rp->object); evas_object_del(rp->object); } @@ -836,10 +843,7 @@ _edje_textblock_styles_del(ed); EINA_LIST_FOREACH(ed->collection->parts, l, ep) - { - _edje_text_part_on_del(ed, ep); - _edje_color_class_on_del(ed, ep); - } + _edje_color_class_on_del(ed, ep); _edje_cache_coll_unref(ed->file, ed->collection); ed->collection = NULL; } Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-08-11 08:59:20 UTC (rev 41678) +++ trunk/edje/src/lib/edje_private.h 2009-08-11 09:45:06 UTC (rev 41679) @@ -762,7 +762,6 @@ Edje *edje; // 4 Edje_Part *part; // 4 Evas_Object *object; // 4 - Eina_List *extra_objects; // 4 Evas_Object *swallowed_object; // 4 // FIXME: move with swallow_params data Eina_List *items; // 4 //FIXME: only if table/box void *entry_data; // 4 // FIXME: move to entry section @@ -1131,9 +1130,7 @@ void _edje_text_init(void); void _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep); -void _edje_text_part_on_add_clippers(Edje *ed, Edje_Real_Part *ep); void _edje_text_part_on_del(Edje *ed, Edje_Part *ep); -void _edje_text_real_part_on_del(Edje *ed, Edje_Real_Part *ep); void _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *params, Edje_Part_Description *chosen_desc); Evas_Font_Size _edje_text_size_calc(Evas_Font_Size size, Edje_Text_Class *tc); const char * _edje_text_class_font_get(Edje *ed, Edje_Part_Description *chosen_desc, int *size, char **free_later); Modified: trunk/edje/src/lib/edje_smart.c =================================================================== --- trunk/edje/src/lib/edje_smart.c 2009-08-11 08:59:20 UTC (rev 41678) +++ trunk/edje/src/lib/edje_smart.c 2009-08-11 09:45:06 UTC (rev 41679) @@ -137,19 +137,6 @@ evas_object_geometry_get(ep->swallowed_object, &ox, &oy, NULL, NULL); evas_object_move(ep->swallowed_object, ed->x + ep->x + ep->offset.x, ed->y + ep->y +ep->offset.y); } - if (ep->extra_objects) - { - Eina_List *el; - Evas_Object *o; - - EINA_LIST_FOREACH(ep->extra_objects, el, o) - { - Evas_Coord oox, ooy; - - evas_object_geometry_get(o, &oox, &ooy, NULL, NULL); - evas_object_move(o, ed->x + ep->x + ep->offset.x + (oox - ox), ed->y + ep->y + ep->offset.y + (ooy - oy)); - } - } } // _edje_emit(ed, "move", NULL); } Modified: trunk/edje/src/lib/edje_text.c =================================================================== --- trunk/edje/src/lib/edje_text.c 2009-08-11 08:59:20 UTC (rev 41678) +++ trunk/edje/src/lib/edje_text.c 2009-08-11 09:45:06 UTC (rev 41679) @@ -57,26 +57,6 @@ } void -_edje_text_part_on_add_clippers(Edje *ed, Edje_Real_Part *ep) -{ - Eina_List *l; - Evas_Object *o; - - EINA_LIST_FOREACH(ep->extra_objects, l, o) - { - if (ep->part->clip_to_id >= 0) - { - ep->clip_to = ed->table_parts[ep->part->clip_to_id % ed->table_parts_size]; - if (ep->clip_to) - { - evas_object_pass_events_set(ep->clip_to->object, 1); - evas_object_clip_set(o, ep->clip_to->object); - } - } - } -} - -void _edje_text_part_on_del(Edje *ed, Edje_Part *pt) { Eina_List *tmp; @@ -90,19 +70,6 @@ _edje_text_class_member_del(ed, desc->text.text_class); } -void -_edje_text_real_part_on_del(Edje *ed, Edje_Real_Part *ep) -{ - while (ep->extra_objects) - { - Evas_Object *o; - - o = eina_list_data_get(ep->extra_objects); - ep->extra_objects = eina_list_remove(ep->extra_objects, o); - evas_object_del(o); - } -} - static void _edje_text_fit_set(char *buf, const char *text, int c1, int c2) { |
From: Enlightenment S. <no-...@en...> - 2009-08-11 10:06:48
|
Log: * edje_load: More cleanup. Author: cedric Date: 2009-08-11 03:06:37 -0700 (Tue, 11 Aug 2009) New Revision: 41680 Modified: trunk/edje/src/lib/edje_load.c Modified: trunk/edje/src/lib/edje_load.c =================================================================== --- trunk/edje/src/lib/edje_load.c 2009-08-11 09:45:06 UTC (rev 41679) +++ trunk/edje/src/lib/edje_load.c 2009-08-11 10:06:37 UTC (rev 41680) @@ -553,21 +553,25 @@ const char *source = NULL; rp = ed->table_parts[i]; - if (rp->part->type != EDJE_PART_TYPE_GROUP && - rp->part->type != EDJE_PART_TYPE_BOX && - rp->part->type != EDJE_PART_TYPE_TABLE) continue; - if (rp->part->type == EDJE_PART_TYPE_GROUP) - source = rp->part->source; - else if (rp->part->type == EDJE_PART_TYPE_BOX || - rp->part->type == EDJE_PART_TYPE_TABLE) + + switch (rp->part->type) { - if (rp->part->items) - { - curr_item = rp->part->items; - pack_it = curr_item->data; - source = pack_it->source; - } + case EDJE_PART_TYPE_GROUP: + source = rp->part->source; + break; + case EDJE_PART_TYPE_BOX: + case EDJE_PART_TYPE_TABLE: + if (rp->part->items) + { + curr_item = rp->part->items; + pack_it = curr_item->data; + source = pack_it->source; + } + break; + default: + continue; } + while (source) { Eina_List *l; @@ -663,11 +667,10 @@ if (group_path_started) { - while (group_path) - { - eina_stringshare_del(eina_list_data_get(group_path)); - group_path = eina_list_remove_list(group_path, group_path); - } + const char *str; + + EINA_LIST_FREE(group_path, str) + eina_stringshare_del(str); } /* reswallow any swallows that existed before setting the file */ @@ -816,13 +819,8 @@ } if (rp->items) { - /* all internal, for now */ - while (rp->items) - { - /* evas_box/table handles deletion of objects */ - /*evas_object_del(rp->items->data);*/ - rp->items = eina_list_remove_list(rp->items, rp->items); - } + /* evas_box/table handles deletion of objects */ + rp->items = eina_list_free(rp->items); } if (rp->text.text) eina_stringshare_del(rp->text.text); if (rp->text.font) eina_stringshare_del(rp->text.font); @@ -854,25 +852,21 @@ } if (ed->actions) { - while (ed->actions) - { - Edje_Running_Program *runp; + Edje_Running_Program *runp; + EINA_LIST_FREE(ed->actions, runp) + { _edje_anim_count--; - runp = eina_list_data_get(ed->actions); - ed->actions = eina_list_remove(ed->actions, runp); free(runp); } } _edje_animators = eina_list_remove(_edje_animators, ed); if (ed->pending_actions) { - while (ed->pending_actions) - { - Edje_Pending_Program *pp; + Edje_Pending_Program *pp; - pp = eina_list_data_get(ed->pending_actions); - ed->pending_actions = eina_list_remove(ed->pending_actions, pp); + EINA_LIST_FREE(ed->pending_actions, pp) + { ecore_timer_del(pp->timer); free(pp); } @@ -900,15 +894,15 @@ void _edje_file_free(Edje_File *edf) { + Edje_Color_Class *ecc; + Edje_Data *edt; + if (edf->font_dir) { - while (edf->font_dir->entries) - { - Edje_Font_Directory_Entry *fe; + Edje_Font_Directory_Entry *fe; - fe = eina_list_data_get(edf->font_dir->entries); - edf->font_dir->entries = - eina_list_remove_list(edf->font_dir->entries, edf->font_dir->entries); + EINA_LIST_FREE(edf->font_dir->entries, fe) + { eina_hash_del(edf->font_hash, fe->entry, edf); if (edf->free_strings && fe->path) eina_stringshare_del(fe->path); free(fe); @@ -922,13 +916,10 @@ } if (edf->image_dir) { - while (edf->image_dir->entries) - { - Edje_Image_Directory_Entry *ie; + Edje_Image_Directory_Entry *ie; - ie = eina_list_data_get(edf->image_dir->entries); - edf->image_dir->entries = - eina_list_remove_list(edf->image_dir->entries, edf->image_dir->entries); + EINA_LIST_FREE(edf->image_dir->entries, ie) + { if (edf->free_strings && ie->entry) eina_stringshare_del(ie->entry); free(ie); } @@ -936,13 +927,10 @@ } if (edf->collection_dir) { - while (edf->collection_dir->entries) - { - Edje_Part_Collection_Directory_Entry *ce; + Edje_Part_Collection_Directory_Entry *ce; - ce = eina_list_data_get(edf->collection_dir->entries); - edf->collection_dir->entries = - eina_list_remove_list(edf->collection_dir->entries, edf->collection_dir->entries); + EINA_LIST_FREE(edf->collection_dir->entries, ce) + { if (edf->free_strings && ce->entry) eina_stringshare_del(ce->entry); free(ce); } @@ -950,19 +938,15 @@ } if (edf->spectrum_dir) { - while (edf->spectrum_dir->entries) + Edje_Spectrum_Directory_Entry *se; + + EINA_LIST_FREE(edf->spectrum_dir->entries, se) { - Edje_Spectrum_Directory_Entry *se; + Edje_Spectrum_Color *sc; - se = eina_list_data_get(edf->spectrum_dir->entries); - edf->spectrum_dir->entries = - eina_list_remove_list(edf->spectrum_dir->entries, edf->spectrum_dir->entries); - while (se->color_list) - { - free(eina_list_data_get(se->color_list)); - se->color_list = - eina_list_remove_list(se->color_list, se->color_list); - } + EINA_LIST_FREE(se->color_list, sc) + free(sc); + if (edf->free_strings) { if (se->entry) eina_stringshare_del(se->entry); @@ -972,12 +956,9 @@ } free(edf->spectrum_dir); } - while (edf->data) - { - Edje_Data *edt; - edt = eina_list_data_get(edf->data); - edf->data = eina_list_remove(edf->data, edt); + EINA_LIST_FREE(edf->data, edt) + { if (edf->free_strings) { if (edt->key) eina_stringshare_del(edt->key); @@ -992,13 +973,8 @@ edf->data_cache = NULL; } - while (edf->color_classes) + EINA_LIST_FREE(edf->color_classes, ecc) { - Edje_Color_Class *ecc; - - ecc = eina_list_data_get(edf->color_classes); - edf->color_classes = - eina_list_remove_list(edf->color_classes, edf->color_classes); if (edf->free_strings && ecc->name) eina_stringshare_del(ecc->name); free(ecc); } @@ -1031,12 +1007,14 @@ void _edje_collection_free(Edje_File *edf, Edje_Part_Collection *ec) { - while (ec->programs) + Edje_Program *pr; + Edje_Part *ep; + + EINA_LIST_FREE(ec->programs, pr) { - Edje_Program *pr; + Edje_Program_Target *prt; + Edje_Program_After *pa; - pr = eina_list_data_get(ec->programs); - ec->programs = eina_list_remove_list(ec->programs, ec->programs); if (edf->free_strings) { if (pr->name) eina_stringshare_del(pr->name); @@ -1045,54 +1023,32 @@ if (pr->state) eina_stringshare_del(pr->state); if (pr->state2) eina_stringshare_del(pr->state2); } - while (pr->targets) - { - Edje_Program_Target *prt; - - prt = eina_list_data_get(pr->targets); - pr->targets = eina_list_remove_list(pr->targets, pr->targets); - free(prt); - } - while (pr->after) - { - Edje_Program_After *pa; - - pa = eina_list_data_get(pr->after); - pr->after = eina_list_remove_list(pr->after, pr->after); - free(pa); - } + EINA_LIST_FREE(pr->targets, prt) + free(prt); + EINA_LIST_FREE(pr->after, pa) + free(pa); free(pr); } - while (ec->parts) + EINA_LIST_FREE(ec->parts, ep) { - Edje_Part *ep; + Edje_Part_Description *desc; - ep = eina_list_data_get(ec->parts); - ec->parts = eina_list_remove(ec->parts, ep); if (edf->free_strings && ep->name) eina_stringshare_del(ep->name); if (ep->default_desc) { _edje_collection_free_part_description_free(ep->default_desc, edf->free_strings); ep->default_desc = NULL; } - while (ep->other_desc) - { - Edje_Part_Description *desc; - - desc = eina_list_data_get(ep->other_desc); - ep->other_desc = eina_list_remove(ep->other_desc, desc); - _edje_collection_free_part_description_free(desc, edf->free_strings); - } + EINA_LIST_FREE(ep->other_desc, desc) + _edje_collection_free_part_description_free(desc, edf->free_strings); free(ep); } if (ec->data) { - while (ec->data) - { - Edje_Data *edt; + Edje_Data *edt; - edt = eina_list_data_get(ec->data); - ec->data = eina_list_remove(ec->data, edt); + EINA_LIST_FREE(ec->data, edt) + { if (edf->free_strings) { if (edt->key) eina_stringshare_del(edt->key); @@ -1119,14 +1075,10 @@ void _edje_collection_free_part_description_free(Edje_Part_Description *desc, unsigned int free_strings) { - while (desc->image.tween_list) - { - Edje_Part_Image_Id *pi; + Edje_Part_Image_Id *pi; - pi = eina_list_data_get(desc->image.tween_list); - desc->image.tween_list = eina_list_remove(desc->image.tween_list, pi); - free(pi); - } + EINA_LIST_FREE(desc->image.tween_list, pi) + free(pi); if (free_strings) { if (desc->color_class) eina_stringshare_del(desc->color_class); |
From: Enlightenment S. <no-...@en...> - 2009-08-11 10:08:18
|
Log: * edje: Starting cleanup of Edje_Real_Part. Author: cedric Date: 2009-08-11 03:08:03 -0700 (Tue, 11 Aug 2009) New Revision: 41681 Modified: trunk/edje/src/lib/edje_private.h Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-08-11 10:06:37 UTC (rev 41680) +++ trunk/edje/src/lib/edje_private.h 2009-08-11 10:08:03 UTC (rev 41681) @@ -614,6 +614,7 @@ typedef struct _Edje Edje; +typedef struct _Edje_Real_Part_State Edje_Real_Part_State; typedef struct _Edje_Real_Part Edje_Real_Part; typedef struct _Edje_Running_Program Edje_Running_Program; typedef struct _Edje_Signal_Callback Edje_Signal_Callback; @@ -757,6 +758,20 @@ unsigned char smooth : 1; // 4 }; // 116 +struct _Edje_Real_Part_State +{ + Edje_Part_Description *description; // 4 + Edje_Real_Part *rel1_to_x; // 4 + Edje_Real_Part *rel1_to_y; // 4 + Edje_Real_Part *rel2_to_x; // 4 + Edje_Real_Part *rel2_to_y; // 4 +#ifdef EDJE_CALC_CACHE + Edje_Calc_Params p; // 116 + int state; // 4 +#endif +}; // 20 +// WITH EDJE_CALC_CACHE 140 + struct _Edje_Real_Part { Edje *edje; // 4 @@ -809,17 +824,7 @@ double description_pos; // 8 Edje_Part_Description *chosen_description; // 4 - struct { - Edje_Part_Description *description; // 4 - Edje_Real_Part *rel1_to_x; // 4 - Edje_Real_Part *rel1_to_y; // 4 - Edje_Real_Part *rel2_to_x; // 4 - Edje_Real_Part *rel2_to_y; // 4 -#ifdef EDJE_CALC_CACHE - Edje_Calc_Params p; // 116 - int state; // 4 -#endif - } param1, param2, custom; // 60 // FIXME: custom should be alloced on demand - 20-- + Edje_Real_Part_State param1, param2, custom; // 60 // FIXME: custom should be alloced on demand - 20-- // WITH EDJE_CALC_CACHE: 420 #ifdef EDJE_CALC_CACHE |
From: Enlightenment S. <no-...@en...> - 2009-08-11 10:17:28
|
Log: * edje: Cleanup drag part of Edje_Real_Part. Author: cedric Date: 2009-08-11 03:17:14 -0700 (Tue, 11 Aug 2009) New Revision: 41682 Modified: trunk/edje/src/lib/edje_callbacks.c trunk/edje/src/lib/edje_load.c trunk/edje/src/lib/edje_private.h Modified: trunk/edje/src/lib/edje_callbacks.c =================================================================== --- trunk/edje/src/lib/edje_callbacks.c 2009-08-11 10:08:03 UTC (rev 41681) +++ trunk/edje/src/lib/edje_callbacks.c 2009-08-11 10:17:14 UTC (rev 41682) @@ -89,12 +89,12 @@ _edje_emit(ed, buf, rp->part->name); } - if (rp->events_to) + if (rp->drag.events_to) { int x = 0, y = 0; Edje_Real_Part *events; - events = rp->events_to; + events = rp->drag.events_to; evas_object_geometry_get(rp->object, &x, &y, NULL, NULL); if ((events->part->dragable.x) || (events->part->dragable.y)) @@ -200,9 +200,9 @@ _edje_emit(ed, buf, rp->part->name); } - if (rp->events_to) + if (rp->drag.events_to) { - rp = rp->events_to; + rp = rp->drag.events_to; if (!ignored) { snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); @@ -254,7 +254,7 @@ ed = data; rp = evas_object_data_get(obj, "real_part"); if (!rp) return; - if (rp->events_to) rp = rp->events_to; + if (rp->drag.events_to) rp = rp->drag.events_to; ignored = rp->part->ignore_flags & ev->event_flags; Modified: trunk/edje/src/lib/edje_load.c =================================================================== --- trunk/edje/src/lib/edje_load.c 2009-08-11 10:08:03 UTC (rev 41681) +++ trunk/edje/src/lib/edje_load.c 2009-08-11 10:17:14 UTC (rev 41682) @@ -468,12 +468,12 @@ /* replay events for dragable */ if (rp->part->dragable.events_id >= 0) { - rp->events_to = + rp->drag.events_to = ed->table_parts[rp->part->dragable.events_id % ed->table_parts_size]; /* events_to may be used only with dragable */ - if (!rp->events_to->part->dragable.x && - !rp->events_to->part->dragable.y) - rp->events_to = NULL; + if (!rp->drag.events_to->part->dragable.x && + !rp->drag.events_to->part->dragable.y) + rp->drag.events_to = NULL; } rp->swallow_params.min.w = 0; Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-08-11 10:08:03 UTC (rev 41681) +++ trunk/edje/src/lib/edje_private.h 2009-08-11 10:17:14 UTC (rev 41682) @@ -615,6 +615,7 @@ typedef struct _Edje Edje; typedef struct _Edje_Real_Part_State Edje_Real_Part_State; +typedef struct _Edje_Real_Part_Drag Edje_Real_Part_Drag; typedef struct _Edje_Real_Part Edje_Real_Part; typedef struct _Edje_Running_Program Edje_Running_Program; typedef struct _Edje_Signal_Callback Edje_Signal_Callback; @@ -772,6 +773,21 @@ }; // 20 // WITH EDJE_CALC_CACHE 140 +struct _Edje_Real_Part_Drag +{ + double x, y; // 16 + Edje_Position_Scale val, size, step, page; // 64 + struct { + unsigned int count; // 4 + int x, y; // 8 + } down; + struct { + int x, y; // 8 + } tmp; + unsigned char need_reset : 1; // 4 + Edje_Real_Part *events_to; // 4 +}; // 104 // FIME: make drag pointer to struct optional + struct _Edje_Real_Part { Edje *edje; // 4 @@ -789,19 +805,8 @@ Edje_Size min, max; // 16 Edje_Aspect aspect; // 12 } swallow_params; // 28 // FIXME: only if type SWALLOW + Edje_Real_Part_Drag drag; // 104 // FIME: make drag pointer to struct optional struct { - double x, y; // 16 - Edje_Position_Scale val, size, step, page; // 64 - struct { - unsigned int count; // 4 - int x, y; // 8 - } down; - struct { - int x, y; // 8 - } tmp; - unsigned char need_reset : 1; // 4 - } drag; // 104 // FIME: make drag pointer to struct optional - struct { Edje_Real_Part *source; // 4 Edje_Real_Part *text_source; // 4 const char *text; // 4 @@ -836,10 +841,9 @@ Edje_Real_Part *clip_to; // 4 Edje_Running_Program *program; // 4 - Edje_Real_Part *events_to; // 4 int clicked_button; // 4 - int gradient_id; // 4 + int gradient_id; // 4 // FIXME: only for gradient unsigned char calculated; // 1 unsigned char calculating; // 1 |
From: Enlightenment S. <no-...@en...> - 2009-08-11 10:32:29
|
Log: * edje: More cleanup of Edje_Real_Part. Author: cedric Date: 2009-08-11 03:32:21 -0700 (Tue, 11 Aug 2009) New Revision: 41683 Modified: trunk/edje/src/lib/edje_calc.c trunk/edje/src/lib/edje_load.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_smart.c trunk/edje/src/lib/edje_text.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2009-08-11 10:17:14 UTC (rev 41682) +++ trunk/edje/src/lib/edje_calc.c 2009-08-11 10:32:21 UTC (rev 41683) @@ -198,7 +198,7 @@ { if ((ep->part->dragable.x != 0) || (ep->part->dragable.y != 0)) { - if (ep->confine_to) + if (ep->drag.confine_to) { double dx, dy, dw, dh; int ret = 0; @@ -208,13 +208,13 @@ else if (ep->part->dragable.x != 0) ret = 1; else if (ep->part->dragable.y != 0) ret = 2; - dx = ep->x - ep->confine_to->x; - dw = ep->confine_to->w - ep->w; + dx = ep->x - ep->drag.confine_to->x; + dw = ep->drag.confine_to->w - ep->w; if (dw != 0.0) dx /= dw; else dx = 0.0; - dy = ep->y - ep->confine_to->y; - dh = ep->confine_to->h - ep->h; + dy = ep->y - ep->drag.confine_to->y; + dh = ep->drag.confine_to->h - ep->h; if (dh != 0) dy /= dh; else dy = 0.0; @@ -1509,11 +1509,11 @@ #endif } } - if (ep->confine_to) + if (ep->drag.confine_to) { - _edje_part_recalc(ed, ep->confine_to, flags); + _edje_part_recalc(ed, ep->drag.confine_to, flags); #ifdef EDJE_CALC_CACHE - statec = ep->confine_to->state; + statec = ep->drag.confine_to->state; #endif } // if (ep->text.source) _edje_part_recalc(ed, ep->text.source, flags); @@ -1546,7 +1546,7 @@ { _edje_part_recalc_single(ed, ep, ep->param1.description, chosen_desc, ep->param1.rel1_to_x, ep->param1.rel1_to_y, ep->param1.rel2_to_x, ep->param1.rel2_to_y, - ep->confine_to, + ep->drag.confine_to, p1, flags); #ifdef EDJE_CALC_CACHE @@ -1576,7 +1576,7 @@ { _edje_part_recalc_single(ed, ep, ep->param2.description, chosen_desc, ep->param2.rel1_to_x, ep->param2.rel1_to_y, ep->param2.rel2_to_x, ep->param2.rel2_to_y, - ep->confine_to, + ep->drag.confine_to, p2, flags); #ifdef EDJE_CALC_CACHE Modified: trunk/edje/src/lib/edje_load.c =================================================================== --- trunk/edje/src/lib/edje_load.c 2009-08-11 10:17:14 UTC (rev 41682) +++ trunk/edje/src/lib/edje_load.c 2009-08-11 10:32:21 UTC (rev 41683) @@ -463,7 +463,7 @@ } } if (rp->part->dragable.confine_id >= 0) - rp->confine_to = ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size]; + rp->drag.confine_to = ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size]; /* replay events for dragable */ if (rp->part->dragable.events_id >= 0) Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-08-11 10:17:14 UTC (rev 41682) +++ trunk/edje/src/lib/edje_private.h 2009-08-11 10:32:21 UTC (rev 41683) @@ -786,6 +786,7 @@ } tmp; unsigned char need_reset : 1; // 4 Edje_Real_Part *events_to; // 4 + Edje_Real_Part *confine_to; // 4 }; // 104 // FIME: make drag pointer to struct optional struct _Edje_Real_Part @@ -793,23 +794,27 @@ Edje *edje; // 4 Edje_Part *part; // 4 Evas_Object *object; // 4 - Evas_Object *swallowed_object; // 4 // FIXME: move with swallow_params data + int x, y, w, h; // 16 + Edje_Rectangle req; // 16 + Eina_List *items; // 4 //FIXME: only if table/box void *entry_data; // 4 // FIXME: move to entry section Evas_Object *cursorbg_object; // 4 // FIXME: move to entry section Evas_Object *cursorfg_object; // 4 // FIXME: move to entry section - int x, y, w, h; // 16 - Edje_Rectangle req; // 16 - Edje_Position offset; // 8 // FIXME: move to text section + + Evas_Object *swallowed_object; // 4 // FIXME: move with swallow_params data struct { Edje_Size min, max; // 16 Edje_Aspect aspect; // 12 } swallow_params; // 28 // FIXME: only if type SWALLOW + Edje_Real_Part_Drag drag; // 104 // FIME: make drag pointer to struct optional + struct { Edje_Real_Part *source; // 4 Edje_Real_Part *text_source; // 4 const char *text; // 4 + Edje_Position offset; // 8 text only const char *font; // 4 text only const char *style; // 4 text only int size; // 4 text only @@ -837,7 +842,6 @@ int state; // 4 #endif - Edje_Real_Part *confine_to; // 4 // fixme - make part of drag Edje_Real_Part *clip_to; // 4 Edje_Running_Program *program; // 4 Modified: trunk/edje/src/lib/edje_smart.c =================================================================== --- trunk/edje/src/lib/edje_smart.c 2009-08-11 10:17:14 UTC (rev 41682) +++ trunk/edje/src/lib/edje_smart.c 2009-08-11 10:32:21 UTC (rev 41683) @@ -129,13 +129,13 @@ ep = ed->table_parts[i]; evas_object_geometry_get(ep->object, &ox, &oy, NULL, NULL); - evas_object_move(ep->object, ed->x + ep->x + ep->offset.x, ed->y + ep->y +ep->offset.y); + evas_object_move(ep->object, ed->x + ep->x + ep->text.offset.x, ed->y + ep->y + ep->text.offset.y); if (ep->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) _edje_entry_real_part_configure(ep); if (ep->swallowed_object) { evas_object_geometry_get(ep->swallowed_object, &ox, &oy, NULL, NULL); - evas_object_move(ep->swallowed_object, ed->x + ep->x + ep->offset.x, ed->y + ep->y +ep->offset.y); + evas_object_move(ep->swallowed_object, ed->x + ep->x + ep->text.offset.x, ed->y + ep->y + ep->text.offset.y); } } // _edje_emit(ed, "move", NULL); Modified: trunk/edje/src/lib/edje_text.c =================================================================== --- trunk/edje/src/lib/edje_text.c 2009-08-11 10:17:14 UTC (rev 41682) +++ trunk/edje/src/lib/edje_text.c 2009-08-11 10:32:21 UTC (rev 41683) @@ -550,12 +550,12 @@ evas_object_text_font_set(ep->object, font, size); evas_object_text_text_set(ep->object, text); part_get_geometry(ep, &tw, &th); - ep->offset.x = ((sw - tw) * params->type.text.align.x); - ep->offset.y = ((sh - th) * params->type.text.align.y); + ep->text.offset.x = ((sw - tw) * params->type.text.align.x); + ep->text.offset.y = ((sh - th) * params->type.text.align.y); evas_object_move(ep->object, - ed->x + params->x + ep->offset.x, - ed->y + params->y + ep->offset.y); + ed->x + params->x + ep->text.offset.x, + ed->y + params->y + ep->text.offset.y); if (params->visible) evas_object_show(ep->object); else evas_object_hide(ep->object); |
From: Enlightenment S. <no-...@en...> - 2009-08-11 12:47:12
|
Log: * edje: Make Edje_Real_Part_Drag a pointer. Win 100 bytes per states. Author: cedric Date: 2009-08-11 05:47:00 -0700 (Tue, 11 Aug 2009) New Revision: 41685 Modified: trunk/edje/src/lib/edje_calc.c trunk/edje/src/lib/edje_callbacks.c trunk/edje/src/lib/edje_edit.c trunk/edje/src/lib/edje_load.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_program.c trunk/edje/src/lib/edje_util.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2009-08-11 10:44:49 UTC (rev 41684) +++ trunk/edje/src/lib/edje_calc.c 2009-08-11 12:47:00 UTC (rev 41685) @@ -196,9 +196,9 @@ int _edje_part_dragable_calc(Edje *ed, Edje_Real_Part *ep, double *x, double *y) { - if ((ep->part->dragable.x != 0) || (ep->part->dragable.y != 0)) + if (ep->drag) { - if (ep->drag.confine_to) + if (ep->drag->confine_to) { double dx, dy, dw, dh; int ret = 0; @@ -208,13 +208,13 @@ else if (ep->part->dragable.x != 0) ret = 1; else if (ep->part->dragable.y != 0) ret = 2; - dx = ep->x - ep->drag.confine_to->x; - dw = ep->drag.confine_to->w - ep->w; + dx = ep->x - ep->drag->confine_to->x; + dw = ep->drag->confine_to->w - ep->w; if (dw != 0.0) dx /= dw; else dx = 0.0; - dy = ep->y - ep->drag.confine_to->y; - dh = ep->drag.confine_to->h - ep->h; + dy = ep->y - ep->drag->confine_to->y; + dh = ep->drag->confine_to->h - ep->h; if (dh != 0) dy /= dh; else dy = 0.0; @@ -225,8 +225,8 @@ } else { - if (x) *x = (double)(ep->drag.tmp.x + ep->drag.x); - if (y) *y = (double)(ep->drag.tmp.y + ep->drag.y); + if (x) *x = (double)(ep->drag->tmp.x + ep->drag->x); + if (y) *y = (double)(ep->drag->tmp.y + ep->drag->y); return 0; } } @@ -240,26 +240,26 @@ _edje_dragable_pos_set(Edje *ed, Edje_Real_Part *ep, double x, double y) { /* check whether this part is dragable at all */ - if (!ep->part->dragable.x && !ep->part->dragable.y) return; + if (!ep->drag) return ; /* instead of checking for equality, we really should check that * the difference is greater than foo, but I have no idea what * value we would set foo to, because it would depend on the * size of the dragable... */ - if (ep->drag.x != x || ep->drag.tmp.x) + if (ep->drag->x != x || ep->drag->tmp.x) { - ep->drag.x = x; - ep->drag.tmp.x = 0; - ep->drag.need_reset = 0; + ep->drag->x = x; + ep->drag->tmp.x = 0; + ep->drag->need_reset = 0; ed->dirty = 1; } - if (ep->drag.y != y || ep->drag.tmp.y) + if (ep->drag->y != y || ep->drag->tmp.y) { - ep->drag.y = y; - ep->drag.tmp.y = 0; - ep->drag.need_reset = 0; + ep->drag->y = y; + ep->drag->tmp.y = 0; + ep->drag->need_reset = 0; ed->dirty = 1; } @@ -950,106 +950,110 @@ } } } - /* confine */ - if (confine_to) + + if (ep->drag) { - int offset; - int step; - double v; - - /* complex dragable params */ - if (flags & FLAG_X) + /* confine */ + if (confine_to) { - v = ep->drag.size.x * confine_to->w; + int offset; + int step; + double v; - if ((minw > 0) && (v < minw)) params->w = minw; - else if ((maxw >= 0) && (v > maxw)) params->w = maxw; - else params->w = v; + /* complex dragable params */ + if (flags & FLAG_X) + { + v = ep->drag->size.x * confine_to->w; - offset = (ep->drag.x * (confine_to->w - params->w)) + - ep->drag.tmp.x; - if (ep->part->dragable.step_x > 0) - { - params->x = confine_to->x + - ((offset / ep->part->dragable.step_x) * ep->part->dragable.step_x); + if ((minw > 0) && (v < minw)) params->w = minw; + else if ((maxw >= 0) && (v > maxw)) params->w = maxw; + else params->w = v; + + offset = (ep->drag->x * (confine_to->w - params->w)) + + ep->drag->tmp.x; + if (ep->part->dragable.step_x > 0) + { + params->x = confine_to->x + + ((offset / ep->part->dragable.step_x) * ep->part->dragable.step_x); + } + else if (ep->part->dragable.count_x > 0) + { + step = (confine_to->w - params->w) / ep->part->dragable.count_x; + if (step < 1) step = 1; + params->x = confine_to->x + + ((offset / step) * step); + } + params->req_drag.x = params->x; + params->req_drag.w = params->w; } - else if (ep->part->dragable.count_x > 0) + if (flags & FLAG_Y) { - step = (confine_to->w - params->w) / ep->part->dragable.count_x; - if (step < 1) step = 1; - params->x = confine_to->x + - ((offset / step) * step); - } - params->req_drag.x = params->x; - params->req_drag.w = params->w; - } - if (flags & FLAG_Y) - { - v = ep->drag.size.y * confine_to->h; + v = ep->drag->size.y * confine_to->h; - if ((minh > 0) && (v < minh)) params->h = minh; - else if ((maxh >= 0) && (v > maxh)) params->h = maxh; - else params->h = v; + if ((minh > 0) && (v < minh)) params->h = minh; + else if ((maxh >= 0) && (v > maxh)) params->h = maxh; + else params->h = v; - offset = (ep->drag.y * (confine_to->h - params->h)) + - ep->drag.tmp.y; - if (ep->part->dragable.step_y > 0) - { - params->y = confine_to->y + - ((offset / ep->part->dragable.step_y) * ep->part->dragable.step_y); + offset = (ep->drag->y * (confine_to->h - params->h)) + + ep->drag->tmp.y; + if (ep->part->dragable.step_y > 0) + { + params->y = confine_to->y + + ((offset / ep->part->dragable.step_y) * ep->part->dragable.step_y); + } + else if (ep->part->dragable.count_y > 0) + { + step = (confine_to->h - params->h) / ep->part->dragable.count_y; + if (step < 1) step = 1; + params->y = confine_to->y + + ((offset / step) * step); + } + params->req_drag.y = params->y; + params->req_drag.h = params->h; } - else if (ep->part->dragable.count_y > 0) + /* limit to confine */ + if (flags & FLAG_X) { - step = (confine_to->h - params->h) / ep->part->dragable.count_y; - if (step < 1) step = 1; - params->y = confine_to->y + - ((offset / step) * step); + if (params->x < confine_to->x) + { + params->x = confine_to->x; + } + if ((params->x + params->w) > (confine_to->x + confine_to->w)) + { + params->x = confine_to->x + (confine_to->w - params->w); + } } - params->req_drag.y = params->y; - params->req_drag.h = params->h; - } - /* limit to confine */ - if (flags & FLAG_X) - { - if (params->x < confine_to->x) + if (flags & FLAG_Y) { - params->x = confine_to->x; + if (params->y < confine_to->y) + { + params->y = confine_to->y; + } + if ((params->y + params->h) > (confine_to->y + confine_to->h)) + { + params->y = confine_to->y + (confine_to->h - params->h); + } } - if ((params->x + params->w) > (confine_to->x + confine_to->w)) - { - params->x = confine_to->x + (confine_to->w - params->w); - } } - if (flags & FLAG_Y) + else { - if (params->y < confine_to->y) + /* simple dragable params */ + if (flags & FLAG_X) { - params->y = confine_to->y; + params->x += ep->drag->x + ep->drag->tmp.x; + params->req_drag.x = params->x; + params->req_drag.w = params->w; } - if ((params->y + params->h) > (confine_to->y + confine_to->h)) + if (flags & FLAG_Y) { - params->y = confine_to->y + (confine_to->h - params->h); + params->y += ep->drag->y + ep->drag->tmp.y; + params->req_drag.y = params->y; + params->req_drag.h = params->h; } } } - else - { - /* simple dragable params */ - if (flags & FLAG_X) - { - params->x += ep->drag.x + ep->drag.tmp.x; - params->req_drag.x = params->x; - params->req_drag.w = params->w; - } - if (flags & FLAG_Y) - { - params->y += ep->drag.y + ep->drag.tmp.y; - params->req_drag.y = params->y; - params->req_drag.h = params->h; - } - } + /* fill */ - if (ep->part->type == EDJE_PART_TYPE_GRADIENT && desc->gradient.use_rel && (!desc->gradient.type || !strcmp(desc->gradient.type, "linear"))) { int x2, y2; @@ -1404,6 +1408,7 @@ #endif Edje_Calc_Params *p1, *pf; Edje_Part_Description *chosen_desc; + Edje_Real_Part *confine_to = NULL; double pos = 0.0; if ((ep->calculated & FLAG_XY) == FLAG_XY) @@ -1509,11 +1514,12 @@ #endif } } - if (ep->drag.confine_to) + if (ep->drag && ep->drag->confine_to) { - _edje_part_recalc(ed, ep->drag.confine_to, flags); + confine_to = ep->drag->confine_to; + _edje_part_recalc(ed, confine_to, flags); #ifdef EDJE_CALC_CACHE - statec = ep->drag.confine_to->state; + statec = confine_to->state; #endif } // if (ep->text.source) _edje_part_recalc(ed, ep->text.source, flags); @@ -1546,7 +1552,7 @@ { _edje_part_recalc_single(ed, ep, ep->param1.description, chosen_desc, ep->param1.rel1_to_x, ep->param1.rel1_to_y, ep->param1.rel2_to_x, ep->param1.rel2_to_y, - ep->drag.confine_to, + confine_to, p1, flags); #ifdef EDJE_CALC_CACHE @@ -1576,7 +1582,7 @@ { _edje_part_recalc_single(ed, ep, ep->param2.description, chosen_desc, ep->param2.rel1_to_x, ep->param2.rel1_to_y, ep->param2.rel2_to_x, ep->param2.rel2_to_y, - ep->drag.confine_to, + confine_to, p2, flags); #ifdef EDJE_CALC_CACHE @@ -1685,18 +1691,18 @@ #endif ep->req = pf->req; - if (ep->drag.need_reset) + if (ep->drag && ep->drag->need_reset) { double dx, dy; dx = 0; dy = 0; _edje_part_dragable_calc(ed, ep, &dx, &dy); - ep->drag.x = dx; - ep->drag.y = dy; - ep->drag.tmp.x = 0; - ep->drag.tmp.y = 0; - ep->drag.need_reset = 0; + ep->drag->x = dx; + ep->drag->y = dy; + ep->drag->tmp.x = 0; + ep->drag->tmp.y = 0; + ep->drag->need_reset = 0; } if (!ed->calc_only) { Modified: trunk/edje/src/lib/edje_callbacks.c =================================================================== --- trunk/edje/src/lib/edje_callbacks.c 2009-08-11 10:44:49 UTC (rev 41684) +++ trunk/edje/src/lib/edje_callbacks.c 2009-08-11 12:47:00 UTC (rev 41685) @@ -89,25 +89,25 @@ _edje_emit(ed, buf, rp->part->name); } - if (rp->drag.events_to) + if (rp->drag && rp->drag->events_to) { int x = 0, y = 0; Edje_Real_Part *events; - events = rp->drag.events_to; + events = rp->drag->events_to; evas_object_geometry_get(rp->object, &x, &y, NULL, NULL); if ((events->part->dragable.x) || (events->part->dragable.y)) { if (events->part->dragable.x) { - events->drag.down.x = ev->canvas.x; - events->drag.tmp.x = 0; + events->drag->down.x = ev->canvas.x; + events->drag->tmp.x = 0; } if (events->part->dragable.y) { - events->drag.down.y = ev->canvas.y; - events->drag.tmp.y = 0; + events->drag->down.y = ev->canvas.y; + events->drag->tmp.y = 0; } if (!ignored) @@ -134,17 +134,17 @@ dir = _edje_part_dragable_calc(ed, rp, &dx, &dy); - if ((dx != rp->drag.val.x) || (dy != rp->drag.val.y)) + if ((dx != rp->drag->val.x) || (dy != rp->drag->val.y)) { - rp->drag.val.x = dx; - rp->drag.val.y = dy; + rp->drag->val.x = dx; + rp->drag->val.y = dy; if (!ignored) _edje_emit(ed, "drag", rp->part->name); ed->dirty = 1; #ifdef EDJE_CALC_CACHE rp->invalidate = 1; #endif - rp->drag.need_reset = 1; + rp->drag->need_reset = 1; _edje_recalc_do(ed); } } @@ -152,16 +152,16 @@ if ((rp->part->dragable.x) || (rp->part->dragable.y)) { - if (rp->drag.down.count == 0) + if (rp->drag->down.count == 0) { if (rp->part->dragable.x) - rp->drag.down.x = ev->canvas.x; + rp->drag->down.x = ev->canvas.x; if (rp->part->dragable.y) - rp->drag.down.y = ev->canvas.y; + rp->drag->down.y = ev->canvas.y; if (!ignored) _edje_emit(ed, "drag,start", rp->part->name); } - rp->drag.down.count++; + rp->drag->down.count++; } if (rp->clicked_button == 0) { @@ -200,24 +200,24 @@ _edje_emit(ed, buf, rp->part->name); } - if (rp->drag.events_to) + if (rp->drag) { - rp = rp->drag.events_to; - if (!ignored) + if (rp->drag->events_to) { - snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); - _edje_emit(ed, buf, rp->part->name); + rp = rp->drag->events_to; + if (!ignored) + { + snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); + _edje_emit(ed, buf, rp->part->name); + } } - } - if ((rp->part->dragable.x) || (rp->part->dragable.y)) - { - if (rp->drag.down.count > 0) + if (rp->drag->down.count > 0) { - rp->drag.down.count--; - if (rp->drag.down.count == 0) + rp->drag->down.count--; + if (rp->drag->down.count == 0) { - rp->drag.need_reset = 1; + rp->drag->need_reset = 1; ed->dirty = 1; #ifdef EDJE_CALC_CACHE rp->invalidate = 1; @@ -227,6 +227,7 @@ } } } + if ((rp->still_in) && (rp->clicked_button == ev->button) && (!ignored)) { snprintf(buf, sizeof(buf), "mouse,clicked,%i", ev->button); @@ -254,7 +255,7 @@ ed = data; rp = evas_object_data_get(obj, "real_part"); if (!rp) return; - if (rp->drag.events_to) rp = rp->drag.events_to; + if (rp->drag && rp->drag->events_to) rp = rp->drag->events_to; ignored = rp->part->ignore_flags & ev->event_flags; @@ -281,33 +282,31 @@ rp->still_in = 1; } _edje_freeze(ed); - if ((rp->part->dragable.x) || (rp->part->dragable.y)) + if (rp->drag) { - if (rp->drag.down.count > 0) + if (rp->drag->down.count > 0) { if (rp->part->dragable.x) - rp->drag.tmp.x = ev->cur.canvas.x - rp->drag.down.x; + rp->drag->tmp.x = ev->cur.canvas.x - rp->drag->down.x; if (rp->part->dragable.y) - rp->drag.tmp.y = ev->cur.canvas.y - rp->drag.down.y; + rp->drag->tmp.y = ev->cur.canvas.y - rp->drag->down.y; ed->dirty = 1; #ifdef EDJE_CALC_CACHE rp->invalidate = 1; #endif } _edje_recalc_do(ed); - } - if ((rp->part->dragable.x) || (rp->part->dragable.y)) - { - if (rp->drag.down.count > 0) + + if (rp->drag->down.count > 0) { double dx, dy; int dir; dir = _edje_part_dragable_calc(ed, rp, &dx, &dy); - if ((dx != rp->drag.val.x) || (dy != rp->drag.val.y)) + if ((dx != rp->drag->val.x) || (dy != rp->drag->val.y)) { - rp->drag.val.x = dx; - rp->drag.val.y = dy; + rp->drag->val.x = dx; + rp->drag->val.y = dy; if (!ignored) _edje_emit(ed, "drag", rp->part->name); ed->dirty = 1; Modified: trunk/edje/src/lib/edje_edit.c =================================================================== --- trunk/edje/src/lib/edje_edit.c 2009-08-11 10:44:49 UTC (rev 41684) +++ trunk/edje/src/lib/edje_edit.c 2009-08-11 12:47:00 UTC (rev 41685) @@ -1549,8 +1549,6 @@ } evas_object_clip_set(rp->object, ed->clipper); } - rp->drag.step.x = ep->dragable.step_x; - rp->drag.step.y = ep->dragable.step_y; rp->gradient_id = -1; @@ -1937,6 +1935,21 @@ GET_RP_OR_RETURN(); printf("Set dragX for part: %s\n", part); rp->part->dragable.x = drag; + + if (!drag && !rp->part->dragable.y) + { + free(rp->drag); + rp->drag = NULL; + return ; + } + + if (rp->drag) return; + + rp->drag = mem_alloc(sizeof (Edje_Real_Part_Drag)); + if (!rp->drag) return; + + rp->drag->step.x = rp->part->dragable.step_x; + rp->drag->step.y = rp->part->dragable.step_y; } EAPI int @@ -1953,6 +1966,21 @@ GET_RP_OR_RETURN(); printf("Set dragY for part: %s\n", part); rp->part->dragable.y = drag; + + if (!drag && !rp->part->dragable.x) + { + free(rp->drag); + rp->drag = NULL; + return ; + } + + if (rp->drag) return; + + rp->drag = mem_alloc(sizeof (Edje_Real_Part_Drag)); + if (!rp->drag) return; + + rp->drag->step.x = rp->part->dragable.step_x; + rp->drag->step.y = rp->part->dragable.step_y; } EAPI int Modified: trunk/edje/src/lib/edje_load.c =================================================================== --- trunk/edje/src/lib/edje_load.c 2009-08-11 10:44:49 UTC (rev 41684) +++ trunk/edje/src/lib/edje_load.c 2009-08-11 12:47:00 UTC (rev 41685) @@ -352,6 +352,21 @@ ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; return 0; } + + if ((ep->dragable.x != 0) || (ep->dragable.y != 0)) + { + rp->drag = calloc(1, sizeof (Edje_Real_Part_Drag)); + if (!rp->drag) + { + ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; + free(rp); + return 0; + } + + rp->drag->step.x = ep->dragable.step_x; + rp->drag->step.y = ep->dragable.step_y; + } + rp->edje = ed; _edje_ref(rp->edje); rp->part = ep; @@ -424,8 +439,6 @@ if (rp->part->clip_to_id < 0) evas_object_clip_set(rp->object, ed->clipper); } - rp->drag.step.x = ep->dragable.step_x; - rp->drag.step.y = ep->dragable.step_y; rp->gradient_id = -1; } if (n > 0) @@ -462,20 +475,23 @@ evas_object_clip_set(rp->object, rp->clip_to->object); } } - if (rp->part->dragable.confine_id >= 0) - rp->drag.confine_to = ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size]; - - /* replay events for dragable */ - if (rp->part->dragable.events_id >= 0) + if (rp->drag) { - rp->drag.events_to = - ed->table_parts[rp->part->dragable.events_id % ed->table_parts_size]; - /* events_to may be used only with dragable */ - if (!rp->drag.events_to->part->dragable.x && - !rp->drag.events_to->part->dragable.y) - rp->drag.events_to = NULL; + if (rp->part->dragable.confine_id >= 0) + rp->drag->confine_to = ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size]; + + /* replay events for dragable */ + if (rp->part->dragable.events_id >= 0) + { + rp->drag->events_to = + ed->table_parts[rp->part->dragable.events_id % ed->table_parts_size]; + /* events_to may be used only with dragable */ + if (!rp->drag->events_to->part->dragable.x && + !rp->drag->events_to->part->dragable.y) + rp->drag->events_to = NULL; + } } - + rp->swallow_params.min.w = 0; rp->swallow_params.min.w = 0; rp->swallow_params.max.w = -1; @@ -527,9 +543,12 @@ rp = ed->table_parts[i]; evas_object_show(rp->object); if (_edje_block_break(ed)) break; - if (rp->part->dragable.x < 0) rp->drag.val.x = 1.0; - if (rp->part->dragable.y < 0) rp->drag.val.x = 1.0; - _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y); + if (rp->drag) + { + if (rp->part->dragable.x < 0) rp->drag->val.x = 1.0; + if (rp->part->dragable.y < 0) rp->drag->val.x = 1.0; + _edje_dragable_pos_set(ed, rp, rp->drag->val.x, rp->drag->val.y); + } } ed->dirty = 1; #ifdef EDJE_CALC_CACHE Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-08-11 10:44:49 UTC (rev 41684) +++ trunk/edje/src/lib/edje_private.h 2009-08-11 12:47:00 UTC (rev 41685) @@ -808,7 +808,7 @@ Edje_Aspect aspect; // 12 } swallow_params; // 28 // FIXME: only if type SWALLOW - Edje_Real_Part_Drag drag; // 104 // FIME: make drag pointer to struct optional + Edje_Real_Part_Drag *drag; // 4 struct { Edje_Real_Part *source; // 4 @@ -856,8 +856,8 @@ #ifdef EDJE_CALC_CACHE unsigned char invalidate : 1; #endif -}; // 394 -// WITH EDJE_CALC_CACHE: 874 +}; // 294 +// WITH EDJE_CALC_CACHE: 774 struct _Edje_Running_Program { Modified: trunk/edje/src/lib/edje_program.c =================================================================== --- trunk/edje/src/lib/edje_program.c 2009-08-11 10:44:49 UTC (rev 41684) +++ trunk/edje/src/lib/edje_program.c 2009-08-11 12:47:00 UTC (rev 41685) @@ -671,15 +671,15 @@ if (pt->id >= 0) { rp = ed->table_parts[pt->id % ed->table_parts_size]; - if ((rp) && (rp->drag.down.count == 0)) + if ((rp) && (rp->drag) && (rp->drag->down.count == 0)) { - rp->drag.val.x = pr->value; - rp->drag.val.y = pr->value2; - if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0; - else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0; - if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0; - else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0; - _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y); + rp->drag->val.x = pr->value; + rp->drag->val.y = pr->value2; + if (rp->drag->val.x < 0.0) rp->drag->val.x = 0.0; + else if (rp->drag->val.x > 1.0) rp->drag->val.x = 1.0; + if (rp->drag->val.y < 0.0) rp->drag->val.y = 0.0; + else if (rp->drag->val.y > 1.0) rp->drag->val.y = 1.0; + _edje_dragable_pos_set(ed, rp, rp->drag->val.x, rp->drag->val.y); _edje_emit(ed, "drag,set", rp->part->name); if (_edje_block_break(ed)) goto break_prog; } @@ -697,15 +697,15 @@ if (pt->id >= 0) { rp = ed->table_parts[pt->id % ed->table_parts_size]; - if ((rp) && (rp->drag.down.count == 0)) + if ((rp) && (rp->drag) && (rp->drag->down.count == 0)) { - rp->drag.val.x += pr->value * rp->drag.step.x * rp->part->dragable.x; - rp->drag.val.y += pr->value2 * rp->drag.step.y * rp->part->dragable.y; - if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0; - else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0; - if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0; - else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0; - _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y); + rp->drag->val.x += pr->value * rp->drag->step.x * rp->part->dragable.x; + rp->drag->val.y += pr->value2 * rp->drag->step.y * rp->part->dragable.y; + if (rp->drag->val.x < 0.0) rp->drag->val.x = 0.0; + else if (rp->drag->val.x > 1.0) rp->drag->val.x = 1.0; + if (rp->drag->val.y < 0.0) rp->drag->val.y = 0.0; + else if (rp->drag->val.y > 1.0) rp->drag->val.y = 1.0; + _edje_dragable_pos_set(ed, rp, rp->drag->val.x, rp->drag->val.y); _edje_emit(ed, "drag,step", rp->part->name); if (_edje_block_break(ed)) goto break_prog; } @@ -723,15 +723,15 @@ if (pt->id >= 0) { rp = ed->table_parts[pt->id % ed->table_parts_size]; - if ((rp) && (rp->drag.down.count == 0)) + if ((rp) && (rp->drag) && (rp->drag->down.count == 0)) { - rp->drag.val.x += pr->value * rp->drag.page.x * rp->part->dragable.x; - rp->drag.val.y += pr->value2 * rp->drag.page.y * rp->part->dragable.y; - if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0; - else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0; - if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0; - else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0; - _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y); + rp->drag->val.x += pr->value * rp->drag->page.x * rp->part->dragable.x; + rp->drag->val.y += pr->value2 * rp->drag->page.y * rp->part->dragable.y; + if (rp->drag->val.x < 0.0) rp->drag->val.x = 0.0; + else if (rp->drag->val.x > 1.0) rp->drag->val.x = 1.0; + if (rp->drag->val.y < 0.0) rp->drag->val.y = 0.0; + else if (rp->drag->val.y > 1.0) rp->drag->val.y = 1.0; + _edje_dragable_pos_set(ed, rp, rp->drag->val.x, rp->drag->val.y); _edje_emit(ed, "drag,page", rp->part->name); if (_edje_block_break(ed)) goto break_prog; } Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2009-08-11 10:44:49 UTC (rev 41684) +++ trunk/edje/src/lib/edje_util.c 2009-08-11 12:47:00 UTC (rev 41685) @@ -2156,7 +2156,8 @@ if ((!ed) || (!part)) return; rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return; - if (rp->drag.down.count > 0) return; + if (!rp->drag) return; + if (rp->drag->down.count > 0) return; if (rp->part->dragable.confine_id != -1) { dx = CLAMP(dx, 0.0, 1.0); @@ -2164,9 +2165,9 @@ } if (rp->part->dragable.x < 0) dx = 1.0 - dx; if (rp->part->dragable.y < 0) dy = 1.0 - dy; - if ((rp->drag.val.x == dx) && (rp->drag.val.y == dy)) return; - rp->drag.val.x = dx; - rp->drag.val.y = dy; + if ((rp->drag->val.x == dx) && (rp->drag->val.y == dy)) return; + rp->drag->val.x = dx; + rp->drag->val.y = dy; #ifdef EDJE_CALC_CACHE rp->invalidate = 1; #endif @@ -2202,14 +2203,14 @@ _edje_recalc_do(ed); rp = _edje_real_part_recursive_get(ed, (char *)part); - if (!rp) + if (!rp || !rp->drag) { if (dx) *dx = 0; if (dy) *dy = 0; return; } - ddx = rp->drag.val.x; - ddy = rp->drag.val.y; + ddx = rp->drag->val.x; + ddy = rp->drag->val.y; if (rp->part->dragable.x < 0) ddx = 1.0 - ddx; if (rp->part->dragable.y < 0) ddy = 1.0 - ddy; if (dx) *dx = ddx; @@ -2234,13 +2235,14 @@ if ((!ed) || (!part)) return; rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return; + if (!rp->drag) return; if (dw < 0.0) dw = 0.0; else if (dw > 1.0) dw = 1.0; if (dh < 0.0) dh = 0.0; else if (dh > 1.0) dh = 1.0; - if ((rp->drag.size.x == dw) && (rp->drag.size.y == dh)) return; - rp->drag.size.x = dw; - rp->drag.size.y = dh; + if ((rp->drag->size.x == dw) && (rp->drag->size.y == dh)) return; + rp->drag->size.x = dw; + rp->drag->size.y = dh; rp->edje->dirty = 1; #ifdef EDJE_CALC_CACHE rp->invalidate = 1; @@ -2274,14 +2276,14 @@ _edje_recalc_do(ed); rp = _edje_real_part_recursive_get(ed, (char *)part); - if (!rp) + if (!rp || !rp->drag) { if (dw) *dw = 0; if (dh) *dh = 0; return; } - if (dw) *dw = rp->drag.size.x; - if (dh) *dh = rp->drag.size.y; + if (dw) *dw = rp->drag->size.x; + if (dh) *dh = rp->drag->size.y; } /** Sets the drag step increment @@ -2302,12 +2304,13 @@ if ((!ed) || (!part)) return; rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return; + if (!rp->drag) return; if (dx < 0.0) dx = 0.0; else if (dx > 1.0) dx = 1.0; if (dy < 0.0) dy = 0.0; else if (dy > 1.0) dy = 1.0; - rp->drag.step.x = dx; - rp->drag.step.y = dy; + rp->drag->step.x = dx; + rp->drag->step.y = dy; #ifdef EDJE_CALC_CACHE rp->invalidate = 1; #endif @@ -2339,14 +2342,14 @@ _edje_recalc_do(ed); rp = _edje_real_part_recursive_get(ed, (char *)part); - if (!rp) + if (!rp || !rp->drag) { if (dx) *dx = 0; if (dy) *dy = 0; return; } - if (dx) *dx = rp->drag.step.x; - if (dy) *dy = rp->drag.step.y; + if (dx) *dx = rp->drag->step.x; + if (dy) *dy = rp->drag->step.y; } /** Sets the page step increments @@ -2367,12 +2370,13 @@ if ((!ed) || (!part)) return; rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return; + if (!rp->drag) return; if (dx < 0.0) dx = 0.0; else if (dx > 1.0) dx = 1.0; if (dy < 0.0) dy = 0.0; else if (dy > 1.0) dy = 1.0; - rp->drag.page.x = dx; - rp->drag.page.y = dy; + rp->drag->page.x = dx; + rp->drag->page.y = dy; #ifdef EDJE_CALC_CACHE rp->invalidate = 1; #endif @@ -2404,14 +2408,14 @@ _edje_recalc_do(ed); rp = _edje_real_part_recursive_get(ed, (char *)part); - if (!rp) + if (!rp || !rp->drag) { if (dx) *dx = 0; if (dy) *dy = 0; return; } - if (dx) *dx = rp->drag.page.x; - if (dy) *dy = rp->drag.page.y; + if (dx) *dx = rp->drag->page.x; + if (dy) *dy = rp->drag->page.y; } /** Steps the dragable x,y steps @@ -2434,18 +2438,19 @@ if ((!ed) || (!part)) return; rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return; - if (rp->drag.down.count > 0) return; - px = rp->drag.val.x; - py = rp->drag.val.y; - rp->drag.val.x += dx * rp->drag.step.x * rp->part->dragable.x; - rp->drag.val.y += dy * rp->drag.step.y * rp->part->dragable.y; - rp->drag.val.x = CLAMP (rp->drag.val.x, 0.0, 1.0); - rp->drag.val.y = CLAMP (rp->drag.val.y, 0.0, 1.0); - if ((px == rp->drag.val.x) && (py == rp->drag.val.y)) return; + if (!rp->drag) return; + if (rp->drag->down.count > 0) return; + px = rp->drag->val.x; + py = rp->drag->val.y; + rp->drag->val.x += dx * rp->drag->step.x * rp->part->dragable.x; + rp->drag->val.y += dy * rp->drag->step.y * rp->part->dragable.y; + rp->drag->val.x = CLAMP (rp->drag->val.x, 0.0, 1.0); + rp->drag->val.y = CLAMP (rp->drag->val.y, 0.0, 1.0); + if ((px == rp->drag->val.x) && (py == rp->drag->val.y)) return; #ifdef EDJE_CALC_CACHE rp->invalidate = 1; #endif - _edje_dragable_pos_set(rp->edje, rp, rp->drag.val.x, rp->drag.val.y); + _edje_dragable_pos_set(rp->edje, rp, rp->drag->val.x, rp->drag->val.y); _edje_emit(rp->edje, "drag,step", rp->part->name); } @@ -2469,18 +2474,19 @@ if ((!ed) || (!part)) return; rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return; - if (rp->drag.down.count > 0) return; - px = rp->drag.val.x; - py = rp->drag.val.y; - rp->drag.val.x += dx * rp->drag.page.x * rp->part->dragable.x; - rp->drag.val.y += dy * rp->drag.page.y * rp->part->dragable.y; - rp->drag.val.x = CLAMP (rp->drag.val.x, 0.0, 1.0); - rp->drag.val.y = CLAMP (rp->drag.val.y, 0.0, 1.0); - if ((px == rp->drag.val.x) && (py == rp->drag.val.y)) return; + if (!rp->drag) return; + if (rp->drag->down.count > 0) return; + px = rp->drag->val.x; + py = rp->drag->val.y; + rp->drag->val.x += dx * rp->drag->page.x * rp->part->dragable.x; + rp->drag->val.y += dy * rp->drag->page.y * rp->part->dragable.y; + rp->drag->val.x = CLAMP (rp->drag->val.x, 0.0, 1.0); + rp->drag->val.y = CLAMP (rp->drag->val.y, 0.0, 1.0); + if ((px == rp->drag->val.x) && (py == rp->drag->val.y)) return; #ifdef EDJE_CALC_CACHE rp->invalidate = 1; #endif - _edje_dragable_pos_set(rp->edje, rp, rp->drag.val.x, rp->drag.val.y); + _edje_dragable_pos_set(rp->edje, rp, rp->drag->val.x, rp->drag->val.y); _edje_emit(rp->edje, "drag,page", rp->part->name); } |
From: Enlightenment S. <no-...@en...> - 2009-08-11 13:07:56
|
Log: * edje: Free the Edje_Real_Part_Drag. Author: cedric Date: 2009-08-11 06:07:46 -0700 (Tue, 11 Aug 2009) New Revision: 41686 Modified: trunk/edje/src/lib/edje_load.c Modified: trunk/edje/src/lib/edje_load.c =================================================================== --- trunk/edje/src/lib/edje_load.c 2009-08-11 12:47:00 UTC (rev 41685) +++ trunk/edje/src/lib/edje_load.c 2009-08-11 13:07:46 UTC (rev 41686) @@ -849,6 +849,8 @@ if (rp->custom.description) _edje_collection_free_part_description_free(rp->custom.description, ed->file->free_strings); + free(rp->drag); + _edje_unref(rp->edje); free(rp); } |
From: Enlightenment S. <no-...@en...> - 2009-08-11 14:55:41
|
Log: * edje: Oops, fix drag. Author: cedric Date: 2009-08-11 07:55:26 -0700 (Tue, 11 Aug 2009) New Revision: 41691 Modified: trunk/edje/src/lib/edje_callbacks.c trunk/edje/src/lib/edje_load.c trunk/edje/src/lib/edje_private.h Modified: trunk/edje/src/lib/edje_callbacks.c =================================================================== --- trunk/edje/src/lib/edje_callbacks.c 2009-08-11 14:14:42 UTC (rev 41690) +++ trunk/edje/src/lib/edje_callbacks.c 2009-08-11 14:55:26 UTC (rev 41691) @@ -89,12 +89,12 @@ _edje_emit(ed, buf, rp->part->name); } - if (rp->drag && rp->drag->events_to) + if (rp->events_to) { int x = 0, y = 0; Edje_Real_Part *events; - events = rp->drag->events_to; + events = rp->events_to; evas_object_geometry_get(rp->object, &x, &y, NULL, NULL); if ((events->part->dragable.x) || (events->part->dragable.y)) @@ -121,48 +121,49 @@ #endif } _edje_recalc_do(ed); -/* - _edje_thaw(ed); - _edje_unref(ed); - _edje_ref(ed); - _edje_freeze(ed); -*/ + /* + _edje_thaw(ed); + _edje_unref(ed); + _edje_ref(ed); + _edje_freeze(ed); + */ rp = events; - { - double dx = 0.0, dy = 0.0; - int dir; + { + double dx = 0.0, dy = 0.0; + int dir; - dir = _edje_part_dragable_calc(ed, rp, &dx, &dy); - - if ((dx != rp->drag->val.x) || (dy != rp->drag->val.y)) - { - rp->drag->val.x = dx; - rp->drag->val.y = dy; - if (!ignored) - _edje_emit(ed, "drag", rp->part->name); - ed->dirty = 1; + dir = _edje_part_dragable_calc(ed, rp, &dx, &dy); + + if ((dx != rp->drag->val.x) || (dy != rp->drag->val.y)) + { + rp->drag->val.x = dx; + rp->drag->val.y = dy; + if (!ignored) + _edje_emit(ed, "drag", rp->part->name); + ed->dirty = 1; #ifdef EDJE_CALC_CACHE - rp->invalidate = 1; + rp->invalidate = 1; #endif - rp->drag->need_reset = 1; - _edje_recalc_do(ed); - } - } + rp->drag->need_reset = 1; + _edje_recalc_do(ed); + } + } } - if ((rp->part->dragable.x) || (rp->part->dragable.y)) + if (rp->drag) { if (rp->drag->down.count == 0) { if (rp->part->dragable.x) - rp->drag->down.x = ev->canvas.x; + rp->drag->down.x = ev->canvas.x; if (rp->part->dragable.y) - rp->drag->down.y = ev->canvas.y; + rp->drag->down.y = ev->canvas.y; if (!ignored) _edje_emit(ed, "drag,start", rp->part->name); } rp->drag->down.count++; } + if (rp->clicked_button == 0) { rp->clicked_button = ev->button; @@ -200,18 +201,18 @@ _edje_emit(ed, buf, rp->part->name); } - if (rp->drag) + if (rp->events_to) { - if (rp->drag->events_to) + rp = rp->events_to; + if (!ignored) { - rp = rp->drag->events_to; - if (!ignored) - { - snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); - _edje_emit(ed, buf, rp->part->name); - } + snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); + _edje_emit(ed, buf, rp->part->name); } + } + if (rp->drag) + { if (rp->drag->down.count > 0) { rp->drag->down.count--; @@ -255,7 +256,7 @@ ed = data; rp = evas_object_data_get(obj, "real_part"); if (!rp) return; - if (rp->drag && rp->drag->events_to) rp = rp->drag->events_to; + if (rp->events_to) rp = rp->events_to; ignored = rp->part->ignore_flags & ev->event_flags; Modified: trunk/edje/src/lib/edje_load.c =================================================================== --- trunk/edje/src/lib/edje_load.c 2009-08-11 14:14:42 UTC (rev 41690) +++ trunk/edje/src/lib/edje_load.c 2009-08-11 14:55:26 UTC (rev 41691) @@ -479,17 +479,17 @@ { if (rp->part->dragable.confine_id >= 0) rp->drag->confine_to = ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size]; + } - /* replay events for dragable */ - if (rp->part->dragable.events_id >= 0) - { - rp->drag->events_to = - ed->table_parts[rp->part->dragable.events_id % ed->table_parts_size]; - /* events_to may be used only with dragable */ - if (!rp->drag->events_to->part->dragable.x && - !rp->drag->events_to->part->dragable.y) - rp->drag->events_to = NULL; - } + /* replay events for dragable */ + if (rp->part->dragable.events_id >= 0) + { + rp->events_to = + ed->table_parts[rp->part->dragable.events_id % ed->table_parts_size]; + /* events_to may be used only with dragable */ + if (!rp->events_to->part->dragable.x && + !rp->events_to->part->dragable.y) + rp->events_to = NULL; } rp->swallow_params.min.w = 0; Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-08-11 14:14:42 UTC (rev 41690) +++ trunk/edje/src/lib/edje_private.h 2009-08-11 14:55:26 UTC (rev 41691) @@ -785,9 +785,8 @@ int x, y; // 8 } tmp; unsigned char need_reset : 1; // 4 - Edje_Real_Part *events_to; // 4 Edje_Real_Part *confine_to; // 4 -}; // 104 // FIME: make drag pointer to struct optional +}; // 104 struct _Edje_Real_Part { @@ -809,6 +808,7 @@ } swallow_params; // 28 // FIXME: only if type SWALLOW Edje_Real_Part_Drag *drag; // 4 + Edje_Real_Part *events_to; // 4 struct { Edje_Real_Part *source; // 4 @@ -856,8 +856,8 @@ #ifdef EDJE_CALC_CACHE unsigned char invalidate : 1; #endif -}; // 294 -// WITH EDJE_CALC_CACHE: 774 +}; // 298 +// WITH EDJE_CALC_CACHE: 778 struct _Edje_Running_Program { |
From: Enlightenment S. <no-...@en...> - 2009-08-12 09:27:19
|
Log: * edje: Reverting to recalc_do in edje smart resize. Note: A bug spotted in layout of box is the reason of this revert. From my understanding, layout require some property on the object to be correctly set. This is done during edje_recalc_single on the part. The layout fonction of evas would be called just after the resize. If we didn't do an edje_recalc_do, but an edje_recalc, the call to edje_recalc_single will be delayed and the layout property will not be set correctly. Author: cedric Date: 2009-08-12 02:27:09 -0700 (Wed, 12 Aug 2009) New Revision: 41698 Modified: trunk/edje/src/lib/edje_smart.c Modified: trunk/edje/src/lib/edje_smart.c =================================================================== --- trunk/edje/src/lib/edje_smart.c 2009-08-12 09:02:09 UTC (rev 41697) +++ trunk/edje/src/lib/edje_smart.c 2009-08-12 09:27:09 UTC (rev 41698) @@ -161,7 +161,7 @@ } // evas_object_resize(ed->clipper, ed->w, ed->h); ed->dirty = 1; - _edje_recalc(ed); + _edje_recalc_do(ed); _edje_emit(ed, "resize", NULL); } |
From: Enlightenment S. <no-...@en...> - 2009-08-12 14:13:30
|
Log: * edje: Starting refactor of edje_recalc_single. Author: cedric Date: 2009-08-12 07:13:17 -0700 (Wed, 12 Aug 2009) New Revision: 41706 Modified: trunk/edje/src/lib/edje_calc.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2009-08-12 13:06:44 UTC (rev 41705) +++ trunk/edje/src/lib/edje_calc.c 2009-08-12 14:13:17 UTC (rev 41706) @@ -270,327 +270,248 @@ } static void -_edje_part_recalc_single(Edje *ed, - Edje_Real_Part *ep, - Edje_Part_Description *desc, - Edje_Part_Description *chosen_desc, - Edje_Real_Part *rel1_to_x, - Edje_Real_Part *rel1_to_y, - Edje_Real_Part *rel2_to_x, - Edje_Real_Part *rel2_to_y, - Edje_Real_Part *confine_to, - Edje_Calc_Params *params, - int flags) +_edje_part_recalc_single_rel(Edje *ed, + Edje_Real_Part *ep, + Edje_Part_Description *desc, + Edje_Real_Part *rel1_to_x, + Edje_Real_Part *rel1_to_y, + Edje_Real_Part *rel2_to_x, + Edje_Real_Part *rel2_to_y, + Edje_Calc_Params *params, + int flags) { - int minw = 0, minh = 0, maxw = 0, maxh = 0; - double sc; - - flags = FLAG_XY; - - sc = ed->scale; - if (sc == 0.0) sc = _edje_scale; -// if (flags & FLAG_X) - { - minw = desc->min.w; - if (ep->part->scale) minw = (int)(((double)minw) * sc); - if (ep->swallow_params.min.w > desc->min.w) - minw = ep->swallow_params.min.w; - - /* XXX TODO: remove need of EDJE_INF_MAX_W, see edje_util.c */ - if ((ep->swallow_params.max.w <= 0) || - (ep->swallow_params.max.w == EDJE_INF_MAX_W)) - { - maxw = desc->max.w; - if (maxw > 0) - { - if (ep->part->scale) maxw = (int)(((double)maxw) * sc); - if (maxw < 1) maxw = 1; - } - } - else - { - if (desc->max.w <= 0) - maxw = ep->swallow_params.max.w; - else - { - maxw = desc->max.w; - if (maxw > 0) - { - if (ep->part->scale) maxw = (int)(((double)maxw) * sc); - if (maxw < 1) maxw = 1; - } - if (ep->swallow_params.max.w < maxw) - maxw = ep->swallow_params.max.w; - } - } - if (maxw >= 0) - { - if (maxw < minw) maxw = minw; - } - } -// if (flags & FLAG_Y) - { - minh = desc->min.h; - if (ep->part->scale) minh = (int)(((double)minh) * sc); - if (ep->swallow_params.min.h > desc->min.h) - minh = ep->swallow_params.min.h; - - /* XXX TODO: remove need of EDJE_INF_MAX_H, see edje_util.c */ - if ((ep->swallow_params.max.h <= 0) || - (ep->swallow_params.max.h == EDJE_INF_MAX_H)) - { - maxh = desc->max.h; - if (maxh > 0) - { - if (ep->part->scale) maxh = (int)(((double)maxh) * sc); - if (maxh < 1) maxh = 1; - } - } - else - { - if (desc->max.h <= 0) - maxh = ep->swallow_params.max.h; - else - { - maxh = desc->max.h; - if (maxh > 0) - { - if (ep->part->scale) maxh = (int)(((double)maxh) * sc); - if (maxh < 1) maxh = 1; - } - if (ep->swallow_params.max.h < maxh) - maxh = ep->swallow_params.max.h; - } - } - if (maxh >= 0) - { - if (maxh < minh) maxh = minh; - } - } - /* relative coords of top left & bottom right */ if (flags & FLAG_X) { if (rel1_to_x) params->x = desc->rel1.offset_x + - rel1_to_x->x + (desc->rel1.relative_x * rel1_to_x->w); + rel1_to_x->x + (desc->rel1.relative_x * rel1_to_x->w); else params->x = desc->rel1.offset_x + - (desc->rel1.relative_x * ed->w); + (desc->rel1.relative_x * ed->w); if (rel2_to_x) params->w = desc->rel2.offset_x + - rel2_to_x->x + (desc->rel2.relative_x * rel2_to_x->w) - - params->x + 1; + rel2_to_x->x + (desc->rel2.relative_x * rel2_to_x->w) - + params->x + 1; else params->w = desc->rel2.offset_x + - (desc->rel2.relative_x * ed->w) - - params->x + 1; + (desc->rel2.relative_x * ed->w) - + params->x + 1; } if (flags & FLAG_Y) { if (rel1_to_y) params->y = desc->rel1.offset_y + - rel1_to_y->y + (desc->rel1.relative_y * rel1_to_y->h); + rel1_to_y->y + (desc->rel1.relative_y * rel1_to_y->h); else params->y = desc->rel1.offset_y + - (desc->rel1.relative_y * ed->h); + (desc->rel1.relative_y * ed->h); if (rel2_to_y) params->h = desc->rel2.offset_y + - rel2_to_y->y + (desc->rel2.relative_y * rel2_to_y->h) - + rel2_to_y->y + (desc->rel2.relative_y * rel2_to_y->h) - params->y + 1; else params->h = desc->rel2.offset_y + - (desc->rel2.relative_y * ed->h) - - params->y + 1; + (desc->rel2.relative_y * ed->h) - + params->y + 1; } +} - /* aspect */ - if (((flags | ep->calculated) & FLAG_XY) == FLAG_XY) +static void +_edje_part_recalc_single_aspect(Edje_Real_Part *ep, + Edje_Part_Description *desc, + Edje_Calc_Params *params, + int *minw, int *minh, + int *maxw, int *maxh) +{ + int apref = -10; + double aspect, amax, amin; + double new_w = 0, new_h = 0, want_x, want_y, want_w, want_h; + + if (params->h <= 0) aspect = 999999.0; + else 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; + want_x = params->x; + want_w = new_w = params->w; + + want_y = params->y; + want_h = new_h = params->h; + + if ((amin > 0.0) && (amax > 0.0)) { - int apref = -10; - double aspect, amax, amin; - double new_w = 0, new_h = 0, want_x, want_y, want_w, want_h; + apref = desc->aspect.prefer; + 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; + } + } + switch (apref) + { + case EDJE_ASPECT_PREFER_NONE: + /* keep both dimensions in check */ + /* adjust for min aspect (width / height) */ + if ((amin > 0.0) && (aspect < amin)) + { + new_h = (params->w / amin); + new_w = (params->h * amin); + } + /* adjust for max aspect (width / height) */ + if ((amax > 0.0) && (aspect > amax)) + { + new_h = (params->w / amax); + new_w = (params->h * amax); + } + if ((amax > 0.0) && (new_w < params->w)) + { + new_w = params->w; + new_h = params->w / amax; + } + if ((amax > 0.0) && (new_h < params->h)) + { + new_w = params->h * amax; + new_h = params->h; + } + break; + /* prefer vertical size as determiner */ + case EDJE_ASPECT_PREFER_VERTICAL: + /* keep both dimensions in check */ + /* adjust for max aspect (width / height) */ + if ((amax > 0.0) && (aspect > amax)) + new_w = (params->h * amax); + /* adjust for min aspect (width / height) */ + if ((amin > 0.0) && (aspect < amin)) + new_w = (params->h * amin); + break; + /* prefer horizontal size as determiner */ + case EDJE_ASPECT_PREFER_HORIZONTAL: + /* keep both dimensions in check */ + /* adjust for max aspect (width / height) */ + if ((amax > 0.0) && (aspect > amax)) + new_h = (params->w / amax); + /* adjust for min aspect (width / height) */ + if ((amin > 0.0) && (aspect < amin)) + new_h = (params->w / amin); + break; + case EDJE_ASPECT_PREFER_BOTH: + /* keep both dimensions in check */ + /* adjust for max aspect (width / height) */ + if ((amax > 0.0) && (aspect > amax)) + { + new_w = (params->h * amax); + new_h = (params->w / amax); + } + /* adjust for min aspect (width / height) */ + if ((amin > 0.0) && (aspect < amin)) + { + new_w = (params->h * amin); + new_h = (params->w / amin); + } + break; + default: + break; + } - if (params->h <= 0) aspect = 999999.0; - else 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; - want_x = params->x; - want_w = new_w = params->w; - - want_y = params->y; - want_h = new_h = params->h; - - if ((amin > 0.0) && (amax > 0.0)) - { - apref = desc->aspect.prefer; - 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; - } - } - switch (apref) - { - case EDJE_ASPECT_PREFER_NONE: - /* keep both dimensions in check */ - /* adjust for min aspect (width / height) */ - if ((amin > 0.0) && (aspect < amin)) - { - new_h = (params->w / amin); - new_w = (params->h * amin); - } - /* adjust for max aspect (width / height) */ - if ((amax > 0.0) && (aspect > amax)) - { - new_h = (params->w / amax); - new_w = (params->h * amax); - } - if ((amax > 0.0) && (new_w < params->w)) - { - new_w = params->w; - new_h = params->w / amax; - } - if ((amax > 0.0) && (new_h < params->h)) - { - new_w = params->h * amax; - new_h = params->h; - } - break; - /* prefer vertical size as determiner */ - case EDJE_ASPECT_PREFER_VERTICAL: - /* keep both dimensions in check */ - /* adjust for max aspect (width / height) */ - if ((amax > 0.0) && (aspect > amax)) - new_w = (params->h * amax); - /* adjust for min aspect (width / height) */ - if ((amin > 0.0) && (aspect < amin)) - new_w = (params->h * amin); - break; - /* prefer horizontal size as determiner */ - case EDJE_ASPECT_PREFER_HORIZONTAL: - /* keep both dimensions in check */ - /* adjust for max aspect (width / height) */ - if ((amax > 0.0) && (aspect > amax)) - new_h = (params->w / amax); - /* adjust for min aspect (width / height) */ - if ((amin > 0.0) && (aspect < amin)) - new_h = (params->w / amin); - break; - case EDJE_ASPECT_PREFER_BOTH: - /* keep both dimensions in check */ - /* adjust for max aspect (width / height) */ - if ((amax > 0.0) && (aspect > amax)) - { - new_w = (params->h * amax); - new_h = (params->w / amax); - } - /* adjust for min aspect (width / height) */ - if ((amin > 0.0) && (aspect < amin)) - { - new_w = (params->h * amin); - new_h = (params->w / amin); - } - break; - default: - break; - } - - if (!((amin > 0.0) && (amax > 0.0) && (apref == EDJE_ASPECT_PREFER_NONE))) - { - 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; - } - - /* do real adjustment */ - if (apref == EDJE_ASPECT_PREFER_BOTH) - { - if (amin == 0.0) amin = amax; - if (amin != 0.0) - { - /* fix h and vary w */ - if (new_w > params->w) - { - // params->w = new_w; - // EXCEEDS BOUNDS in W - new_h = (params->w / amin); - new_w = params->w; - if (new_h > params->h) - { - new_h = params->h; - new_w = (params->h * amin); - } - } - /* fix w and vary h */ - else - { - // params->h = new_h; - // EXCEEDS BOUNDS in H - new_h = params->h; - new_w = (params->h * amin); - if (new_w > params->w) - { - new_h = (params->w / amin); - new_w = params->w; - } - } - params->w = new_w; - params->h = new_h; - } - } - } - if (apref != EDJE_ASPECT_PREFER_BOTH) - { - if ((amin > 0.0) && (amax > 0.0) && (apref == EDJE_ASPECT_PREFER_NONE)) - { - params->w = new_w; - params->h = new_h; - } - else if ((params->h - new_h) > (params->w - new_w)) - { - if (params->h < new_h) - params->h = new_h; - else if (params->h > new_h) - params->h = new_h; - if (apref == EDJE_ASPECT_PREFER_VERTICAL) - params->w = new_w; - } - else - { - if (params->w < new_w) - params->w = new_w; - else if (params->w > new_w) - params->w = new_w; - if (apref == EDJE_ASPECT_PREFER_HORIZONTAL) - params->h = new_h; - } - } - params->x = want_x + ((want_w - params->w) * desc->align.x); - params->y = want_y + ((want_h - params->h) * desc->align.y); + if (!((amin > 0.0) && (amax > 0.0) && (apref == EDJE_ASPECT_PREFER_NONE))) + { + 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; + } + + /* do real adjustment */ + if (apref == EDJE_ASPECT_PREFER_BOTH) + { + if (amin == 0.0) amin = amax; + if (amin != 0.0) + { + /* fix h and vary w */ + if (new_w > params->w) + { + // params->w = new_w; + // EXCEEDS BOUNDS in W + new_h = (params->w / amin); + new_w = params->w; + if (new_h > params->h) + { + new_h = params->h; + new_w = (params->h * amin); + } + } + /* fix w and vary h */ + else + { + // params->h = new_h; + // EXCEEDS BOUNDS in H + new_h = params->h; + new_w = (params->h * amin); + if (new_w > params->w) + { + new_h = (params->w / amin); + new_w = params->w; + } + } + params->w = new_w; + params->h = new_h; + } + } } - - /* size step */ + if (apref != EDJE_ASPECT_PREFER_BOTH) + { + if ((amin > 0.0) && (amax > 0.0) && (apref == EDJE_ASPECT_PREFER_NONE)) + { + params->w = new_w; + params->h = new_h; + } + else if ((params->h - new_h) > (params->w - new_w)) + { + if (params->h < new_h) + params->h = new_h; + else if (params->h > new_h) + params->h = new_h; + if (apref == EDJE_ASPECT_PREFER_VERTICAL) + params->w = new_w; + } + else + { + if (params->w < new_w) + params->w = new_w; + else if (params->w > new_w) + params->w = new_w; + if (apref == EDJE_ASPECT_PREFER_HORIZONTAL) + params->h = new_h; + } + } + params->x = want_x + ((want_w - params->w) * desc->align.x); + params->y = want_y + ((want_h - params->h) * desc->align.y); +} + +static void +_edje_part_recalc_single_step(Edje_Part_Description *desc, + Edje_Calc_Params *params, + int flags) +{ if (flags & FLAG_X) { if (desc->step.x > 0) @@ -602,8 +523,7 @@ new_w = desc->step.x * steps; if (params->w > new_w) { - params->x = params->x + - ((params->w - new_w) * desc->align.x); + params->x += ((params->w - new_w) * desc->align.x); params->w = new_w; } } @@ -619,14 +539,23 @@ new_h = desc->step.y * steps; if (params->h > new_h) { - params->y = params->y + - ((params->h - new_h) * desc->align.y); + params->y += ((params->h - new_h) * desc->align.y); params->h = new_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)) +} + +static void +_edje_part_recalc_single_textblock(double sc, + Edje *ed, + Edje_Real_Part *ep, + Edje_Part_Description *chosen_desc, + Edje_Calc_Params *params, + int *minw, int *minh, + int *maxw, int *maxh) +{ + if (chosen_desc) { Evas_Coord tw, th, ins_l, ins_r, ins_t, ins_b; const char *text = ""; @@ -705,11 +634,11 @@ mh = ins_t + th + ins_b; // if (chosen_desc->text.min_x) { - if (mw > minw) minw = mw; + if (mw > *minw) *minw = mw; } // if (chosen_desc->text.min_y) { - if (mh > minh) minh = mh; + if (mh > *minh) *minh = mh; } } } @@ -730,19 +659,34 @@ mh = ins_t + th + ins_b; if (chosen_desc->text.max_x) { - if (mw > maxw) maxw = mw; + if (mw > *maxw) *maxw = mw; } if (chosen_desc->text.max_y) { - if (mh > maxw) maxh = mh; + if (mh > *maxw) *maxh = mh; } } } - else if ((chosen_desc) && (ep->part->type == EDJE_PART_TYPE_TEXT)) +} + +static void +_edje_part_recalc_single_text(double sc, + Edje *ed, + Edje_Real_Part *ep, + Edje_Part_Description *desc, + Edje_Part_Description *chosen_desc, + Edje_Calc_Params *params, + int *minw, int *minh, + int *maxw, int *maxh) +{ + const char *font; + char *sfont = NULL; + int size; + + if (chosen_desc) { const char *text; const char *font; - char *sfont = NULL; int size; Evas_Coord tw, th; int inlined_font = 0; @@ -858,57 +802,52 @@ int l, r; evas_object_text_style_pad_get(ep->object, &l, &r, NULL, NULL); mw = tw + l + r; - if ((maxw < 0) || (mw < maxw)) maxw = mw; + if ((*maxw < 0) || (mw < *maxw)) *maxw = mw; } if (chosen_desc->text.max_y) { int t, b; evas_object_text_style_pad_get(ep->object, NULL, NULL, &t, &b); mh = th + t + b; - if ((maxh < 0) || (mh < maxh)) maxh = mh; + if ((*maxh < 0) || (mh < *maxh)) *maxh = mh; } if (chosen_desc->text.min_x) { int l, r; evas_object_text_style_pad_get(ep->object, &l, &r, NULL, NULL); mw = tw + l + r; - if (mw > minw) minw = mw; + if (mw > *minw) *minw = mw; } if (chosen_desc->text.min_y) { int t, b; evas_object_text_style_pad_get(ep->object, NULL, NULL, &t, &b); mh = th + t + b; - if (mh > minh) minh = mh; + if (mh > *minh) *minh = mh; } } if (sfont) free(sfont); } - if (ep->part->type == EDJE_PART_TYPE_TEXT) - { - const char *font; - char *sfont = NULL; - int size; + /* FIXME: Do we really need to call it twice if chosen_desc ? */ + font = _edje_text_class_font_get(ed, desc, &size, &sfont); + free(sfont); + params->type.text.size = size; +} - font = _edje_text_class_font_get(ed, desc, &size, &sfont); - free(sfont); - params->type.text.size = size; - } - /* rememebr what our size is BEFORE we go limit it */ - params->req.x = params->x; - params->req.y = params->y; - params->req.w = params->w; - params->req.h = params->h; - /* adjust for min size */ +static void +_edje_part_recalc_single_min(Edje_Part_Description *desc, + Edje_Calc_Params *params, + int minw, int minh, + int flags) +{ if (flags & FLAG_X) { if (minw >= 0) { if (params->w < minw) { - params->x = params->x + - ((params->w - minw) * desc->align.x); + params->x += ((params->w - minw) * desc->align.x); params->w = minw; } } @@ -919,13 +858,19 @@ { if (params->h < minh) { - params->y = params->y + - ((params->h - minh) * desc->align.y); + params->y += ((params->h - minh) * desc->align.y); params->h = minh; } } } - /* adjust for max size */ +} + +static void +_edje_part_recalc_single_max(Edje_Part_Description *desc, + Edje_Calc_Params *params, + int maxw, int maxh, + int flags) +{ if (flags & FLAG_X) { if (maxw >= 0) @@ -950,110 +895,122 @@ } } } +} - if (ep->drag) +static void +_edje_part_recalc_single_drag(Edje_Real_Part *ep, + Edje_Real_Part *confine_to, + Edje_Calc_Params *params, + int minw, int minh, + int maxw, int maxh, + int flags) +{ + /* confine */ + if (confine_to) { - /* confine */ - if (confine_to) + int offset; + int step; + double v; + + /* complex dragable params */ + if (flags & FLAG_X) { - int offset; - int step; - double v; + v = ep->drag->size.x * confine_to->w; - /* complex dragable params */ - if (flags & FLAG_X) + if ((minw > 0) && (v < minw)) params->w = minw; + else if ((maxw >= 0) && (v > maxw)) params->w = maxw; + else params->w = v; + + offset = (ep->drag->x * (confine_to->w - params->w)) + + ep->drag->tmp.x; + if (ep->part->dragable.step_x > 0) { - v = ep->drag->size.x * confine_to->w; - - if ((minw > 0) && (v < minw)) params->w = minw; - else if ((maxw >= 0) && (v > maxw)) params->w = maxw; - else params->w = v; - - offset = (ep->drag->x * (confine_to->w - params->w)) + - ep->drag->tmp.x; - if (ep->part->dragable.step_x > 0) - { - params->x = confine_to->x + - ((offset / ep->part->dragable.step_x) * ep->part->dragable.step_x); - } - else if (ep->part->dragable.count_x > 0) - { - step = (confine_to->w - params->w) / ep->part->dragable.count_x; - if (step < 1) step = 1; - params->x = confine_to->x + - ((offset / step) * step); - } - params->req_drag.x = params->x; - params->req_drag.w = params->w; + params->x = confine_to->x + + ((offset / ep->part->dragable.step_x) * ep->part->dragable.step_x); } - if (flags & FLAG_Y) + else if (ep->part->dragable.count_x > 0) { - v = ep->drag->size.y * confine_to->h; + step = (confine_to->w - params->w) / ep->part->dragable.count_x; + if (step < 1) step = 1; + params->x = confine_to->x + + ((offset / step) * step); + } + params->req_drag.x = params->x; + params->req_drag.w = params->w; + } + if (flags & FLAG_Y) + { + v = ep->drag->size.y * confine_to->h; - if ((minh > 0) && (v < minh)) params->h = minh; - else if ((maxh >= 0) && (v > maxh)) params->h = maxh; - else params->h = v; + if ((minh > 0) && (v < minh)) params->h = minh; + else if ((maxh >= 0) && (v > maxh)) params->h = maxh; + else params->h = v; - offset = (ep->drag->y * (confine_to->h - params->h)) + - ep->drag->tmp.y; - if (ep->part->dragable.step_y > 0) - { - params->y = confine_to->y + - ((offset / ep->part->dragable.step_y) * ep->part->dragable.step_y); - } - else if (ep->part->dragable.count_y > 0) - { - step = (confine_to->h - params->h) / ep->part->dragable.count_y; - if (step < 1) step = 1; - params->y = confine_to->y + - ((offset / step) * step); - } - params->req_drag.y = params->y; - params->req_drag.h = params->h; + offset = (ep->drag->y * (confine_to->h - params->h)) + + ep->drag->tmp.y; + if (ep->part->dragable.step_y > 0) + { + params->y = confine_to->y + + ((offset / ep->part->dragable.step_y) * ep->part->dragable.step_y); } - /* limit to confine */ - if (flags & FLAG_X) + else if (ep->part->dragable.count_y > 0) { - if (params->x < confine_to->x) - { - params->x = confine_to->x; - } - if ((params->x + params->w) > (confine_to->x + confine_to->w)) - { - params->x = confine_to->x + (confine_to->w - params->w); - } + step = (confine_to->h - params->h) / ep->part->dragable.count_y; + if (step < 1) step = 1; + params->y = confine_to->y + + ((offset / step) * step); } - if (flags & FLAG_Y) + params->req_drag.y = params->y; + params->req_drag.h = params->h; + } + /* limit to confine */ + if (flags & FLAG_X) + { + if (params->x < confine_to->x) { - if (params->y < confine_to->y) - { - params->y = confine_to->y; - } - if ((params->y + params->h) > (confine_to->y + confine_to->h)) - { - params->y = confine_to->y + (confine_to->h - params->h); - } + params->x = confine_to->x; } + if ((params->x + params->w) > (confine_to->x + confine_to->w)) + { + params->x = confine_to->x + (confine_to->w - params->w); + } } - else + if (flags & FLAG_Y) { - /* simple dragable params */ - if (flags & FLAG_X) + if (params->y < confine_to->y) { - params->x += ep->drag->x + ep->drag->tmp.x; - params->req_drag.x = params->x; - params->req_drag.w = params->w; + params->y = confine_to->y; } - if (flags & FLAG_Y) + if ((params->y + params->h) > (confine_to->y + confine_to->h)) { - params->y += ep->drag->y + ep->drag->tmp.y; - params->req_drag.y = params->y; - params->req_drag.h = params->h; + params->y = confine_to->y + (confine_to->h - params->h); } } } + else + { + /* simple dragable params */ + if (flags & FLAG_X) + { + params->x += ep->drag->x + ep->drag->tmp.x; + params->req_drag.x = params->x; + params->req_drag.w = params->w; + } + if (flags & FLAG_Y) + { + params->y += ep->drag->y + ep->drag->tmp.y; + params->req_drag.y = params->y; + params->req_drag.h = params->h; + } + } +} - /* fill */ +static void +_edje_part_recalc_single_fill(Edje_Real_Part *ep, + Edje_Part_Description *desc, + Edje_Calc_Params *params, + int flags) +{ if (ep->part->type == EDJE_PART_TYPE_GRADIENT && desc->gradient.use_rel && (!desc->gradient.type || !strcmp(desc->gradient.type, "linear"))) { int x2, y2; @@ -1129,42 +1086,175 @@ params->fill.angle = desc->fill.angle; params->fill.spread = desc->fill.spread; } - /* colors */ - params->color.r = desc->color.r; - params->color.g = desc->color.g; - params->color.b = desc->color.b; - params->color.a = desc->color.a; - params->color2.r = desc->color2.r; - params->color2.g = desc->color2.g; - params->color2.b = desc->color2.b; - params->color2.a = desc->color2.a; - params->color3.r = desc->color3.r; - params->color3.g = desc->color3.g; - params->color3.b = desc->color3.b; - params->color3.a = desc->color3.a; +} +static void +_edje_part_recalc_single_min_max(double sc, + Edje_Real_Part *ep, + Edje_Part_Description *desc, + int *minw, int *minh, + int *maxw, int *maxh, + int flags) +{ +// if (flags & FLAG_X) + { + *minw = desc->min.w; + if (ep->part->scale) *minw = (int)(((double)*minw) * sc); + if (ep->swallow_params.min.w > desc->min.w) + *minw = ep->swallow_params.min.w; + + /* XXX TODO: remove need of EDJE_INF_MAX_W, see edje_util.c */ + if ((ep->swallow_params.max.w <= 0) || + (ep->swallow_params.max.w == EDJE_INF_MAX_W)) + { + *maxw = desc->max.w; + if (*maxw > 0) + { + if (ep->part->scale) *maxw = (int)(((double)*maxw) * sc); + if (*maxw < 1) *maxw = 1; + } + } + else + { + if (desc->max.w <= 0) + *maxw = ep->swallow_params.max.w; + else + { + *maxw = desc->max.w; + if (maxw > 0) + { + if (ep->part->scale) *maxw = (int)(((double)*maxw) * sc); + if (*maxw < 1) *maxw = 1; + } + if (ep->swallow_params.max.w < *maxw) + *maxw = ep->swallow_params.max.w; + } + } + if (*maxw >= 0) + { + if (*maxw < *minw) *maxw = *minw; + } + } +// if (flags & FLAG_Y) + { + *minh = desc->min.h; + if (ep->part->scale) *minh = (int)(((double)*minh) * sc); + if (ep->swallow_params.min.h > desc->min.h) + *minh = ep->swallow_params.min.h; + + /* XXX TODO: remove need of EDJE_INF_MAX_H, see edje_util.c */ + if ((ep->swallow_params.max.h <= 0) || + (ep->swallow_params.max.h == EDJE_INF_MAX_H)) + { + *maxh = desc->max.h; + if (*maxh > 0) + { + if (ep->part->scale) *maxh = (int)(((double)*maxh) * sc); + if (*maxh < 1) *maxh = 1; + } + } + else + { + if (desc->max.h <= 0) + *maxh = ep->swallow_params.max.h; + else + { + *maxh = desc->max.h; + if (*maxh > 0) + { + if (ep->part->scale) *maxh = (int)(((double)*maxh) * sc); + if (*maxh < 1) *maxh = 1; + } + if (ep->swallow_params.max.h < *maxh) + *maxh = ep->swallow_params.max.h; + } + } + if (*maxh >= 0) + { + if (*maxh < *minh) *maxh = *minh; + } + } +} + +static void +_edje_part_recalc_single(Edje *ed, + Edje_Real_Part *ep, + Edje_Part_Description *desc, + Edje_Part_Description *chosen_desc, + Edje_Real_Part *rel1_to_x, + Edje_Real_Part *rel1_to_y, + Edje_Real_Part *rel2_to_x, + Edje_Real_Part *rel2_to_y, + Edje_Real_Part *confine_to, + Edje_Calc_Params *params, + int flags) +{ + Edje_Color_Class *cc = NULL; + int minw = 0, minh = 0, maxw = 0, maxh = 0; + double sc; + + flags = FLAG_XY; + + sc = ed->scale; + if (sc == 0.0) sc = _edje_scale; + _edje_part_recalc_single_min_max(sc, ep, desc, &minw, &minh, &maxw, &maxh, flags); + + /* relative coords of top left & bottom right */ + _edje_part_recalc_single_rel(ed, ep, desc, rel1_to_x, rel1_to_y, rel2_to_x, rel2_to_y, params, flags); + + /* aspect */ + if (((flags | ep->calculated) & FLAG_XY) == FLAG_XY) + _edje_part_recalc_single_aspect(ep, desc, params, &minw, &minh, &maxw, &maxh); + + /* size step */ + _edje_part_recalc_single_step(desc, params, flags); + + /* if we have text that wants to make the min size the text size... */ + if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK) + _edje_part_recalc_single_textblock(sc, ed, ep, chosen_desc, params, &minw, &minh, &maxw, &maxh); + else if (ep->part->type == EDJE_PART_TYPE_TEXT) + _edje_part_recalc_single_text(sc, ed, ep, desc, chosen_desc, params, &minw, &minh, &maxw, &maxh); + + /* remember what our size is BEFORE we go limit it */ + params->req.x = params->x; + params->req.y = params->y; + params->req.w = params->w; + params->req.h = params->h; + + /* adjust for min size */ + _edje_part_recalc_single_min(desc, params, minw, minh, flags); + + /* adjust for max size */ + _edje_part_recalc_single_max(desc, params, maxw, maxh, flags); + + /* take care of dragable part */ + if (ep->drag) + _edje_part_recalc_single_drag(ep, confine_to, params, minw, minh, maxw, maxh, flags); + + /* fill */ + if (ep->part->type == EDJE_PART_TYPE_IMAGE || + ep->part->type == EDJE_PART_TYPE_GRADIENT) + _edje_part_recalc_single_fill(ep, desc, params, flags); + + /* colors */ if ((desc->color_class) && (*desc->color_class)) + cc = _edje_color_class_find(ed, desc->color_class); + + if (cc) { - Edje_Color_Class *cc; - - cc = _edje_color_class_find(ed, desc->color_class); - if (cc) - { - params->color.r = (((int)cc->r + 1) * desc->color.r) >> 8; - params->color.g = (((int)cc->g + 1) * desc->color.g) >> 8; - params->color.b = (((int)cc->b + 1) * desc->color.b) >> 8; - params->color.a = (((int)cc->a + 1) * desc->color.a) >> 8; - params->color2.r = (((int)cc->r2 + 1) * desc->color2.r) >> 8; - params->color2.g = (((int)cc->g2 + 1) * desc->color2.g) >> 8; - params->color2.b = (((int)cc->b2 + 1) * desc->color2.b) >> 8; - params->color2.a = (((int)cc->a2 + 1) * desc->color2.a) >> 8; - params->color3.r = (((int)cc->r3 + 1) * desc->color3.r) >> 8; - params->color3.g = (((int)cc->g3 + 1) * desc->color3.g) >> 8; - params->color3.b = (((int)cc->b3 + 1) * desc->color3.b) >> 8; - params->color3.a = (((int)cc->a3 + 1) * desc->color3.a) >> 8; - } + params->color.r = (((int)cc->r + 1) * desc->color.r) >> 8; + params->color.g = (((int)cc->g + 1) * desc->color.g) >> 8; + params->color.b = (((int)cc->b + 1) * desc->color.b) >> 8; + params->color.a = (((int)cc->a + 1) * desc->color.a) >> 8; } + else + { + params->color.r = desc->color.r; + params->color.g = desc->color.g; + params->color.b = desc->color.b; + params->color.a = desc->color.a; + } /* visible */ params->visible = desc->visible; @@ -1200,6 +1290,30 @@ params->type.text.align.y = desc->text.align.y; } params->type.text.elipsis = desc->text.elipsis; + + /* text colors */ + if (cc) + { + params->color2.r = (((int)cc->r2 + 1) * desc->color2.r) >> 8; + params->color2.g = (((int)cc->g2 + 1) * desc->color2.g) >> 8; + params->color2.b = (((int)cc->b2 + 1) * desc->color2.b) >> 8; + params->color2.a = (((int)cc->a2 + 1) * desc->color2.a) >> 8; + params->color3.r = (((int)cc->r3 + 1) * desc->color3.r) >> 8; + params->color3.g = (((int)cc->g3 + 1) * desc->color3.g) >> 8; + params->color3.b = (((int)cc->b3 + 1) * desc->color3.b) >> 8; + params->color3.a = (((int)cc->a3 + 1) * desc->color3.a) >> 8; + } + else + { + params->color2.r = desc->color2.r; + params->color2.g = desc->color2.g; + params->color2.b = desc->color2.b; + params->color2.a = desc->color2.a; + params->color3.r = desc->color3.r; + params->color3.g = desc->color3.g; + params->color3.b = desc->color3.b; + params->color3.a = desc->color3.a; + } break; case EDJE_PART_TYPE_RECTANGLE: case EDJE_PART_TYPE_BOX: |
From: Enlightenment S. <no-...@en...> - 2009-08-13 16:14:07
|
Log: * edje_calc: Cleanup calc structure. Author: cedric Date: 2009-08-13 09:13:49 -0700 (Thu, 13 Aug 2009) New Revision: 41744 Modified: trunk/edje/src/lib/edje_calc.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_text.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2009-08-13 15:42:30 UTC (rev 41743) +++ trunk/edje/src/lib/edje_calc.c 2009-08-13 16:13:49 UTC (rev 41744) @@ -1295,25 +1295,25 @@ /* text colors */ if (cc) { - params->color2.r = (((int)cc->r2 + 1) * desc->color2.r) >> 8; - params->color2.g = (((int)cc->g2 + 1) * desc->color2.g) >> 8; - params->color2.b = (((int)cc->b2 + 1) * desc->color2.b) >> 8; - params->color2.a = (((int)cc->a2 + 1) * desc->color2.a) >> 8; - params->color3.r = (((int)cc->r3 + 1) * desc->color3.r) >> 8; - params->color3.g = (((int)cc->g3 + 1) * desc->color3.g) >> 8; - params->color3.b = (((int)cc->b3 + 1) * desc->color3.b) >> 8; - params->color3.a = (((int)cc->a3 + 1) * desc->color3.a) >> 8; + params->type.text.color2.r = (((int)cc->r2 + 1) * desc->color2.r) >> 8; + params->type.text.color2.g = (((int)cc->g2 + 1) * desc->color2.g) >> 8; + params->type.text.color2.b = (((int)cc->b2 + 1) * desc->color2.b) >> 8; + params->type.text.color2.a = (((int)cc->a2 + 1) * desc->color2.a) >> 8; + params->type.text.color3.r = (((int)cc->r3 + 1) * desc->color3.r) >> 8; + params->type.text.color3.g = (((int)cc->g3 + 1) * desc->color3.g) >> 8; + params->type.text.color3.b = (((int)cc->b3 + 1) * desc->color3.b) >> 8; + params->type.text.color3.a = (((int)cc->a3 + 1) * desc->color3.a) >> 8; } else { - params->color2.r = desc->color2.r; - params->color2.g = desc->color2.g; - params->color2.b = desc->color2.b; - params->color2.a = desc->color2.a; - params->color3.r = desc->color3.r; - params->color3.g = desc->color3.g; - params->color3.b = desc->color3.b; - params->color3.a = desc->color3.a; + params->type.text.color2.r = desc->color2.r; + params->type.text.color2.g = desc->color2.g; + params->type.text.color2.b = desc->color2.b; + params->type.text.color2.a = desc->color2.a; + params->type.text.color3.r = desc->color3.r; + params->type.text.color3.g = desc->color3.g; + params->type.text.color3.b = desc->color3.b; + params->type.text.color3.a = desc->color3.a; } break; case EDJE_PART_TYPE_RECTANGLE: @@ -1772,15 +1772,15 @@ case EDJE_PART_TYPE_TEXT: p3->type.text.size = INTP(p1->type.text.size, p2->type.text.size, pos); case EDJE_PART_TYPE_TEXTBLOCK: - p3->color2.r = INTP(p1->color2.r, p2->color2.r, pos); - p3->color2.g = INTP(p1->color2.g, p2->color2.g, pos); - p3->color2.b = INTP(p1->color2.b, p2->color2.b, pos); - p3->color2.a = INTP(p1->color2.a, p2->color2.a, pos); + p3->type.text.color2.r = INTP(p1->type.text.color2.r, p2->type.text.color2.r, pos); + p3->type.text.color2.g = INTP(p1->type.text.color2.g, p2->type.text.color2.g, pos); + p3->type.text.color2.b = INTP(p1->type.text.color2.b, p2->type.text.color2.b, pos); + p3->type.text.color2.a = INTP(p1->type.text.color2.a, p2->type.text.color2.a, pos); - p3->color3.r = INTP(p1->color3.r, p2->color3.r, pos); - p3->color3.g = INTP(p1->color3.g, p2->color3.g, pos); - p3->color3.b = INTP(p1->color3.b, p2->color3.b, pos); - p3->color3.a = INTP(p1->color3.a, p2->color3.a, pos); + p3->type.text.color3.r = INTP(p1->type.text.color3.r, p2->type.text.color3.r, pos); + p3->type.text.color3.g = INTP(p1->type.text.color3.g, p2->type.text.color3.g, pos); + p3->type.text.color3.b = INTP(p1->type.text.color3.b, p2->type.text.color3.b, pos); + p3->type.text.color3.a = INTP(p1->type.text.color3.a, p2->type.text.color3.a, pos); p3->type.text.align.x = INTP(p1->type.text.align.x, p2->type.text.align.x, pos); p3->type.text.align.y = INTP(p1->type.text.align.y, p2->type.text.align.y, pos); Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-08-13 15:42:30 UTC (rev 41743) +++ trunk/edje/src/lib/edje_private.h 2009-08-13 16:13:49 UTC (rev 41744) @@ -740,7 +740,7 @@ int angle; // 4 int spread; // 4 } fill; - Edje_Color color, color2, color3; // 12 + Edje_Color color; // 4 union { struct { int l, r, t, b; // 16 @@ -749,12 +749,13 @@ Edje_Alignment align; /* text alignment within bounds */ // 16 double elipsis; // 8 int size; // 4 - } text; // 28 + Edje_Color color2, color3; // 8 + } text; // 36 struct { int id; // 4 char *type; // 4 } gradient; // 8 - } type; // 28 + } type; // 36 unsigned char visible : 1; unsigned char smooth : 1; // 4 }; // 116 Modified: trunk/edje/src/lib/edje_text.c =================================================================== --- trunk/edje/src/lib/edje_text.c 2009-08-13 15:42:30 UTC (rev 41743) +++ trunk/edje/src/lib/edje_text.c 2009-08-13 16:13:49 UTC (rev 41744) @@ -579,97 +579,97 @@ { style = EVAS_TEXT_STYLE_OUTLINE; evas_object_text_outline_color_set(ep->object, - (params->color2.r * params->color2.a) / 255, - (params->color2.g * params->color2.a) / 255, - (params->color2.b * params->color2.a) / 255, - params->color2.a); + (params->type.text.color2.r * params->type.text.color2.a) / 255, + (params->type.text.color2.g * params->type.text.color2.a) / 255, + (params->type.text.color2.b * params->type.text.color2.a) / 255, + params->type.text.color2.a); } else if (ep->part->effect == EDJE_TEXT_EFFECT_SOFT_OUTLINE) { style = EVAS_TEXT_STYLE_SOFT_OUTLINE; evas_object_text_outline_color_set(ep->object, - (params->color2.r * params->color2.a) / 255, - (params->color2.g * params->color2.a) / 255, - (params->color2.b * params->color2.a) / 255, - params->color2.a); + (params->type.text.color2.r * params->type.text.color2.a) / 255, + (params->type.text.color2.g * params->type.text.color2.a) / 255, + (params->type.text.color2.b * params->type.text.color2.a) / 255, + params->type.text.color2.a); } else if (ep->part->effect == EDJE_TEXT_EFFECT_SHADOW) { style = EVAS_TEXT_STYLE_SHADOW; evas_object_text_shadow_color_set(ep->object, - (params->color3.r * params->color3.a) / 255, - (params->color3.g * params->color3.a) / 255, - (params->color3.b * params->color3.a) / 255, - params->color3.a); + (params->type.text.color3.r * params->type.text.color3.a) / 255, + (params->type.text.color3.g * params->type.text.color3.a) / 255, + (params->type.text.color3.b * params->type.text.color3.a) / 255, + params->type.text.color3.a); } else if (ep->part->effect == EDJE_TEXT_EFFECT_SOFT_SHADOW) { style = EVAS_TEXT_STYLE_SOFT_SHADOW; evas_object_text_shadow_color_set(ep->object, - (params->color3.r * params->color3.a) / 255, - (params->color3.g * params->color3.a) / 255, - (params->color3.b * params->color3.a) / 255, - params->color3.a); + (params->type.text.color3.r * params->type.text.color3.a) / 255, + (params->type.text.color3.g * params->type.text.color3.a) / 255, + (params->type.text.color3.b * params->type.text.color3.a) / 255, + params->type.text.color3.a); } else if (ep->part->effect == EDJE_TEXT_EFFECT_OUTLINE_SHADOW) { style = EVAS_TEXT_STYLE_OUTLINE_SHADOW; evas_object_text_outline_color_set(ep->object, - (params->color2.r * params->color2.a) / 255, - (params->color2.g * params->color2.a) / 255, - (params->color2.b * params->color2.a) / 255, - params->color2.a); + (params->type.text.color2.r * params->type.text.color2.a) / 255, + (params->type.text.color2.g * params->type.text.color2.a) / 255, + (params->type.text.color2.b * params->type.text.color2.a) / 255, + params->type.text.color2.a); evas_object_text_shadow_color_set(ep->object, - (params->color3.r * params->color3.a) / 255, - (params->color3.g * params->color3.a) / 255, - (params->color3.b * params->color3.a) / 255, - params->color3.a); + (params->type.text.color3.r * params->type.text.color3.a) / 255, + (params->type.text.color3.g * params->type.text.color3.a) / 255, + (params->type.text.color3.b * params->type.text.color3.a) / 255, + params->type.text.color3.a); } else if (ep->part->effect == EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW) { style = EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW; evas_object_text_outline_color_set(ep->object, - (params->color2.r * params->color2.a) / 255, - (params->color2.g * params->color2.a) / 255, - (params->color2.b * params->color2.a) / 255, - params->color2.a); + (params->type.text.color2.r * params->type.text.color2.a) / 255, + (params->type.text.color2.g * params->type.text.color2.a) / 255, + (params->type.text.color2.b * params->type.text.color2.a) / 255, + params->type.text.color2.a); evas_object_text_shadow_color_set(ep->object, - (params->color3.r * params->color3.a) / 255, - (params->color3.g * params->color3.a) / 255, - (params->color3.b * params->color3.a) / 255, - params->color3.a); + (params->type.text.color3.r * params->type.text.color3.a) / 255, + (params->type.text.color3.g * params->type.text.color3.a) / 255, + (params->type.text.color3.b * params->type.text.color3.a) / 255, + params->type.text.color3.a); } else if (ep->part->effect == EDJE_TEXT_EFFECT_FAR_SHADOW) { style = EVAS_TEXT_STYLE_FAR_SHADOW; evas_object_text_shadow_color_set(ep->object, - (params->color3.r * params->color3.a) / 255, - (params->color3.g * params->color3.a) / 255, - (params->color3.b * params->color3.a) / 255, - params->color3.a); + (params->type.text.color3.r * params->type.text.color3.a) / 255, + (params->type.text.color3.g * params->type.text.color3.a) / 255, + (params->type.text.color3.b * params->type.text.color3.a) / 255, + params->type.text.color3.a); } else if (ep->part->effect == EDJE_TEXT_EFFECT_FAR_SOFT_SHADOW) { style = EVAS_TEXT_STYLE_FAR_SOFT_SHADOW; evas_object_text_shadow_color_set(ep->object, - (params->color3.r * params->color3.a) / 255, - (params->color3.g * params->color3.a) / 255, - (params->color3.b * params->color3.a) / 255, - params->color3.a); + (params->type.text.color3.r * params->type.text.color3.a) / 255, + (params->type.text.color3.g * params->type.text.color3.a) / 255, + (params->type.text.color3.b * params->type.text.color3.a) / 255, + params->type.text.color3.a); } else if (ep->part->effect == EDJE_TEXT_EFFECT_GLOW) { style = EVAS_TEXT_STYLE_GLOW; evas_object_text_glow_color_set(ep->object, - (params->color2.r * params->color2.a) / 255, - (params->color2.g * params->color2.a) / 255, - (params->color2.b * params->color2.a) / 255, - params->color2.a); + (params->type.text.color2.r * params->type.text.color2.a) / 255, + (params->type.text.color2.g * params->type.text.color2.a) / 255, + (params->type.text.color2.b * params->type.text.color2.a) / 255, + params->type.text.color2.a); evas_object_text_glow2_color_set(ep->object, - (params->color3.r * params->color3.a) / 255, - (params->color3.g * params->color3.a) / 255, - (params->color3.b * params->color3.a) / 255, - params->color3.a); + (params->type.text.color3.r * params->type.text.color3.a) / 255, + (params->type.text.color3.g * params->type.text.color3.a) / 255, + (params->type.text.color3.b * params->type.text.color3.a) / 255, + params->type.text.color3.a); } evas_object_text_style_set(ep->object, style); } |