From: Enlightenment C. <no...@cv...> - 2007-07-06 20:46:33
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_cache.c Log Message: Use a more appropriate message for files not found than 'Unknown Format' =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_cache.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- edje_cache.c 5 Apr 2007 15:54:16 -0000 1.12 +++ edje_cache.c 6 Jul 2007 20:46:32 -0000 1.13 @@ -100,6 +100,13 @@ Edje_Part_Collection *edc; Eet_File *ef; Evas_List *l; + struct stat st; + + if (stat(file, &st) != 0) + { + *error_ret = EDJE_LOAD_ERROR_DOES_NOT_EXIST; + return NULL; + } ef = eet_open(file, EET_FILE_MODE_READ); if (!ef) |
From: Enlightenment C. <no...@cv...> - 2007-07-06 23:03:08
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_message_queue.c Log Message: Messages are now passed to children groups (part.type=GROUP) =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_message_queue.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- edje_message_queue.c 27 May 2007 05:28:07 -0000 1.27 +++ edje_message_queue.c 6 Jul 2007 23:03:05 -0000 1.28 @@ -8,15 +8,22 @@ static Evas_List *msgq = NULL; static Evas_List *tmp_msgq = NULL; -/* FIXME pass messages on to children? */ EAPI void edje_object_message_send(Evas_Object *obj, Edje_Message_Type type, int id, void *msg) { Edje *ed; + int i; ed = _edje_fetch(obj); if (!ed) return; _edje_message_send(ed, EDJE_QUEUE_SCRIPT, type, id, msg); + + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp = ed->table_parts[i]; + if ((rp->part->type == EDJE_PART_TYPE_GROUP) && (rp->swallowed_object)) + edje_object_message_send(rp->swallowed_object, type, id, msg); + } } EAPI void |
From: Enlightenment C. <no...@cv...> - 2007-07-06 23:27:35
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c Log Message: If object is swallow, apply color changes to swallowed object. Ack by rephorm. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.103 retrieving revision 1.104 diff -u -3 -r1.103 -r1.104 --- edje_calc.c 6 Jul 2007 22:36:40 -0000 1.103 +++ edje_calc.c 6 Jul 2007 23:27:33 -0000 1.104 @@ -1377,6 +1377,12 @@ if (ep->swallowed_object) { + evas_object_color_set(ep->swallowed_object, + (p3.color.r * p3.color.a) / 255, + (p3.color.g * p3.color.a) / 255, + (p3.color.b * p3.color.a) / 255, + p3.color.a); + evas_object_move(ep->swallowed_object, ed->x + p3.x, ed->y + p3.y); evas_object_resize(ep->swallowed_object, p3.w, p3.h); if (p3.visible) evas_object_show(ep->swallowed_object); |
From: Enlightenment C. <no...@cv...> - 2007-07-11 15:33:24
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/bin Modified Files: edje_cc_parse.c Log Message: Avoid doing math inside strings (quoted text), so I'm now enable to have part.description.text.text starting with "(". Patch originally by rephorm. Tested and minor changes by barbieri. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/bin/edje_cc_parse.c,v retrieving revision 1.42 retrieving revision 1.43 diff -u -3 -r1.42 -r1.43 --- edje_cc_parse.c 17 Jun 2007 06:51:42 -0000 1.42 +++ edje_cc_parse.c 11 Jul 2007 15:33:03 -0000 1.43 @@ -7,7 +7,6 @@ static void new_object(void); static void new_statement(void); static char *perform_math (char *input); -static void preprocess_params (void); static int isdelim(char c); static char *next_token(char *p, char *end, char **new_p, int *delim); static char *stack_id(void); @@ -120,30 +119,6 @@ free(id); } -static void -preprocess_params (void) -{ - Evas_List *l; - - /* a formula will never be spread across multiple params */ - for (l = params; l; l = l->next) { - char *data = l->data; - char *replace = NULL; - - /* if the token begins with a opening parens, the user wants us - * to do some math :) - */ - if (*data == '(') - { - replace = perform_math (data); - - free (l->data); - l->data = replace; - } - - } -} - static char * perform_math (char *input) { @@ -364,6 +339,14 @@ p++; } } + else if (tok && *tok == '(') + { + char *tmp; + tmp = tok; + tok = perform_math(tok); + free(tmp); + } + return tok; } @@ -452,7 +435,6 @@ if (do_params) { do_params = 0; - preprocess_params (); new_statement(); /* clear out params */ while (params) |
From: Enlightenment C. <no...@cv...> - 2007-07-11 20:47:31
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/bin Modified Files: edje_cc_parse.c Log Message: Fix escaping by remembering state, allows "\\" to be used as text. Thanks to rephorm for hints, dj2 and mekius for review. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/bin/edje_cc_parse.c,v retrieving revision 1.43 retrieving revision 1.44 diff -u -3 -r1.43 -r1.44 --- edje_cc_parse.c 11 Jul 2007 15:33:03 -0000 1.43 +++ edje_cc_parse.c 11 Jul 2007 20:47:28 -0000 1.44 @@ -165,6 +165,7 @@ int in_comment_cpp = 0; int in_comment_sa = 0; int had_quote = 0; + int is_escaped = 0; char *cpp_token_line = NULL; char *cpp_token_file = NULL; @@ -255,15 +256,19 @@ { if (in_quote) { - if (((*p) == '"') && (*(p - 1) != '\\')) + if ((*p) == '\\') + is_escaped = !is_escaped; + else if (((*p) == '"') && (!is_escaped)) { in_quote = 0; had_quote = 1; } + else if (is_escaped) + is_escaped = 0; } else if (in_parens) { - if (((*p) == ')') && (*(p - 1) != '\\')) + if (((*p) == ')') && (!is_escaped)) in_parens--; } else @@ -307,15 +312,15 @@ tok = mem_alloc(tok_end - tok_start + 2); strncpy(tok, tok_start, tok_end - tok_start + 1); tok[tok_end - tok_start + 1] = 0; - + if (had_quote) { + is_escaped = 0; p = tok; - + while (*p) { - if ((*p == '\"') && - ((p == tok) || ((p > tok) && (*(p - 1) != '\\')))) + if ((*p == '\"') && (!is_escaped)) { memmove(p, p + 1, strlen(p)); } @@ -332,11 +337,14 @@ else if (*p == '\\') { memmove(p, p + 1, strlen(p)); - p++; if (*p == '\\') p++; + else is_escaped = 1; } else - p++; + { + if (is_escaped) is_escaped = 0; + p++; + } } } else if (tok && *tok == '(') |
From: Enlightenment C. <no...@cv...> - 2007-07-24 14:20:38
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/bin Modified Files: edje_cc_handlers.c Log Message: Support for selectable pointer_mode. Evas now support objects that do not grab mouse down event (NOGRAB) aside with the default (AUTOGRAB). API is meant to be extensible. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/bin/edje_cc_handlers.c,v retrieving revision 1.76 retrieving revision 1.77 diff -u -3 -r1.76 -r1.77 --- edje_cc_handlers.c 23 Jul 2007 14:22:57 -0000 1.76 +++ edje_cc_handlers.c 24 Jul 2007 14:20:07 -0000 1.77 @@ -43,6 +43,7 @@ static void st_collections_group_parts_part_effect(void); static void st_collections_group_parts_part_mouse_events(void); static void st_collections_group_parts_part_repeat_events(void); +static void st_collections_group_parts_part_pointer_mode(void); static void st_collections_group_parts_part_precise_is_inside(void); static void st_collections_group_parts_part_use_alternate_font_metrics(void); static void st_collections_group_parts_part_clip_to_id(void); @@ -180,6 +181,7 @@ {"collections.group.parts.part.effect", st_collections_group_parts_part_effect}, {"collections.group.parts.part.mouse_events", st_collections_group_parts_part_mouse_events}, {"collections.group.parts.part.repeat_events", st_collections_group_parts_part_repeat_events}, + {"collections.group.parts.part.pointer_mode", st_collections_group_parts_part_pointer_mode}, {"collections.group.parts.part.precise_is_inside", st_collections_group_parts_part_precise_is_inside}, {"collections.group.parts.part.use_alternate_font_metrics", st_collections_group_parts_part_use_alternate_font_metrics}, {"collections.group.parts.part.clip_to", st_collections_group_parts_part_clip_to_id}, @@ -901,6 +903,7 @@ ep->type = EDJE_PART_TYPE_IMAGE; ep->mouse_events = 1; ep->repeat_events = 0; + ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB; ep->precise_is_inside = 0; ep->use_alternate_font_metrics = 0; ep->clip_to_id = -1; @@ -984,6 +987,22 @@ pc = evas_list_data(evas_list_last(edje_collections)); ep = evas_list_data(evas_list_last(pc->parts)); ep->repeat_events = parse_bool(0); +} + +static void +st_collections_group_parts_part_pointer_mode(void) +{ + Edje_Part_Collection *pc; + Edje_Part *ep; + + check_arg_count(1); + + pc = evas_list_data(evas_list_last(edje_collections)); + ep = evas_list_data(evas_list_last(pc->parts)); + ep->pointer_mode = parse_enum(0, + "AUTOGRAB", EVAS_OBJECT_POINTER_MODE_AUTOGRAB, + "NOGRAB", EVAS_OBJECT_POINTER_MODE_NOGRAB, + NULL); } static void |
From: Enlightenment C. <no...@cv...> - 2007-07-24 14:20:39
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_data.c edje_load.c edje_private.h edje_util.c Log Message: Support for selectable pointer_mode. Evas now support objects that do not grab mouse down event (NOGRAB) aside with the default (AUTOGRAB). API is meant to be extensible. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_data.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- edje_data.c 23 Jul 2007 14:22:57 -0000 1.38 +++ edje_data.c 24 Jul 2007 14:20:07 -0000 1.39 @@ -345,6 +345,7 @@ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "effect", effect, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "mouse_events", mouse_events, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "repeat_events", repeat_events, EET_T_CHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "pointer_mode", pointer_mode, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "precise_is_inside", precise_is_inside, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "clip_to_id", clip_to_id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "use_alternate_font_metrics", use_alternate_font_metrics, EET_T_UCHAR); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.107 retrieving revision 1.108 diff -u -3 -r1.107 -r1.108 --- edje_load.c 23 Jul 2007 14:22:57 -0000 1.107 +++ edje_load.c 24 Jul 2007 14:20:07 -0000 1.108 @@ -303,6 +303,7 @@ 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); @@ -323,9 +324,15 @@ _edje_callbacks_add(rp->object, ed, rp); if (ep->repeat_events) evas_object_repeat_events_set(rp->object, 1); + + if (ep->pointer_mode != EVAS_OBJECT_POINTER_MODE_AUTOGRAB) + evas_object_pointer_mode_set(rp->object, ep->pointer_mode); } else - evas_object_pass_events_set(rp->object, 1); + { + evas_object_pass_events_set(rp->object, 1); + evas_object_pointer_mode_set(rp->object, EVAS_OBJECT_POINTER_MODE_NOGRAB); + } if (ep->precise_is_inside) evas_object_precise_is_inside_set(rp->object, 1); } @@ -368,6 +375,7 @@ if (rp->clip_to) { evas_object_pass_events_set(rp->clip_to->object, 1); + evas_object_pointer_mode_set(rp->clip_to->object, EVAS_OBJECT_POINTER_MODE_NOGRAB); evas_object_clip_set(rp->object, rp->clip_to->object); } } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.129 retrieving revision 1.130 diff -u -3 -r1.129 -r1.130 --- edje_private.h 23 Jul 2007 14:22:57 -0000 1.129 +++ edje_private.h 24 Jul 2007 14:20:07 -0000 1.130 @@ -429,6 +429,7 @@ unsigned char repeat_events; /* it will repeat events to objects below */ unsigned char precise_is_inside; unsigned char use_alternate_font_metrics; + Evas_Object_Pointer_Mode pointer_mode; }; struct _Edje_Part_Image_Id =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_util.c,v retrieving revision 1.98 retrieving revision 1.99 diff -u -3 -r1.98 -r1.99 --- edje_util.c 23 Jul 2007 14:22:57 -0000 1.98 +++ edje_util.c 24 Jul 2007 14:20:07 -0000 1.99 @@ -2117,6 +2117,8 @@ _edje_callbacks_add(obj_swallow, rp->edje, rp); if (rp->part->repeat_events) evas_object_repeat_events_set(obj_swallow, 1); + if (rp->part->pointer_mode != EVAS_OBJECT_POINTER_MODE_AUTOGRAB) + evas_object_pointer_mode_set(obj_swallow, rp->part->pointer_mode); } else evas_object_pass_events_set(obj_swallow, 1); |
From: Enlightenment C. <no...@cv...> - 2007-09-12 15:12:14
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c Log Message: Fix segfault with part_recalc when no image_dir was specified. This avoid crashes with buggy edje files: if you forget to specify type: RECT and don't provide any "images.image" in edje, it crashes. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.108 retrieving revision 1.109 diff -u -3 -r1.108 -r1.109 --- edje_calc.c 8 Sep 2007 18:31:56 -0000 1.108 +++ edje_calc.c 12 Sep 2007 15:12:07 -0000 1.109 @@ -1259,7 +1259,8 @@ { Edje_Image_Directory_Entry *ie; - ie = evas_list_nth(ed->file->image_dir->entries, (-image_id) - 1); + if (!ed->file->image_dir) ie = NULL; + else ie = evas_list_nth(ed->file->image_dir->entries, (-image_id) - 1); if ((ie) && (ie->source_type == EDJE_IMAGE_SOURCE_TYPE_EXTERNAL) && (ie->entry)) |
From: Enlightenment C. <no...@cv...> - 2007-09-12 17:42:27
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_load.c Log Message: Fix deletion of Edje with child "GROUP". =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.109 retrieving revision 1.110 diff -u -3 -r1.109 -r1.110 --- edje_load.c 8 Sep 2007 18:31:56 -0000 1.109 +++ edje_load.c 12 Sep 2007 17:42:21 -0000 1.110 @@ -650,11 +650,12 @@ evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part"); if (rp->part->mouse_events) _edje_callbacks_del(rp->swallowed_object); - rp->swallowed_object = NULL; /* Objects swallowed by the app do not get deleted, but those internally swallowed (GROUP type) do. */ if (rp->part->type == EDJE_PART_TYPE_GROUP) evas_object_del(rp->swallowed_object); + + rp->swallowed_object = NULL; } if (rp->text.text) evas_stringshare_del(rp->text.text); if (rp->text.font) evas_stringshare_del(rp->text.font); |
From: Enlightenment C. <no...@cv...> - 2007-09-26 18:22:42
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/bin Modified Files: Makefile.am Log Message: Fix edje_cc/edje_decc linkage in --as-needed mode Requested by Pavlov Konstantin. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/bin/Makefile.am,v retrieving revision 1.40 retrieving revision 1.41 diff -u -3 -r1.40 -r1.41 --- Makefile.am 8 Sep 2007 18:34:40 -0000 1.40 +++ Makefile.am 26 Sep 2007 18:22:34 -0000 1.41 @@ -36,7 +36,7 @@ edje_main.h edje_cc_LDADD = \ -$(top_builddir)/src/lib/libedje.la +$(top_builddir)/src/lib/libedje.la $(EDJE_LIBS) edje_cc_DEPENDENCIES = $(top_builddir)/src/lib/libedje.la @@ -48,6 +48,6 @@ edje_cc_sources.c edje_decc_LDADD = \ -$(top_builddir)/src/lib/libedje.la @edje_decc_lib@ +$(top_builddir)/src/lib/libedje.la @edje_decc_lib@ $(EDJE_LIBS) edje_decc_DEPENDENCIES = $(top_builddir)/src/lib/libedje.la |
From: Enlightenment C. <no...@cv...> - 2007-10-09 15:30:31
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c Log Message: Fix edje calculation of max width for swallowed parts. If you have a SWALLOW part taking the whole window and then swallow an object with max set using edje_extern_object_max_size_set() it will not take effect due the comparison of ep->swallow_params.max.w < -1 (desc->max.w is -1 in this case). =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.110 retrieving revision 1.111 diff -u -3 -r1.110 -r1.111 --- edje_calc.c 17 Sep 2007 11:33:16 -0000 1.110 +++ edje_calc.c 9 Oct 2007 15:30:26 -0000 1.111 @@ -260,16 +260,18 @@ minw = desc->min.w; if (ep->swallow_params.min.w > desc->min.w) minw = ep->swallow_params.min.w; maxw = desc->max.w; - if ((ep->swallow_params.max.w >= 0) && - (ep->swallow_params.max.w < maxw)) maxw = ep->swallow_params.max.w; + if (((ep->swallow_params.max.w >= 0) && (desc->max.w >= 0) && + (ep->swallow_params.max.w < maxw)) || + (ep->swallow_params.max.w >= 0)) maxw = ep->swallow_params.max.w; } // if (flags & FLAG_Y) { minh = desc->min.h; if (ep->swallow_params.min.h > desc->min.h) minh = ep->swallow_params.min.h; maxh = desc->max.h; - if ((ep->swallow_params.max.h >= 0) && - (ep->swallow_params.max.h < maxh)) maxh = ep->swallow_params.max.h; + if (((ep->swallow_params.max.h >= 0) && (desc->max.h >= 0) && + (ep->swallow_params.max.h < maxh)) || + (ep->swallow_params.max.h >= 0)) maxh = ep->swallow_params.max.h; } /* relative coords of top left & bottom right */ if (flags & FLAG_X) |
From: Enlightenment C. <no...@cv...> - 2007-10-19 16:07:45
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_util.c Log Message: Set pass_events to 0 if "mouse_events: 1". I'm not sure this is the right thing to do, but since we're setting it to 1 when "mouse_events: 0", it fix some problems. Maye we shouldn't set this flag at all and let users have these options set on clippers? =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_util.c,v retrieving revision 1.100 retrieving revision 1.101 diff -u -3 -r1.100 -r1.101 --- edje_util.c 8 Sep 2007 18:31:56 -0000 1.100 +++ edje_util.c 19 Oct 2007 16:07:43 -0000 1.101 @@ -2119,6 +2119,7 @@ evas_object_repeat_events_set(obj_swallow, 1); if (rp->part->pointer_mode != EVAS_OBJECT_POINTER_MODE_AUTOGRAB) evas_object_pointer_mode_set(obj_swallow, rp->part->pointer_mode); + evas_object_pass_events_set(obj_swallow, 0); } else evas_object_pass_events_set(obj_swallow, 1); |
From: Enlightenment C. <no...@cv...> - 2007-10-19 19:31:43
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c edje_private.h edje_util.c Log Message: Fix calculation of maximum values for swallow parts. Due my last change, the code was broken by edjes without a group min/max, this happens because edje_object_size_max_get() returns 100000 for these objects, and this was being used as object maximum size. Current fix is a hack: just check for this value, now known as EDJE_INF_MAX_*, but the real solution would be to return 0 (or -1) and check for it in other parts of the code, but it's harder to get right. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.112 retrieving revision 1.113 diff -u -3 -r1.112 -r1.113 --- edje_calc.c 14 Oct 2007 23:54:27 -0000 1.112 +++ edje_calc.c 19 Oct 2007 19:31:42 -0000 1.113 @@ -259,19 +259,35 @@ { minw = desc->min.w; if (ep->swallow_params.min.w > desc->min.w) minw = ep->swallow_params.min.w; - maxw = desc->max.w; - if (((ep->swallow_params.max.w >= 0) && (desc->max.w >= 0) && - (ep->swallow_params.max.w < maxw)) || - (ep->swallow_params.max.w >= 0)) maxw = ep->swallow_params.max.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; + else + { + if (desc->max.w <= 0) + maxw = ep->swallow_params.max.w; + else + maxw = MIN(ep->swallow_params.max.w, desc->max.w); + } } // if (flags & FLAG_Y) { minh = desc->min.h; if (ep->swallow_params.min.h > desc->min.h) minh = ep->swallow_params.min.h; - maxh = desc->max.h; - if (((ep->swallow_params.max.h >= 0) && (desc->max.h >= 0) && - (ep->swallow_params.max.h < maxh)) || - (ep->swallow_params.max.h >= 0)) maxh = ep->swallow_params.max.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; + else + { + if (desc->max.h <= 0) + maxh = ep->swallow_params.max.h; + else + maxh = MIN(ep->swallow_params.max.h, desc->max.h); + } } /* relative coords of top left & bottom right */ if (flags & FLAG_X) =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.134 retrieving revision 1.135 diff -u -3 -r1.134 -r1.135 --- edje_private.h 8 Sep 2007 18:21:57 -0000 1.134 +++ edje_private.h 19 Oct 2007 19:31:42 -0000 1.135 @@ -126,6 +126,9 @@ #define PI 3.14159265358979323846 +#define EDJE_INF_MAX_W 100000 +#define EDJE_INF_MAX_H 100000 + #define EDJE_IMAGE_SOURCE_TYPE_NONE 0 #define EDJE_IMAGE_SOURCE_TYPE_INLINE_PERFECT 1 #define EDJE_IMAGE_SOURCE_TYPE_INLINE_LOSSY 2 =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_util.c,v retrieving revision 1.101 retrieving revision 1.102 diff -u -3 -r1.101 -r1.102 --- edje_util.c 19 Oct 2007 16:07:43 -0000 1.101 +++ edje_util.c 19 Oct 2007 19:31:42 -0000 1.102 @@ -1087,7 +1087,8 @@ } if (ed->collection->prop.max.w == 0) { - if (maxw) *maxw = 100000; + /* XXX TODO: convert maxw to 0, fix things that break. */ + if (maxw) *maxw = EDJE_INF_MAX_W; } else { @@ -1095,7 +1096,8 @@ } if (ed->collection->prop.max.h == 0) { - if (maxh) *maxh = 100000; + /* XXX TODO: convert maxh to 0, fix things that break. */ + if (maxh) *maxh = EDJE_INF_MAX_H; } else { |
From: Enlightenment C. <no...@cv...> - 2007-10-22 22:31:28
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_text.c Log Message: Fix calculation of font size when text.fit_y is set. Before it was using a linear search with initial step proportional to difference bettwen desired and current height, but the way it was implemented it was giving incorrect values, for example: a text in an animation that enlarges height was getting size_{n} < size_{n-1}, where it should be always the oposite (the sequence was like: 31, 32, 33, 34, 31, 33, 34, 35, ...). One way to avoid that was to recalculate "dif" based on new "th", but it quickly drop to 1. The current implementation now uses a binary search to find the first size that matches the desired height and then a linear search to search the largest font doing that (differents sizes may result in the same height). This linear search is often an extra lookup and can be avoided if we want just something that fits (instead of the largest). =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_text.c,v retrieving revision 1.67 retrieving revision 1.68 diff -u -3 -r1.67 -r1.68 --- edje_text.c 14 Oct 2007 23:54:27 -0000 1.67 +++ edje_text.c 22 Oct 2007 22:31:13 -0000 1.68 @@ -493,21 +493,48 @@ } else if (th > sh) { - int dif; + int current; - dif = (th - sh) / 4; - if (dif < 1) dif = 1; - while ((th > sh) && (sw >= 0)) + evas_object_text_font_set(ep->object, font, 10); + part_get_geometry(ep, &tw, &th); + + if (th == sh) + current = 10; + else { - size -= dif; - if (size <= 0) break; - if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); - else evas_object_text_font_source_set(ep->object, NULL); + int bottom, top; - evas_object_text_font_set(ep->object, font, size); - part_get_geometry(ep, &tw, &th); - if ((size > 0) && (th == 0)) break; + if (th < sh) + bottom = 10; + else if (th > sh) + { + bottom = 1; + top = 10; + } + + top = size; + /* search one that fits (binary search) */ + do + { + current = (top + bottom) / 2; + + evas_object_text_font_set(ep->object, font, current); + part_get_geometry(ep, &tw, &th); + + if (th < sh) bottom = current + 1; + else if (th > sh) top = current - 1; + } while ((bottom < top) && (th != sh)); } + + /* search the larger one that fits (linear search) */ + do + { + current++; + + evas_object_text_font_set(ep->object, font, current); + part_get_geometry(ep, &tw, &th); + } while (th <= sh); + size = current - 1; } } if (size < 1) size = 1; |
From: Enlightenment C. <no...@cv...> - 2007-11-10 13:48:30
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/data Added Files: edje-mode.el Log Message: Edje Emacs mode. It defines the syntax highlight and some functions to help editing, like creating parts and more. |
From: Enlightenment C. <no...@cv...> - 2007-11-10 13:49:34
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/data Modified Files: Makefile.am Log Message: Add edje-mode.el to EXTRA_DIST =================================================================== RCS file: /cvs/e/e17/libs/edje/data/Makefile.am,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- Makefile.am 4 Nov 2007 09:53:29 -0000 1.4 +++ Makefile.am 10 Nov 2007 13:49:31 -0000 1.5 @@ -3,5 +3,5 @@ SUBDIRS = include -EXTRA_DIST = edc.vim +EXTRA_DIST = edc.vim edje-mode.el |
From: Enlightenment C. <no...@cv...> - 2007-11-10 15:52:24
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/data Modified Files: edje-mode.el Log Message: Edje mode improvements * Now can be compiled with "compile" function. * Fixed insertion of part description internals alone. * Add program and its internals, with key bindings. =================================================================== RCS file: /cvs/e/e17/libs/edje/data/edje-mode.el,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- edje-mode.el 10 Nov 2007 13:48:28 -0000 1.1 +++ edje-mode.el 10 Nov 2007 15:52:20 -0000 1.2 @@ -32,9 +32,68 @@ (defvar edje-mode-hook nil) (defun number-or-nil-to-string (v &optional default) - (if (not (eq 'nil v)) (number-to-string v) (number-to-string default))) + (cond ((numberp v) (number-to-string v)) + ((stringp v) (if (string= v "") (number-to-string default) v)) + (t (number-to-string default)))) + +(defun non-empty-string (s) + (and (not (eq 'nil s)) + (not (string= "" s)))) + +(defun edje-new-program-action-signal-emit (source emission) + "Insert new program SIGNAL_EMIT" + (interactive "ssource: \nsemission: ") + (insert + (concat + " action: SIGNAL_EMIT \"" source "\" \"" emission "\";\n" + ))) + +(defun edje-new-program-action-state-set (state value target) + "Insert new program STATE_SET" + (interactive "sstate: \nvalue (0.0): \nstarget: ") + (insert + (concat + " action: STATE_SET \"" state "\" " + (number-or-nil-to-string value 0.0) ";\n" + " target: \"" target "\";\n" + ))) + +(defun edje-new-program-action (action) + "Insert new program action" + (interactive "saction: ") + (setq action (upcase action)) + (cond ((string= action "STATE_SET") + (edje-new-program-action-state-set "" 0.0 "")) + ((string= action "SIGNAL_EMIT") + (edje-new-program-action-signal-emit "" "")) + )) + +(defun edje-new-program (name signal source action) + "Insert new program block" + (interactive "sname: \nssignal: \nssource: \nsaction: ") + (insert + (concat + "\n" + " program {\n" + " name: \"" name "\";\n" + + (if (non-empty-string signal) + (concat " signal: \"" signal "\";\n")) + + (if (non-empty-string source) + (concat " source: \"" source "\";\n")) + )) + + (edje-new-program-action action) + + (insert + (concat + " }\n" + "\n" + ))) (defun edje-new-desc-relative (x y &optional defx defy) + "Insert new part description 'relative' line" (interactive "sx: \nsy: ") (insert (concat @@ -44,6 +103,7 @@ ))) (defun edje-new-desc-offset (x y &optional defx defy) + "Insert new part description 'offset' line" (interactive "sx: \nsy: ") (insert (concat @@ -52,18 +112,63 @@ (number-or-nil-to-string y defy) ";\n" ))) +(defun edje-new-desc-inherit (name val) + "Insert new part description 'inherit' line" + (interactive "sname: \nsvalue: ") + (insert + (concat + " inherit: \"" name "\" " + (number-or-nil-to-string val 0.0) ";\n" + ))) + +(defun edje-new-desc-text (font size text) + "Insert new part description 'text' block" + (interactive "sfont: \nssize: \nstext: ") + (insert + (concat + " text {\n" + " font: \"" font "\";\n" + " size: " (number-or-nil-to-string size) ";\n" + " text: \"" text "\";\n" + " }\n" + ))) + +(defun edje-new-desc-image (name) + "Insert new part description 'image' block" + (interactive "sname: ") + (insert + (concat + " image {\n" + " normal: \"" name "\";\n" + " }\n" + ))) + +(defun edje-new-desc-color (r g b a &optional defr defg defb defa) + "Insert new part description 'color' line" + (interactive "sred: \nsgreen: \nsblue: \nsalpha: ") + (insert + (concat + " color: " + (number-or-nil-to-string r defr) " " + (number-or-nil-to-string g defg) " " + (number-or-nil-to-string b defb) " " + (number-or-nil-to-string a defa) ";\n" + ))) + (defun edje-new-desc (name val &optional r1_rx r1_ry r2_rx r2_ry r1_ox r1_oy - r2_ox r2_oy) + r2_ox r2_oy + part_type) + "Insert new part description block" (interactive "sName: \nsValue: ") (insert (concat " description {\n" - " state: \"" name "\" " (number-to-string val) ";\n" - " rel1 {\n" - )) + " state: \"" name "\" " (number-or-nil-to-string val 0.0) ";\n")) + (if (string= part_type "RECT") (edje-new-desc-color 255 255 255 255)) + (insert " rel1 {\n") (edje-new-desc-relative r1_rx r1_ry 0.0 0.0) (edje-new-desc-offset r1_ox r1_oy 0 0) (insert @@ -73,31 +178,45 @@ )) (edje-new-desc-relative r2_rx r2_ry 1.0 1.0) (edje-new-desc-offset r2_ox r2_oy -1 -1) - (insert - (concat - " }\n" - " }\n" - ))) + (insert " }\n") + (cond ((string= part_type "IMAGE") (edje-new-desc-image "")) + ((string= part_type "TEXT") (edje-new-desc-text "" 10 "contents")) + ) + (insert " }\n") + ) (defun edje-new-part (name type &optional r1_rx r1_ry r2_rx r2_ry r1_ox r1_oy r2_ox r2_oy) + "Insert new part" (interactive "sName: \nsType: ") + (setq type (upcase type)) (insert (concat "\n" " part {\n" " name: \"" name "\";\n" - " type: " (upcase type) ";\n" + " type: " type ";\n" + " mouse_events: 0;\n" )) - (edje-new-desc "default" 0.0 r1_rx r1_ry r2_rx r2_ry r1_ox r1_oy r2_ox r2_oy) + (edje-new-desc "default" 0.0 r1_rx r1_ry r2_rx r2_ry r1_ox r1_oy r2_ox r2_oy type) (insert (concat " }\n" ))) +(defun edje-setup-compile () + (set (make-local-variable 'compile-command) + (concat "edje_cc " (buffer-file-name)) + )) + +(defun edje-cc () + "Runs edje_cc with current buffer." + (interactive) + (compile (edje-setup-compile))) + (defvar edje-mode-map (let ((edje-mode-map (make-sparse-keymap))) (define-key edje-mode-map "\C-j" 'newline-and-indent) @@ -105,10 +224,18 @@ (define-key edje-mode-map "\C-cd" 'edje-new-desc) (define-key edje-mode-map "\C-cr" 'edje-new-desc-relative) (define-key edje-mode-map "\C-co" 'edje-new-desc-offset) + (define-key edje-mode-map "\C-ch" 'edje-new-desc-inherit) + (define-key edje-mode-map "\C-cc" 'edje-new-desc-color) + (define-key edje-mode-map "\C-ci" 'edje-new-desc-image) + (define-key edje-mode-map "\C-ct" 'edje-new-desc-text) + (define-key edje-mode-map "\C-cg" 'edje-new-program) + (define-key edje-mode-map "\C-ca" 'edje-new-program-action) + (define-key edje-mode-map "\C-cs" 'edje-new-program-action-state-set) + (define-key edje-mode-map "\C-ce" 'edje-new-program-action-signal-emit) edje-mode-map) "Keymap for Edje major mode") - +(add-hook 'c-mode-hook 'edje-setup-compile) (add-to-list 'auto-mode-alist '("\\.edc$" . edje-mode)) (defconst edje-font-lock-keywords-1 |
From: Enlightenment C. <no...@cv...> - 2008-01-18 20:51:06
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_textblock_styles.c Log Message: Escape font name before writing it to fixed buffer. Font names can contain spaces, either in the file name and the fontconfig, so do the escape and keep words linked. Now it's possible to have things like: font=Vera\\ Sans:style=Bold and it will work. (note double \\ is required) =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_textblock_styles.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- edje_textblock_styles.c 8 Sep 2007 18:31:56 -0000 1.13 +++ edje_textblock_styles.c 18 Jan 2008 20:51:03 -0000 1.14 @@ -440,9 +440,14 @@ /* Add font name last to save evas from multiple loads */ if (tag->font) { + char *tmp; buf = _edje_strbuf_append(buf, " ", &buflen, &bufalloc); buf = _edje_strbuf_append(buf, "font=", &buflen, &bufalloc); - buf = _edje_strbuf_append(buf, tag->font, &buflen, &bufalloc); + tmp = _edje_str_escape(tag->font); + if (tmp) { + buf = _edje_strbuf_append(buf, tmp, &buflen, &bufalloc); + free(tmp); + } } buf = _edje_strbuf_append(buf, "'", &buflen, &bufalloc); } |
From: Enlightenment C. <no...@cv...> - 2008-02-21 18:35:29
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c Log Message: Cleanup edje calc and fixes textblock "visible" use. Patch by Cedric BAIL, with minor formating/style fixes. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.114 retrieving revision 1.115 diff -u -3 -r1.114 -r1.115 --- edje_calc.c 19 Jan 2008 01:00:13 -0000 1.114 +++ edje_calc.c 21 Feb 2008 18:35:27 -0000 1.115 @@ -1167,6 +1167,125 @@ } static void +_edje_gradient_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edje_Part_Description *chosen_desc) +{ + evas_object_gradient_fill_angle_set(ep->object, p3->fill.angle); + evas_object_gradient_fill_spread_set(ep->object, p3->fill.spread); + 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 (ed->file->spectrum_dir && ed->file->spectrum_dir->entries && + p3->gradient.id != ep->gradient_id) + { + Edje_Spectrum_Directory_Entry *se; + Evas_List *l; + + se = evas_list_nth(ed->file->spectrum_dir->entries, p3->gradient.id); + if (se) + { + evas_object_gradient_clear(ep->object); + for (l = se->color_list; l; l = l->next) + { + Edje_Spectrum_Color *sc = l->data; + evas_object_gradient_color_stop_add(ep->object, sc->r, + sc->g, sc->b, 255, + sc->d); + evas_object_gradient_alpha_stop_add(ep->object, + sc->a, sc->d); + } + ep->gradient_id = p3->gradient.id; + } + } +} + +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; + + 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_center_fill_set(ep->object, + !(chosen_desc->border.no_fill)); + image_id = ep->param1.description->image.id; + if (image_id < 0) + { + Edje_Image_Directory_Entry *ie; + + if (!ed->file->image_dir) ie = NULL; + else ie = evas_list_nth(ed->file->image_dir->entries, (-image_id) - 1); + if ((ie) && + (ie->source_type == EDJE_IMAGE_SOURCE_TYPE_EXTERNAL) && + (ie->entry)) + { + evas_object_image_file_set(ep->object, ie->entry, NULL); + } + } + else + { + image_count = 2; + if (ep->param2.description) + image_count += evas_list_count(ep->param2.description->image.tween_list); + image_num = (pos * ((double)image_count - 0.5)); + if (image_num > (image_count - 1)) + image_num = image_count - 1; + if (image_num == 0) + image_id = ep->param1.description->image.id; + else if (image_num == (image_count - 1)) + image_id = ep->param2.description->image.id; + else + { + Edje_Part_Image_Id *imid; + + imid = evas_list_nth(ep->param2.description->image.tween_list, + image_num - 1); + if (imid) image_id = imid->id; + } + if (image_id < 0) + { + printf("EDJE ERROR: part \"%s\" has description, " + "\"%s\" %3.3f with a missing image id!!!\n", + ep->part->name, + ep->param1.description->state.name, + ep->param1.description->state.value); + } + else + { + snprintf(buf, sizeof(buf), "images/%i", image_id); + evas_object_image_file_set(ep->object, ed->file->path, buf); + if (evas_object_image_load_error_get(ep->object) != EVAS_LOAD_ERROR_NONE) + { + 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"); + } + } + } +} + + +static void _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags) { Edje_Calc_Params p1, p2, p3; @@ -1328,158 +1447,50 @@ } if (!ed->calc_only) { - if (ep->part->type == EDJE_PART_TYPE_RECTANGLE) - { - evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); - evas_object_resize(ep->object, p3.w, p3.h); - evas_object_color_set(ep->object, - (p3.color.r * p3.color.a) / 255, - (p3.color.g * p3.color.a) / 255, - (p3.color.b * p3.color.a) / 255, - p3.color.a); - if (p3.visible) evas_object_show(ep->object); - else evas_object_hide(ep->object); - } - else if (ep->part->type == EDJE_PART_TYPE_TEXT) + /* Common move, resize and color_set for all part. */ + switch (ep->part->type) { - _edje_text_recalc_apply(ed, ep, &p3, chosen_desc); + case EDJE_PART_TYPE_RECTANGLE: + case EDJE_PART_TYPE_IMAGE: + case EDJE_PART_TYPE_TEXTBLOCK: + case EDJE_PART_TYPE_GRADIENT: + evas_object_color_set(ep->object, + (p3.color.r * p3.color.a) / 255, + (p3.color.g * p3.color.a) / 255, + (p3.color.b * p3.color.a) / 255, + p3.color.a); + if (p3.visible) evas_object_show(ep->object); + else evas_object_hide(ep->object); + /* move and resize are needed for all previous object => no break here. */ + case EDJE_PART_TYPE_SWALLOW: + case EDJE_PART_TYPE_GROUP: + /* visibility and color have no meaning on SWALLOW and GROUP part. */ + evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); + evas_object_resize(ep->object, p3.w, p3.h); + break; + case EDJE_PART_TYPE_TEXT: + /* This is correctly handle in _edje_text_recalc_apply at the moment. */ + break; } - else if (ep->part->type == EDJE_PART_TYPE_IMAGE) - { - char buf[4096]; - int image_id; - int image_count, image_num; - - evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); - evas_object_resize(ep->object, p3.w, p3.h); - 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_center_fill_set(ep->object, !(chosen_desc->border.no_fill)); - image_id = ep->param1.description->image.id; - if (image_id < 0) - { - Edje_Image_Directory_Entry *ie; - if (!ed->file->image_dir) ie = NULL; - else ie = evas_list_nth(ed->file->image_dir->entries, (-image_id) - 1); - if ((ie) && - (ie->source_type == EDJE_IMAGE_SOURCE_TYPE_EXTERNAL) && - (ie->entry)) - { - evas_object_image_file_set(ep->object, ie->entry, NULL); - } - } - else - { - image_count = 2; - if (ep->param2.description) - image_count += evas_list_count(ep->param2.description->image.tween_list); - image_num = (pos * ((double)image_count - 0.5)); - if (image_num > (image_count - 1)) - image_num = image_count - 1; - if (image_num == 0) - image_id = ep->param1.description->image.id; - else if (image_num == (image_count - 1)) - image_id = ep->param2.description->image.id; - else - { - Edje_Part_Image_Id *imid; - - imid = evas_list_nth(ep->param2.description->image.tween_list, image_num - 1); - if (imid) image_id = imid->id; - } - if (image_id < 0) - { - printf("EDJE ERROR: part \"%s\" has description, \"%s\" %3.3f with a missing image id!!!\n", - ep->part->name, - ep->param1.description->state.name, - ep->param1.description->state.value - ); - } - else - { - snprintf(buf, sizeof(buf), "images/%i", image_id); - evas_object_image_file_set(ep->object, ed->file->path, buf); - if (evas_object_image_load_error_get(ep->object) != EVAS_LOAD_ERROR_NONE) - { - 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"); - } - } - } - evas_object_color_set(ep->object, - (p3.color.r * p3.color.a) / 255, - (p3.color.g * p3.color.a) / 255, - (p3.color.b * p3.color.a) / 255, - p3.color.a); - if (p3.visible) evas_object_show(ep->object); - else evas_object_hide(ep->object); - } - else if ((ep->part->type == EDJE_PART_TYPE_SWALLOW) || - (ep->part->type == EDJE_PART_TYPE_GROUP)) - { - evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); - evas_object_resize(ep->object, p3.w, p3.h); - } - else if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK) - { - evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); - evas_object_resize(ep->object, p3.w, p3.h); - } - else if (ep->part->type == EDJE_PART_TYPE_GRADIENT) + /* Some object need special recalc. */ + switch (ep->part->type) { - evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); - evas_object_resize(ep->object, p3.w, p3.h); - evas_object_color_set(ep->object, - (p3.color.r * p3.color.a) / 255, - (p3.color.g * p3.color.a) / 255, - (p3.color.b * p3.color.a) / 255, - p3.color.a); - if (p3.visible) evas_object_show(ep->object); - else evas_object_hide(ep->object); - - evas_object_gradient_fill_angle_set(ep->object, p3.fill.angle); - evas_object_gradient_fill_spread_set(ep->object, p3.fill.spread); - 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 (ed->file->spectrum_dir && ed->file->spectrum_dir->entries && p3.gradient.id != ep->gradient_id) - { - Edje_Spectrum_Directory_Entry *se; - Evas_List *l; - - se = evas_list_nth(ed->file->spectrum_dir->entries, p3.gradient.id); - if (se) - { - evas_object_gradient_clear(ep->object); - for (l = se->color_list; l; l = l->next) - { - Edje_Spectrum_Color *sc = l->data; - evas_object_gradient_color_stop_add(ep->object, sc->r, - sc->g, sc->b, 255, - sc->d); - evas_object_gradient_alpha_stop_add(ep->object, - sc->a, sc->d); - } - ep->gradient_id = p3.gradient.id; - } - } + case EDJE_PART_TYPE_TEXT: + _edje_text_recalc_apply(ed, ep, &p3, chosen_desc); + break; + case EDJE_PART_TYPE_IMAGE: + _edje_image_recalc_apply(ed, ep, &p3, chosen_desc, pos); + break; + case EDJE_PART_TYPE_GRADIENT: + _edje_gradient_recalc_apply(ed, ep, &p3, chosen_desc); + break; + case EDJE_PART_TYPE_RECTANGLE: + case EDJE_PART_TYPE_SWALLOW: + case EDJE_PART_TYPE_GROUP: + case EDJE_PART_TYPE_TEXTBLOCK: + /* Nothing special to do for this type of object. */ + break; } if (ep->swallowed_object) |
From: Enlightenment C. <no...@cv...> - 2008-02-21 18:48:38
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_load.c edje_match.c edje_private.h edje_program.c Log Message: Reduce memory allocation for edje match. Just allocate and build the match automate for callbacks and programs only when required. On load for programs and when callbacks list has been updated. Patch by Cedric BAIL. (with minor fixes to use TABS where context was using) =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.111 retrieving revision 1.112 diff -u -3 -r1.111 -r1.112 --- edje_load.c 18 Jan 2008 06:34:04 -0000 1.111 +++ edje_load.c 21 Feb 2008 18:48:36 -0000 1.112 @@ -410,6 +410,15 @@ rp->text.text_source = ed->table_parts[rp->param1.description->text.id_text_source % ed->table_parts_size]; } } + + if (ed->patterns.programs.signals_patterns) + { + edje_match_patterns_free(ed->patterns.programs.signals_patterns); + edje_match_patterns_free(ed->patterns.programs.sources_patterns); + } + ed->patterns.programs.signals_patterns = edje_match_programs_signal_init(ed->collection->programs); + ed->patterns.programs.sources_patterns = edje_match_programs_source_init(ed->collection->programs); + n = evas_list_count(ed->collection->programs); if (n > 0) { =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_match.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- edje_match.c 18 Jan 2008 06:34:04 -0000 1.1 +++ edje_match.c 21 Feb 2008 18:48:36 -0000 1.2 @@ -14,7 +14,6 @@ size_t pos; }; -typedef struct _Edje_States Edje_States; struct _Edje_States { size_t size; @@ -37,12 +36,13 @@ Size++; \ }; -static Edje_States* -_edje_match_states_alloc(size_t n, - size_t patterns_size, - size_t patterns_max_length) +static int +_edje_match_states_alloc(Edje_Patterns *ppat, int n) { - Edje_States *l; + Edje_States *l; + + const size_t patterns_size = ppat->patterns_size; + const size_t patterns_max_length = ppat->max_length; const size_t array_len = (patterns_max_length + 1) * patterns_size; @@ -69,8 +69,9 @@ struct_size += states_has_size; l = malloc(n * struct_size); - if (!l) return NULL; + if (!l) return 0; + ppat->states = l; states = (unsigned char *) (l + n); has = states + states_size; @@ -82,7 +83,7 @@ has += states_has_size; } - return l; + return 1; } static void @@ -295,6 +296,12 @@ lst = evas_list_next(lst); \ } \ \ + if (!_edje_match_states_alloc(r, 2)) \ + { \ + free(r); \ + return NULL; \ + } \ + \ return r; \ } @@ -451,22 +458,16 @@ edje_match_collection_dir_exec(const Edje_Patterns *ppat, const char *string) { - Edje_States *states = _edje_match_states_alloc(2, - ppat->patterns_size, - ppat->max_length); Edje_States *result; int r = 0; - if (!states) - return 0; - _edje_match_patterns_exec_init_states(states, ppat->patterns_size, ppat->max_length); + _edje_match_patterns_exec_init_states(ppat->states, ppat->patterns_size, ppat->max_length); - result = _edje_match_fn(ppat, string, states); + result = _edje_match_fn(ppat, string, ppat->states); if (result) r = _edje_match_collection_dir_exec_finals(ppat->finals, result); - _edje_match_states_free(states, 2); return r; } @@ -479,28 +480,19 @@ int (*func)(Edje_Program *pr, void *data), void *data) { - Edje_States *signal_states = _edje_match_states_alloc(2, - ppat_signal->patterns_size, - ppat_signal->max_length); - Edje_States *source_states = _edje_match_states_alloc(2, - ppat_source->patterns_size, - ppat_source->max_length); Edje_States *signal_result; Edje_States *source_result; int r = 0; - if (!signal_states || !source_states) - return 0; - - _edje_match_patterns_exec_init_states(signal_states, + _edje_match_patterns_exec_init_states(ppat_signal->states, ppat_signal->patterns_size, ppat_signal->max_length); - _edje_match_patterns_exec_init_states(source_states, + _edje_match_patterns_exec_init_states(ppat_source->states, ppat_source->patterns_size, ppat_source->max_length); - signal_result = _edje_match_fn(ppat_signal, signal, signal_states); - source_result = _edje_match_fn(ppat_source, source, source_states); + signal_result = _edje_match_fn(ppat_signal, signal, ppat_signal->states); + source_result = _edje_match_fn(ppat_source, source, ppat_source->states); if (signal_result && source_result) r = edje_match_programs_exec_check_finals(ppat_signal->finals, @@ -510,9 +502,6 @@ programs, func, data); - - _edje_match_states_free(source_states, 2); - _edje_match_states_free(signal_states, 2); return r; } @@ -524,28 +513,19 @@ Evas_List *callbacks, Edje *ed) { - Edje_States *signal_states = _edje_match_states_alloc(2, - ppat_signal->patterns_size, - ppat_signal->max_length); - Edje_States *source_states = _edje_match_states_alloc(2, - ppat_source->patterns_size, - ppat_source->max_length); Edje_States *signal_result; Edje_States *source_result; int r = 0; - if (!signal_states || !source_states) - return 0; - - _edje_match_patterns_exec_init_states(signal_states, + _edje_match_patterns_exec_init_states(ppat_signal->states, ppat_signal->patterns_size, ppat_signal->max_length); - _edje_match_patterns_exec_init_states(source_states, + _edje_match_patterns_exec_init_states(ppat_source->states, ppat_source->patterns_size, ppat_source->max_length); - signal_result = _edje_match_fn(ppat_signal, signal, signal_states); - source_result = _edje_match_fn(ppat_source, source, source_states); + signal_result = _edje_match_fn(ppat_signal, signal, ppat_signal->states); + source_result = _edje_match_fn(ppat_source, source, ppat_source->states); if (signal_result && source_result) r = edje_match_callback_exec_check_finals(ppat_signal->finals, @@ -556,15 +536,13 @@ source, callbacks, ed); - - _edje_match_states_free(source_states, 2); - _edje_match_states_free(signal_states, 2); return r; } void edje_match_patterns_free(Edje_Patterns *ppat) { + _edje_match_states_free(ppat->states, 2); free(ppat); } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.137 retrieving revision 1.138 diff -u -3 -r1.137 -r1.138 --- edje_private.h 19 Jan 2008 01:00:14 -0000 1.137 +++ edje_private.h 21 Feb 2008 18:48:36 -0000 1.138 @@ -122,6 +122,7 @@ typedef struct _Edje_Part_Image_Id Edje_Part_Image_Id; typedef struct _Edje_Part_Description Edje_Part_Description; typedef struct _Edje_Spectrum_Color Edje_Spectrum_Color; +typedef struct _Edje_Patterns Edje_Patterns; #define PI 3.14159265358979323846 @@ -606,6 +607,17 @@ int table_programs_size; int table_parts_size; + struct { + struct { + Edje_Patterns *signals_patterns; + Edje_Patterns *sources_patterns; + } callbacks; + struct { + Edje_Patterns *signals_patterns; + Edje_Patterns *sources_patterns; + } programs; + } patterns; + int references; int block; int load_error; @@ -913,14 +925,16 @@ } Edje_Match_Error; -typedef struct _Edje_Patterns Edje_Patterns; +typedef struct _Edje_States Edje_States; struct _Edje_Patterns { const char **patterns; + + Edje_States *states; + size_t patterns_size; size_t max_length; size_t finals[]; - }; Edje_Patterns *edje_match_collection_dir_init(Evas_List *lst); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_program.c,v retrieving revision 1.55 retrieving revision 1.56 diff -u -3 -r1.55 -r1.56 --- edje_program.c 18 Jan 2008 06:34:04 -0000 1.55 +++ edje_program.c 21 Feb 2008 18:48:36 -0000 1.56 @@ -5,6 +5,7 @@ #include "edje_private.h" static void _edje_emit_cb(Edje *ed, const char *sig, const char *src); +static void _edje_clean_callbacks_patterns(Edje *ed); int _edje_anim_count = 0; Ecore_Animator *_edje_timer = NULL; @@ -105,6 +106,7 @@ escb->just_added = 1; ed->just_added_callbacks = 1; } + _edje_clean_callbacks_patterns(ed); } /** Remove a callback from an object @@ -150,6 +152,8 @@ } else { + _edje_clean_callbacks_patterns(ed); + ed->callbacks = evas_list_remove_list(ed->callbacks, l); if (escb->signal) evas_stringshare_del(escb->signal); if (escb->source) evas_stringshare_del(escb->source); @@ -926,29 +930,16 @@ data.matched = 0; data.matches = NULL; #endif - Edje_Patterns *signals_patterns; - Edje_Patterns *sources_patterns; - if (ed->collection->programs) { - signals_patterns = edje_match_programs_signal_init(ed->collection->programs); - sources_patterns = edje_match_programs_source_init(ed->collection->programs); - - if (edje_match_programs_exec(signals_patterns, - sources_patterns, + 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) - { - edje_match_patterns_free(signals_patterns); - edje_match_patterns_free(sources_patterns); - goto break_prog; - } - - edje_match_patterns_free(signals_patterns); - edje_match_patterns_free(sources_patterns); + goto break_prog; } #ifdef EDJE_PROGRAM_CACHE @@ -979,8 +970,6 @@ static void _edje_emit_cb(Edje *ed, const char *sig, const char *src) { - Edje_Patterns *signals_patterns; - Edje_Patterns *sources_patterns; Evas_List *l; if (ed->delete_me) return; @@ -993,25 +982,21 @@ { int r; - signals_patterns = edje_match_callback_signal_init(ed->callbacks); - sources_patterns = edje_match_callback_source_init(ed->callbacks); + if (!ed->patterns.callbacks.signals_patterns) + { + ed->patterns.callbacks.signals_patterns = edje_match_callback_signal_init(ed->callbacks); + ed->patterns.callbacks.sources_patterns = edje_match_callback_source_init(ed->callbacks); + } - r = edje_match_callback_exec(signals_patterns, - sources_patterns, + r = edje_match_callback_exec(ed->patterns.callbacks.signals_patterns, + ed->patterns.callbacks.sources_patterns, sig, src, ed->callbacks, ed); if (!r) - { - edje_match_patterns_free(signals_patterns); - edje_match_patterns_free(sources_patterns); - goto break_prog; - } - - edje_match_patterns_free(signals_patterns); - edje_match_patterns_free(sources_patterns); + goto break_prog; } ed->walking_callbacks = 0; @@ -1030,6 +1015,8 @@ escb->just_added = 0; if (escb->delete_me) { + _edje_clean_callbacks_patterns(ed); + ed->callbacks = evas_list_remove_list(ed->callbacks, l); if (escb->signal) evas_stringshare_del(escb->signal); if (escb->source) evas_stringshare_del(escb->source); @@ -1043,3 +1030,16 @@ _edje_thaw(ed); _edje_unref(ed); } + +static void +_edje_clean_callbacks_patterns(Edje *ed) +{ + if (ed->patterns.callbacks.signals_patterns) + { + edje_match_patterns_free(ed->patterns.callbacks.signals_patterns); + edje_match_patterns_free(ed->patterns.callbacks.sources_patterns); + ed->patterns.callbacks.signals_patterns = NULL; + ed->patterns.callbacks.sources_patterns = NULL; + } +} + |
From: Enlightenment C. <no...@cv...> - 2008-02-26 17:56:54
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_program.c Log Message: Delay patterns destruction until patterns is not used anymore. Patch by Cedric BAIL. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_program.c,v retrieving revision 1.56 retrieving revision 1.57 diff -u -3 -r1.56 -r1.57 --- edje_program.c 21 Feb 2008 18:48:36 -0000 1.56 +++ edje_program.c 26 Feb 2008 17:56:51 -0000 1.57 @@ -106,7 +106,8 @@ escb->just_added = 1; ed->just_added_callbacks = 1; } - _edje_clean_callbacks_patterns(ed); + else + _edje_clean_callbacks_patterns(ed); } /** Remove a callback from an object @@ -976,6 +977,10 @@ _edje_ref(ed); _edje_freeze(ed); _edje_block(ed); + + if (ed->just_added_callbacks) + _edje_clean_callbacks_patterns(ed); + ed->walking_callbacks = 1; if (ed->callbacks) @@ -1015,8 +1020,6 @@ escb->just_added = 0; if (escb->delete_me) { - _edje_clean_callbacks_patterns(ed); - ed->callbacks = evas_list_remove_list(ed->callbacks, l); if (escb->signal) evas_stringshare_del(escb->signal); if (escb->source) evas_stringshare_del(escb->source); @@ -1024,6 +1027,8 @@ } l = next_l; } + + _edje_clean_callbacks_patterns(ed); } break_prog: _edje_unblock(ed); |
From: Enlightenment C. <no...@cv...> - 2008-02-26 18:41:46
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_load.c edje_main.c edje_private.h edje_program.c Log Message: Cleanup for possible memory leak. Patch by Cedric BAIL. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.113 retrieving revision 1.114 diff -u -3 -r1.113 -r1.114 --- edje_load.c 22 Feb 2008 10:42:50 -0000 1.113 +++ edje_load.c 26 Feb 2008 18:41:43 -0000 1.114 @@ -608,6 +608,15 @@ _edje_message_del(ed); _edje_block_violate(ed); _edje_var_shutdown(ed); + + if (ed->patterns.programs.signals_patterns) + { + edje_match_patterns_free(ed->patterns.programs.signals_patterns); + edje_match_patterns_free(ed->patterns.programs.sources_patterns); + } + ed->patterns.programs.signals_patterns = NULL; + ed->patterns.programs.sources_patterns = NULL; + if (!((ed->file) && (ed->collection))) return; if ((ed->file) && (ed->collection)) { =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_main.c,v retrieving revision 1.52 retrieving revision 1.53 diff -u -3 -r1.52 -r1.53 --- edje_main.c 5 Oct 2007 05:12:37 -0000 1.52 +++ edje_main.c 26 Feb 2008 18:41:44 -0000 1.53 @@ -90,6 +90,7 @@ return; } _edje_message_del(ed); + _edje_clean_callbacks_patterns(ed); _edje_file_del(ed); if (ed->path) evas_stringshare_del(ed->path); if (ed->part) evas_stringshare_del(ed->part); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.138 retrieving revision 1.139 diff -u -3 -r1.138 -r1.139 --- edje_private.h 21 Feb 2008 18:48:36 -0000 1.138 +++ edje_private.h 26 Feb 2008 18:41:44 -0000 1.139 @@ -1028,6 +1028,7 @@ void _edje_program_run(Edje *ed, Edje_Program *pr, int force, const char *ssig, const char *ssrc); void _edje_emit(Edje *ed, const char *sig, const char *src); void _edje_emit_handle(Edje *ed, const char *sig, const char *src); +void _edje_clean_callbacks_patterns(Edje *ed); void _edje_text_init(void); void _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_program.c,v retrieving revision 1.57 retrieving revision 1.58 diff -u -3 -r1.57 -r1.58 --- edje_program.c 26 Feb 2008 17:56:51 -0000 1.57 +++ edje_program.c 26 Feb 2008 18:41:44 -0000 1.58 @@ -5,7 +5,6 @@ #include "edje_private.h" static void _edje_emit_cb(Edje *ed, const char *sig, const char *src); -static void _edje_clean_callbacks_patterns(Edje *ed); int _edje_anim_count = 0; Ecore_Animator *_edje_timer = NULL; @@ -1036,7 +1035,7 @@ _edje_unref(ed); } -static void +void _edje_clean_callbacks_patterns(Edje *ed) { if (ed->patterns.callbacks.signals_patterns) |
From: Enlightenment C. <no...@cv...> - 2008-02-26 19:06:41
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_main.c edje_load.c Log Message: Fix a memory leak on edje destruction. Patch by Cedric BAIL. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_main.c,v retrieving revision 1.53 retrieving revision 1.54 diff -u -3 -r1.53 -r1.54 --- edje_main.c 26 Feb 2008 18:41:44 -0000 1.53 +++ edje_main.c 26 Feb 2008 19:06:33 -0000 1.54 @@ -146,6 +146,11 @@ if (tc->font) evas_stringshare_del(tc->font); free(tc); } + if (ed->patterns.callbacks.signals_patterns) + { + edje_match_patterns_free(ed->patterns.callbacks.signals_patterns); + edje_match_patterns_free(ed->patterns.callbacks.sources_patterns); + } free(ed); } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.114 retrieving revision 1.115 diff -u -3 -r1.114 -r1.115 --- edje_load.c 26 Feb 2008 18:41:43 -0000 1.114 +++ edje_load.c 26 Feb 2008 19:06:33 -0000 1.115 @@ -408,11 +408,6 @@ } } - if (ed->patterns.programs.signals_patterns) - { - edje_match_patterns_free(ed->patterns.programs.signals_patterns); - edje_match_patterns_free(ed->patterns.programs.sources_patterns); - } ed->patterns.programs.signals_patterns = edje_match_programs_signal_init(ed->collection->programs); ed->patterns.programs.sources_patterns = edje_match_programs_source_init(ed->collection->programs); @@ -714,6 +709,14 @@ if (ed->table_programs) free(ed->table_programs); ed->table_programs = NULL; ed->table_programs_size = 0; + + if (ed->patterns.programs.signals_patterns) + { + edje_match_patterns_free(ed->patterns.programs.signals_patterns); + edje_match_patterns_free(ed->patterns.programs.sources_patterns); + } + ed->patterns.programs.signals_patterns = NULL; + ed->patterns.programs.sources_patterns = NULL; } /** * Used to free the cached data values that are stored in the data_cache |
From: Enlightenment C. <no...@cv...> - 2008-02-26 20:12:04
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_load.c edje_main.c edje_match.c edje_private.h edje_program.c Log Message: Cleanup of last patches and revert my patching mistakes. Last 2 patches were swapped, I applied them in the wrong order and missed the rejections, my bad. I fixed it and also did some cleanup, looks better now. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.115 retrieving revision 1.116 diff -u -3 -r1.115 -r1.116 --- edje_load.c 26 Feb 2008 19:06:33 -0000 1.115 +++ edje_load.c 26 Feb 2008 20:12:00 -0000 1.116 @@ -210,6 +210,25 @@ return str; } +static void +_edje_programs_patterns_clean(Edje *ed) +{ + _edje_signals_sources_patterns_clean(&ed->patterns.programs); +} + +static void +_edje_programs_patterns_init(Edje *ed) +{ + Edje_Signals_Sources_Patterns *ssp = &ed->patterns.programs; + Evas_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); +} + static int _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *part, Evas_List *group_path) { @@ -408,8 +427,7 @@ } } - ed->patterns.programs.signals_patterns = edje_match_programs_signal_init(ed->collection->programs); - ed->patterns.programs.sources_patterns = edje_match_programs_source_init(ed->collection->programs); + _edje_programs_patterns_init(ed); n = evas_list_count(ed->collection->programs); if (n > 0) @@ -603,14 +621,7 @@ _edje_message_del(ed); _edje_block_violate(ed); _edje_var_shutdown(ed); - - if (ed->patterns.programs.signals_patterns) - { - edje_match_patterns_free(ed->patterns.programs.signals_patterns); - edje_match_patterns_free(ed->patterns.programs.sources_patterns); - } - ed->patterns.programs.signals_patterns = NULL; - ed->patterns.programs.sources_patterns = NULL; + _edje_programs_patterns_clean(ed); if (!((ed->file) && (ed->collection))) return; if ((ed->file) && (ed->collection)) @@ -709,14 +720,6 @@ if (ed->table_programs) free(ed->table_programs); ed->table_programs = NULL; ed->table_programs_size = 0; - - if (ed->patterns.programs.signals_patterns) - { - edje_match_patterns_free(ed->patterns.programs.signals_patterns); - edje_match_patterns_free(ed->patterns.programs.sources_patterns); - } - ed->patterns.programs.signals_patterns = NULL; - ed->patterns.programs.sources_patterns = NULL; } /** * Used to free the cached data values that are stored in the data_cache =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_main.c,v retrieving revision 1.54 retrieving revision 1.55 diff -u -3 -r1.54 -r1.55 --- edje_main.c 26 Feb 2008 19:06:33 -0000 1.54 +++ edje_main.c 26 Feb 2008 20:12:00 -0000 1.55 @@ -90,7 +90,7 @@ return; } _edje_message_del(ed); - _edje_clean_callbacks_patterns(ed); + _edje_callbacks_patterns_clean(ed); _edje_file_del(ed); if (ed->path) evas_stringshare_del(ed->path); if (ed->part) evas_stringshare_del(ed->part); @@ -145,11 +145,6 @@ if (tc->name) evas_stringshare_del(tc->name); if (tc->font) evas_stringshare_del(tc->font); free(tc); - } - if (ed->patterns.callbacks.signals_patterns) - { - edje_match_patterns_free(ed->patterns.callbacks.signals_patterns); - edje_match_patterns_free(ed->patterns.callbacks.sources_patterns); } free(ed); } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_match.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- edje_match.c 21 Feb 2008 18:48:36 -0000 1.2 +++ edje_match.c 26 Feb 2008 20:12:00 -0000 1.3 @@ -546,3 +546,14 @@ free(ppat); } +void +_edje_signals_sources_patterns_clean(Edje_Signals_Sources_Patterns *ssp) +{ + if (!ssp->signals_patterns) + return; + + edje_match_patterns_free(ssp->signals_patterns); + edje_match_patterns_free(ssp->sources_patterns); + ssp->signals_patterns = NULL; + ssp->sources_patterns = NULL; +} =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.139 retrieving revision 1.140 diff -u -3 -r1.139 -r1.140 --- edje_private.h 26 Feb 2008 18:41:44 -0000 1.139 +++ edje_private.h 26 Feb 2008 20:12:00 -0000 1.140 @@ -578,6 +578,14 @@ typedef struct _Edje_Var_Timer Edje_Var_Timer; typedef struct _Edje_Var_Pool Edje_Var_Pool; +struct _Edje_Signals_Sources_Patterns +{ + Edje_Patterns *signals_patterns; + Edje_Patterns *sources_patterns; +}; + +typedef struct _Edje_Signals_Sources_Patterns Edje_Signals_Sources_Patterns; + struct _Edje { const char *path; @@ -608,14 +616,8 @@ int table_parts_size; struct { - struct { - Edje_Patterns *signals_patterns; - Edje_Patterns *sources_patterns; - } callbacks; - struct { - Edje_Patterns *signals_patterns; - Edje_Patterns *sources_patterns; - } programs; + Edje_Signals_Sources_Patterns callbacks; + Edje_Signals_Sources_Patterns programs; } patterns; int references; @@ -1028,7 +1030,8 @@ void _edje_program_run(Edje *ed, Edje_Program *pr, int force, const char *ssig, const char *ssrc); void _edje_emit(Edje *ed, const char *sig, const char *src); void _edje_emit_handle(Edje *ed, const char *sig, const char *src); -void _edje_clean_callbacks_patterns(Edje *ed); +void _edje_signals_sources_patterns_clean(Edje_Signals_Sources_Patterns *ssp); +void _edje_callbacks_patterns_clean(Edje *ed); void _edje_text_init(void); void _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_program.c,v retrieving revision 1.58 retrieving revision 1.59 diff -u -3 -r1.58 -r1.59 --- edje_program.c 26 Feb 2008 18:41:44 -0000 1.58 +++ edje_program.c 26 Feb 2008 20:12:00 -0000 1.59 @@ -106,7 +106,7 @@ ed->just_added_callbacks = 1; } else - _edje_clean_callbacks_patterns(ed); + _edje_callbacks_patterns_clean(ed); } /** Remove a callback from an object @@ -152,7 +152,7 @@ } else { - _edje_clean_callbacks_patterns(ed); + _edje_callbacks_patterns_clean(ed); ed->callbacks = evas_list_remove_list(ed->callbacks, l); if (escb->signal) evas_stringshare_del(escb->signal); @@ -863,6 +863,25 @@ return 0; } + +void +_edje_callbacks_patterns_clean(Edje *ed) +{ + _edje_signals_sources_patterns_clean(&ed->patterns.callbacks); +} + +static void +_edje_callbacks_patterns_init(Edje *ed) +{ + Edje_Signals_Sources_Patterns *ssp = &ed->patterns.callbacks; + + 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); +} + /* FIXME: what if we delete the evas object??? */ void _edje_emit_handle(Edje *ed, const char *sig, const char *src) @@ -978,7 +997,7 @@ _edje_block(ed); if (ed->just_added_callbacks) - _edje_clean_callbacks_patterns(ed); + _edje_callbacks_patterns_clean(ed); ed->walking_callbacks = 1; @@ -986,12 +1005,7 @@ { int r; - if (!ed->patterns.callbacks.signals_patterns) - { - ed->patterns.callbacks.signals_patterns = edje_match_callback_signal_init(ed->callbacks); - ed->patterns.callbacks.sources_patterns = edje_match_callback_source_init(ed->callbacks); - } - + _edje_callbacks_patterns_init(ed); r = edje_match_callback_exec(ed->patterns.callbacks.signals_patterns, ed->patterns.callbacks.sources_patterns, sig, @@ -1027,23 +1041,10 @@ l = next_l; } - _edje_clean_callbacks_patterns(ed); + _edje_callbacks_patterns_clean(ed); } break_prog: _edje_unblock(ed); _edje_thaw(ed); _edje_unref(ed); } - -void -_edje_clean_callbacks_patterns(Edje *ed) -{ - if (ed->patterns.callbacks.signals_patterns) - { - edje_match_patterns_free(ed->patterns.callbacks.signals_patterns); - edje_match_patterns_free(ed->patterns.callbacks.sources_patterns); - ed->patterns.callbacks.signals_patterns = NULL; - ed->patterns.callbacks.sources_patterns = NULL; - } -} - |
From: Enlightenment C. <no...@cv...> - 2008-02-27 14:27:13
|
Enlightenment CVS committal Author : barbieri Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c Log Message: Avoid useless huge implicit memcpy. The "simple" block: p3 = p1; was doing an implicity memcpy() responsible for about 1% of processing time when no animation happens. Patch by Cedric BAIL. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.115 retrieving revision 1.116 diff -u -3 -r1.115 -r1.116 --- edje_calc.c 21 Feb 2008 18:35:27 -0000 1.115 +++ edje_calc.c 27 Feb 2008 14:27:10 -0000 1.116 @@ -1288,7 +1288,7 @@ static void _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags) { - Edje_Calc_Params p1, p2, p3; + Edje_Calc_Params p1, p2, p3, *pf; Edje_Part_Description *chosen_desc; double pos = 0.0; @@ -1421,16 +1421,15 @@ p3.gradient.id = pos > 0.5 ? p2.gradient.id : p1.gradient.id; p3.gradient.type = pos > 0.5 ? p2.gradient.type : p1.gradient.type; + + pf = &p3; } else { - p3 = p1; + pf = &p1; } - ep->req.x = p3.req.x; - ep->req.y = p3.req.y; - ep->req.w = p3.req.w; - ep->req.h = p3.req.h; + ep->req = pf->req; if (ep->drag.need_reset) { @@ -1455,18 +1454,18 @@ case EDJE_PART_TYPE_TEXTBLOCK: case EDJE_PART_TYPE_GRADIENT: evas_object_color_set(ep->object, - (p3.color.r * p3.color.a) / 255, - (p3.color.g * p3.color.a) / 255, - (p3.color.b * p3.color.a) / 255, - p3.color.a); - if (p3.visible) evas_object_show(ep->object); + (pf->color.r * pf->color.a) / 255, + (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); /* move and resize are needed for all previous object => no break here. */ case EDJE_PART_TYPE_SWALLOW: case EDJE_PART_TYPE_GROUP: /* visibility and color have no meaning on SWALLOW and GROUP part. */ - evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); - evas_object_resize(ep->object, p3.w, p3.h); + evas_object_move(ep->object, ed->x + pf->x, ed->y + pf->y); + evas_object_resize(ep->object, pf->w, pf->h); break; case EDJE_PART_TYPE_TEXT: /* This is correctly handle in _edje_text_recalc_apply at the moment. */ @@ -1477,13 +1476,13 @@ switch (ep->part->type) { case EDJE_PART_TYPE_TEXT: - _edje_text_recalc_apply(ed, ep, &p3, chosen_desc); + _edje_text_recalc_apply(ed, ep, pf, chosen_desc); break; case EDJE_PART_TYPE_IMAGE: - _edje_image_recalc_apply(ed, ep, &p3, chosen_desc, pos); + _edje_image_recalc_apply(ed, ep, pf, chosen_desc, pos); break; case EDJE_PART_TYPE_GRADIENT: - _edje_gradient_recalc_apply(ed, ep, &p3, chosen_desc); + _edje_gradient_recalc_apply(ed, ep, pf, chosen_desc); break; case EDJE_PART_TYPE_RECTANGLE: case EDJE_PART_TYPE_SWALLOW: @@ -1500,21 +1499,21 @@ //// done via the clipper anyway. this created bugs when objects had their //// colro set and were swallowed - then had their color changed. // evas_object_color_set(ep->swallowed_object, -// (p3.color.r * p3.color.a) / 255, -// (p3.color.g * p3.color.a) / 255, -// (p3.color.b * p3.color.a) / 255, -// p3.color.a); - evas_object_move(ep->swallowed_object, ed->x + p3.x, ed->y + p3.y); - evas_object_resize(ep->swallowed_object, p3.w, p3.h); - if (p3.visible) evas_object_show(ep->swallowed_object); +// (pf->color.r * pf->color.a) / 255, +// (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); } } - ep->x = p3.x; - ep->y = p3.y; - ep->w = p3.w; - ep->h = p3.h; + ep->x = pf->x; + ep->y = pf->y; + ep->w = pf->w; + ep->h = pf->h; ep->calculated |= flags; ep->calculating = FLAG_NONE; |