From: Enlightenment C. <no...@cv...> - 2007-04-15 04:05:43
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_program.c Log Message: some more docs =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_program.c,v retrieving revision 1.51 retrieving revision 1.52 diff -u -3 -r1.51 -r1.52 --- edje_program.c 13 Feb 2007 09:58:49 -0000 1.51 +++ edje_program.c 15 Apr 2007 04:05:41 -0000 1.52 @@ -13,7 +13,7 @@ /** Set the frametime * @param t The frametime * - * Sets the frametime in seconds, by default this is 1/30. + * Sets the global frametime in seconds, by default this is 1/30. */ EAPI void edje_frametime_set(double t) @@ -34,14 +34,50 @@ } /* FIXDOC: Expand */ -/** Adds a callback for the object. +/** Add a callback for a signal emitted by @a obj. * @param obj A valid Evas_Object handle - * @param emission Signal to activate callback FIXDOC: Naming Convention? - * @param source Source of signal - * @param func The function to be executed when the callback is signaled - * @param data ? FIXDOC + * @param emission The signal name + * @param source The signal source + * @param func The callback function to be executed when the signal is emitted + * @param data A pointer to data to pass in to the callback function + * + * Connects a callback function to a signal emitted by @a obj. + * In EDC, a program can emit a signal as follows: + * + * @code + * program { + * name: "emit_example"; + * action: SIGNAL_EMIT "a_signal" "a_source"; + * } + * @endcode + * + * Assuming a function with the following declaration is definded: + * + * @code + * void cb_signal(void *data, Evas_Object *o, const char *emission, const char *source); + * @endcode + * + * a callback is attached using: + * + * @code + * edje_object_callback_add(obj, "a_signal", "a_source", cb_signal, data); + * @endcode + * + * Here, @a data is an arbitrary pointer to be used as desired. + * Note that @a emission and @a source correspond respectively to first and + * second parameters to the SIGNAL_EMIT action. * - * Creates a callback for the object to execute the given function. + * Internal edje signals can also be attached to, and globs can be in either + * the emission or source name. e.g. + * + * @code + * edje_object_callback_add(obj, "mouse,down,*", "button.*", NULL); + * @endcode + * + * Here, any mouse down events on an edje part whose name begins with + * "button." will trigger the callback. The actual signal and source name + * will be passed in to the @a emission and @a source parameters of the + * callback function. (e.g. "mouse,down,2" and "button.close"). */ EAPI void edje_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), void *data) @@ -68,14 +104,17 @@ } } -/* FIXDOC: Expand */ -/** Delete an object's callback +/** Remove a callback from an object * @param obj A valid Evas_Object handle - * @param emission ? FIXDOC - * @param source ? FIXDOC - * @param func ? FIXDOC + * @param emission the emission string + * @param source the source string + * @param func the callback function + * @return the data pointer * - * Deletes an existing callback + * Removes a callback from an object. The parameters @a emission, @a source + * and @a func must match exactly those passed to a previous call to + * edje_object_signal_callback_add(). The data pointer that was passed to + * this call will be returned. */ EAPI void * edje_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source)) @@ -120,13 +159,32 @@ } /* FIXDOC: Verify/Expand */ -/** Send a signal to the Edje +/** Send a signal to the Edje object * @param obj A vaild Evas_Object handle * @param emission The signal * @param source The signal source * - * This sends a signal to the edje. These are defined in the programs - * section of an edc. + * This sends a signal to the edje object. + * + * An edje program can respond to a signal by specifying matching 'signal' + * and 'source' fields. + * + * E.g. + * + * @code + * edje_object_signal_emit(obj, "a_signal", ""); + * @endcode + * + * will trigger a program whose edc is: + * + * @code + * program { + * name: "a_program"; + * signal: "a_signal"; + * source: ""; + * action: ... + * } + * @endcode */ EAPI void edje_object_signal_emit(Evas_Object *obj, const char *emission, const char *source) |
From: Enlightenment C. <no...@cv...> - 2007-04-15 04:24:11
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_util.c Log Message: docs =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_util.c,v retrieving revision 1.91 retrieving revision 1.92 diff -u -3 -r1.91 -r1.92 --- edje_util.c 4 Apr 2007 12:51:51 -0000 1.91 +++ edje_util.c 15 Apr 2007 04:24:07 -0000 1.92 @@ -26,8 +26,9 @@ /* FIXDOC: These all need to be looked over, Verified/Expanded upon. I just got lazy and stopped putting FIXDOC next to each function in this file. */ -/* FIXDOC: Expand */ -/** Freeze all objects in the Edje. +/** Freeze all Edje objects in the current process. + * + * See edje_object_freeze() for more. */ EAPI void edje_freeze(void) @@ -38,8 +39,9 @@ edje_object_freeze((Evas_Object *)(l->data)); } -/* FIXDOC: Expand */ -/** Thaw all objects in Edje. +/** Thaw all Edje objects in the current process. + * + * See edje_object_thaw() for more. */ EAPI void edje_thaw(void) @@ -71,6 +73,23 @@ * @param obj A valid Evas_Object handle * @param key The data key * @return The data string + * + * This fetches data specified at the object level. + * + * In EDC this comes from a data block within the group block that @a obj + * was loaded from. E.g. + * + * @code + * collections { + * group { + * name: "a_group"; + * data { + * item: "key1" "value1"; + * item: "key2" "value2"; + * } + * } + * } + * @endcode */ EAPI const char * edje_object_data_get(Evas_Object *obj, const char *key) @@ -634,7 +653,7 @@ * Gets the Evas_Object corresponding to a given part. * You should never modify the state of the returned object * (with evas_object_move() or evas_object_hide() for example), - * but you can safely query infos about its current state + * but you can safely query info about its current state * (with evas_object_visible_get() or evas_object_color_get() for example) * * @param obj A valid Evas_Object handle @@ -655,7 +674,7 @@ return rp->object; } -/** Get Edje part geometry +/** Get the geometry of an Edje part * @param obj A valid Evas_Object handle * @param part The Edje part * @param x The x coordinate pointer @@ -663,7 +682,10 @@ * @param w The width pointer * @param h The height pointer * - * Gets the Edje part geometry + * Gets the geometry of an Edje part + * + * It is valid to pass NULL as any of @a x, @a y, @a w or @a h, whose + * values you are uninterested in. */ EAPI void edje_object_part_geometry_get(Evas_Object *obj, const char *part, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h ) @@ -765,6 +787,9 @@ * Swallows the object into the edje part so that all geometry changes * for the part affect the swallowed object. (e.g. resize, move, show, * raise/lower, etc.). + * + * If an object has already been swallowed into this part, then it will + * first be unswallowed before the new object is swallowed. */ EAPI void edje_object_part_swallow(Evas_Object *obj, const char *part, Evas_Object *obj_swallow) @@ -954,7 +979,7 @@ * This sets the desired aspect ratio to keep an object that will be swallowed * by Edje. The width and height define a preferred size ASPECT and the * object may be scaled to be larger or smaller, but retaining the relative - * scale of both aspwct width and height. + * scale of both aspect width and height. */ EAPI void edje_extern_object_aspect_set(Evas_Object *obj, Edje_Aspect_Control aspect, Evas_Coord aw, Evas_Coord ah) @@ -1033,10 +1058,10 @@ } } -/** Get the swallowed part ?! +/** Get the object currently swallowed by a part * @param obj A valid Evas_Object handle * @param part The part name - * @return The swallowed object + * @return The swallowed object, or NULL if there is none. */ EAPI Evas_Object * edje_object_part_swallow_get(Evas_Object *obj, const char *part) @@ -1254,7 +1279,7 @@ } /** Returns the state of the Edje part - * @param obj A valid Evas_Objectart handle + * @param obj A valid Evas_Object handle * @param part The part name * @param val_ret * |
From: Enlightenment C. <no...@cv...> - 2007-05-24 03:41:13
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c Log Message: if requested scroll size is less than min, use min size. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.98 retrieving revision 1.99 diff -u -3 -r1.98 -r1.99 --- edje_calc.c 3 May 2007 23:15:09 -0000 1.98 +++ edje_calc.c 24 May 2007 03:41:04 -0000 1.99 @@ -834,8 +834,11 @@ if (flags & FLAG_X) { v = ep->drag.size.x * confine_to->w; - if ((((minw > 0) && (v > minw)) || (minw <= 0)) && - (((maxw >= 0) && (v < maxw)) || (maxw < 0))) params->w = v; + + 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) @@ -856,8 +859,11 @@ if (flags & FLAG_Y) { v = ep->drag.size.y * confine_to->h; - if ((((minh > 0) && (v > minh)) || (minh <= 0)) && - (((maxh >= 0) && (v < maxh)) || (maxh < 0))) 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) |
From: Enlightenment C. <no...@cv...> - 2007-05-24 04:34:42
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c edje_load.c edje_private.h Log Message: only clear and re-apply gradients when the spectrum actually changes =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.99 retrieving revision 1.100 diff -u -3 -r1.99 -r1.100 --- edje_calc.c 24 May 2007 03:41:04 -0000 1.99 +++ edje_calc.c 24 May 2007 04:34:40 -0000 1.100 @@ -1339,7 +1339,7 @@ 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) + if (ed->file->spectrum_dir && ed->file->spectrum_dir->entries && p3.gradient.id != ep->gradient_id) { Edje_Spectrum_Directory_Entry *se; Evas_List *l; @@ -1347,7 +1347,6 @@ se = evas_list_nth(ed->file->spectrum_dir->entries, p3.gradient.id); if (se) { - // XXX only do this if we NEED to (e.g. gradient changed) evas_object_gradient_clear(ep->object); for (l = se->color_list; l; l = l->next) { @@ -1358,6 +1357,7 @@ evas_object_gradient_alpha_stop_add(ep->object, sc->a, sc->d); } + ep->gradient_id = p3.gradient.id; } } } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.102 retrieving revision 1.103 diff -u -3 -r1.102 -r1.103 --- edje_load.c 15 Apr 2007 03:19:35 -0000 1.102 +++ edje_load.c 24 May 2007 04:34:41 -0000 1.103 @@ -145,6 +145,7 @@ } rp->drag.step.x = ep->dragable.step_x; rp->drag.step.y = ep->dragable.step_y; + rp->gradient_id = -1; } if (n > 0) { =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.122 retrieving revision 1.123 diff -u -3 -r1.122 -r1.123 --- edje_private.h 3 May 2007 23:15:09 -0000 1.122 +++ edje_private.h 24 May 2007 04:34:41 -0000 1.123 @@ -674,6 +674,9 @@ Edje_Real_Part *source; Edje_Real_Part *text_source; } text; + + int gradient_id; + double description_pos; Edje_Part_Description *chosen_description; struct { |
From: Enlightenment C. <no...@cv...> - 2007-05-26 23:57:28
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c edje_load.c edje_private.h edje_smart.c edje_text.c edje_util.c Log Message: Remove part list, using table everywhere instead =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.100 retrieving revision 1.101 diff -u -3 -r1.100 -r1.101 --- edje_calc.c 24 May 2007 04:34:40 -0000 1.100 +++ edje_calc.c 26 May 2007 23:57:21 -0000 1.101 @@ -137,7 +137,7 @@ void _edje_recalc(Edje *ed) { - Evas_List *l; + int i; if (!ed->dirty) return; if (ed->freeze) @@ -145,19 +145,19 @@ ed->recalc = 1; if (!ed->calc_only) return; } - for (l = ed->parts; l; l = l->next) + for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *ep; - ep = l->data; + ep = ed->table_parts[i]; ep->calculated = FLAG_NONE; ep->calculating = FLAG_NONE; } - for (l = ed->parts; l; l = l->next) + for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *ep; - ep = l->data; + ep = ed->table_parts[i]; if (ep->calculated != FLAG_XY) _edje_part_recalc(ed, ep, (~ep->calculated) & FLAG_XY); } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.103 retrieving revision 1.104 diff -u -3 -r1.103 -r1.104 --- edje_load.c 24 May 2007 04:34:41 -0000 1.103 +++ edje_load.c 26 May 2007 23:57:21 -0000 1.104 @@ -32,6 +32,7 @@ { Edje *ed; int n; + Evas_List *parts = NULL; Evas_List *old_swallows; ed = _edje_fetch(obj); @@ -60,6 +61,7 @@ if (ed->collection) { Evas_List *l; + int i; int errors = 0; /* colorclass stuff */ @@ -94,7 +96,7 @@ return 0; } rp->part = ep; - ed->parts = evas_list_append(ed->parts, rp); + parts = evas_list_append(parts, rp); rp->param1.description = ep->default_desc; rp->chosen_description = rp->param1.description; if (!rp->param1.description) @@ -149,30 +151,33 @@ } if (n > 0) { - /* FIXME: keeping a table AND a list is just bad - nuke list */ + Edje_Real_Part *rp; ed->table_parts = malloc(sizeof(Edje_Real_Part *) * n); ed->table_parts_size = n; /* FIXME: check malloc return */ n = 0; - for (l = ed->parts; l; l = l->next) + for (l = parts; l; l = l->next) { - Edje_Real_Part *rp; - rp = l->data; ed->table_parts[n] = rp; n++; + } + evas_list_free(parts); + for (i = 0; i < ed->table_parts_size; i++) + { + rp = ed->table_parts[i]; if (rp->param1.description->rel1.id_x >= 0) - rp->param1.rel1_to_x = evas_list_nth(ed->parts, rp->param1.description->rel1.id_x); + rp->param1.rel1_to_x = ed->table_parts[rp->param1.description->rel1.id_x % ed->table_parts_size]; if (rp->param1.description->rel1.id_y >= 0) - rp->param1.rel1_to_y = evas_list_nth(ed->parts, rp->param1.description->rel1.id_y); + rp->param1.rel1_to_y = ed->table_parts[rp->param1.description->rel1.id_y % ed->table_parts_size]; if (rp->param1.description->rel2.id_x >= 0) - rp->param1.rel2_to_x = evas_list_nth(ed->parts, rp->param1.description->rel2.id_x); + 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 = evas_list_nth(ed->parts, rp->param1.description->rel2.id_y); + 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 = evas_list_nth(ed->parts, rp->part->clip_to_id); + rp->clip_to = ed->table_parts[rp->part->clip_to_id % ed->table_parts_size]; if (rp->clip_to) { evas_object_pass_events_set(rp->clip_to->object, 1); @@ -180,14 +185,13 @@ } } if (rp->part->dragable.confine_id >= 0) - rp->confine_to = evas_list_nth(ed->parts, rp->part->dragable.confine_id); + rp->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->events_to = - evas_list_nth(ed->parts, - rp->part->dragable.events_id); + 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) @@ -205,9 +209,9 @@ rp->param1.description->text.id_text_source = -1; } if (rp->param1.description->text.id_source >= 0) - rp->text.source = evas_list_nth(ed->parts, rp->param1.description->text.id_source); + rp->text.source = ed->table_parts[rp->param1.description->text.id_source % ed->table_parts_size]; if (rp->param1.description->text.id_text_source >= 0) - rp->text.text_source = evas_list_nth(ed->parts, rp->param1.description->text.id_text_source); + rp->text.text_source = ed->table_parts[rp->param1.description->text.id_text_source % ed->table_parts_size]; } } n = evas_list_count(ed->collection->programs); @@ -232,11 +236,11 @@ _edje_freeze(ed); if (ed->collection->script) _edje_embryo_script_init(ed); _edje_var_init(ed); - for (l = ed->parts; l; l = l->next) + for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *rp; - rp = l->data; + 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; @@ -479,14 +483,14 @@ _edje_swallows_collect(Edje *ed) { Evas_List *swallows = NULL; - Evas_List *l; - if (!ed->file || !ed->parts) return NULL; + int i; + if (!ed->file || !ed->table_parts) return NULL; - for (l = ed->parts; l; l = l->next) + for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *rp; - rp = l->data; + rp = ed->table_parts[i]; if (!rp->swallowed_object) continue; swallows = evas_list_append(swallows, evas_stringshare_add(rp->part->name)); swallows = evas_list_append(swallows, rp->swallowed_object); @@ -522,14 +526,14 @@ _edje_cache_file_unref(ed->file); ed->file = NULL; } - if (ed->parts) + if (ed->table_parts) { - while (ed->parts) + int i; + for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *rp; - rp = ed->parts->data; - ed->parts = evas_list_remove(ed->parts, rp); + rp = ed->table_parts[i]; if (rp->object) { _edje_text_real_part_on_del(ed, rp); @@ -562,7 +566,6 @@ free(rp); } - ed->parts = NULL; } if (ed->actions) { =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.123 retrieving revision 1.124 diff -u -3 -r1.123 -r1.124 --- edje_private.h 24 May 2007 04:34:41 -0000 1.123 +++ edje_private.h 26 May 2007 23:57:21 -0000 1.124 @@ -585,7 +585,6 @@ Evas_Object *clipper; /* a big rect to clip this Edje to */ Edje_File *file; /* the file the data comes form */ Edje_Part_Collection *collection; /* the description being used */ - Evas_List *parts; /* private list of parts */ Evas_List *actions; /* currently running actions */ Evas_List *callbacks; Evas_List *pending_actions; =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_smart.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -3 -r1.29 -r1.30 --- edje_smart.c 21 Feb 2007 21:30:29 -0000 1.29 +++ edje_smart.c 26 May 2007 23:57:21 -0000 1.30 @@ -91,7 +91,7 @@ _edje_smart_move(Evas_Object * obj, Evas_Coord x, Evas_Coord y) { Edje *ed; - Evas_List *l; + int i; ed = evas_object_smart_data_get(obj); if (!ed) return; @@ -100,12 +100,12 @@ ed->y = y; // evas_object_move(ed->clipper, ed->x, ed->y); - for (l = ed->parts; l; l = l->next) + for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *ep; Evas_Coord ox, oy; - ep = l->data; + 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); if (ep->swallowed_object) =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_text.c,v retrieving revision 1.60 retrieving revision 1.61 diff -u -3 -r1.60 -r1.61 --- edje_text.c 3 May 2007 23:15:09 -0000 1.60 +++ edje_text.c 26 May 2007 23:57:21 -0000 1.61 @@ -75,7 +75,7 @@ o = l->data; if (ep->part->clip_to_id >= 0) { - ep->clip_to = evas_list_nth(ed->parts, ep->part->clip_to_id); + 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); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_util.c,v retrieving revision 1.93 retrieving revision 1.94 diff -u -3 -r1.93 -r1.94 --- edje_util.c 3 May 2007 23:15:09 -0000 1.93 +++ edje_util.c 26 May 2007 23:57:21 -0000 1.94 @@ -1022,15 +1022,15 @@ edje_object_part_unswallow(Evas_Object *obj, Evas_Object *obj_swallow) { Edje *ed; - Evas_List *l; + int i; ed = _edje_fetch(obj); if ((!ed) || (!obj_swallow)) return; - for (l = ed->parts; l; l = l->next) + for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *rp; - rp = l->data; + rp = ed->table_parts[i]; if (rp->swallowed_object == obj_swallow) { evas_object_smart_member_del(rp->swallowed_object); @@ -1195,7 +1195,7 @@ ok = 1; while (ok) { - Evas_List *l; + int i; ok = 0; ed->dirty = 1; @@ -1206,13 +1206,13 @@ maxh = 0; } pep = NULL; - for (l = ed->parts; l; l = l->next) + for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *ep; int w, h; int didw; - ep = l->data; + ep = ed->table_parts[i]; w = ep->w - ep->req.w; h = ep->h - ep->req.h; didw = 0; @@ -1710,13 +1710,13 @@ Edje_Real_Part * _edje_real_part_get(Edje *ed, const char *part) { - Evas_List *l; + int i; - for (l = ed->parts; l; l = l->next) + for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *rp; - rp = l->data; + rp = ed->table_parts[i]; if ((rp->part->name) && (!strcmp(rp->part->name, part))) return rp; } return NULL; |
From: Enlightenment C. <no...@cv...> - 2007-05-27 05:28:11
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: Edje.h edje_calc.c edje_data.c edje_load.c edje_main.c edje_message_queue.c edje_private.h edje_program.c edje_util.c Log Message: Add GROUP Parts to edje. These can be used to automatically swallow in another group from the same file. Parts within child groups can be referred to by a ':' separated 'full path' of part names. Any API functions that take a part name will now accept a full path also. Signals emitted by child objects will be repeated up to the parents with the source changed to be the path relative to the receiving object. E.g in the example below, a mouse moving over the lower light green rectangle would result in the parent object recieving a "mouse,move" signal with source "bot:inner". **** NEW RESTRICTION **** part names should no longer include a ':' character. This is not yet enforced by edje_cc, but will cause the part to be inaccessible from the API. Example EDC: collections { group { name: "parent"; parts { part { name: "top"; type: GROUP; source: "child"; description { state: "default" 0.0; rel2.relative: 1 0.5; } } part { name: "bot"; type: GROUP; source: "child"; description { state: "default" 0.0; rel1.relative: 0 0.5; } } } } group { name: "child"; parts { part { name: "base"; type: RECT; description { state: "default" 0.0; color: 160 208 8 255; } } part { name: "inner"; type: RECT; description { state: "default" 0.0; rel1.offset: 10 10; rel2.offset: -11 -11; color: 210 228 76 255; } } } } } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/Edje.h,v retrieving revision 1.49 retrieving revision 1.50 diff -u -3 -r1.49 -r1.50 --- Edje.h 24 Dec 2006 10:29:16 -0000 1.49 +++ Edje.h 27 May 2007 05:28:07 -0000 1.50 @@ -145,7 +145,8 @@ EDJE_LOAD_ERROR_CORRUPT_FILE = 5, EDJE_LOAD_ERROR_UNKNOWN_FORMAT = 6, EDJE_LOAD_ERROR_INCOMPATIBLE_FILE = 7, - EDJE_LOAD_ERROR_UNKNOWN_COLLECTION = 8 + EDJE_LOAD_ERROR_UNKNOWN_COLLECTION = 8, + EDJE_LOAD_ERROR_RECURSIVE_REFERENCE = 9 }; #ifdef __cplusplus =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.101 retrieving revision 1.102 diff -u -3 -r1.101 -r1.102 --- edje_calc.c 26 May 2007 23:57:21 -0000 1.101 +++ edje_calc.c 27 May 2007 05:28:07 -0000 1.102 @@ -1310,7 +1310,7 @@ if (p3.visible) evas_object_show(ep->object); else evas_object_hide(ep->object); } - else if (ep->part->type == EDJE_PART_TYPE_SWALLOW) + 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); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_data.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -3 -r1.35 -r1.36 --- edje_data.c 30 Mar 2007 23:39:41 -0000 1.35 +++ edje_data.c 27 May 2007 05:28:07 -0000 1.36 @@ -356,6 +356,7 @@ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "dragable.count_y", dragable.count_y, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "dragable.counfine_id", dragable.confine_id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "dragable.events_id", dragable.events_id, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "source", source, EET_T_STRING); NEWD("Edje_Part_Collection", Edje_Part_Collection); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.104 retrieving revision 1.105 diff -u -3 -r1.104 -r1.105 --- edje_load.c 26 May 2007 23:57:21 -0000 1.104 +++ edje_load.c 27 May 2007 05:28:07 -0000 1.105 @@ -10,6 +10,8 @@ #ifdef EDJE_PROGRAM_CACHE static int _edje_collection_free_prog_cache_matches_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata); #endif +static int _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *part, Evas_List *group_path); +static void _cb_signal_repeat(void *data, Evas_Object *obj, const char *signal, const char *source); static Evas_List *_edje_swallows_collect(Edje *ed); @@ -30,10 +32,191 @@ EAPI int edje_object_file_set(Evas_Object *obj, const char *file, const char *part) { + return _edje_object_file_set_internal(obj, file, part, NULL); +} + +/* FIXDOC: Verify/expand doc. */ +/** Get the file and group name that @a obj was loaded from + * @param obj A valid Evas_Object handle + * @param file A pointer to store a pointer to the filename in + * @param part A pointer to store a pointer to the group name in + * + * This gets the EET file location and group for the given Evas_Object. + * If @a obj is either not an edje file, or has not had its file/group set + * using edje_object_file_set(), then both @a file and @a part will be set + * to NULL. + * + * It is valid to pass in NULL for either @a file or @a part if you are not + * interested in one of the values. + */ +EAPI void +edje_object_file_get(Evas_Object *obj, const char **file, const char **part) +{ + Edje *ed; + + ed = _edje_fetch(obj); + if (!ed) + { + if (file) *file = NULL; + if (part) *part = NULL; + return; + } + if (file) *file = ed->path; + if (part) *part = ed->part; +} + +/* FIXDOC: Verify. return error? */ +/** Gets the Edje load error + * @param obj A valid Evas_Object handle + * + * @return The Edje load error:\n + * 0: No Error\n + * 1: Generic Error\n + * 2: Does not Exist\n + * 3: Permission Denied\n + * 4: Resource Allocation Failed\n + * 5: Corrupt File\n + * 6: Unknown Format\n + * 7: Incompatible File + */ +EAPI int +edje_object_load_error_get(Evas_Object *obj) +{ + Edje *ed; + + ed = _edje_fetch(obj); + if (!ed) return EDJE_LOAD_ERROR_NONE; + return ed->load_error; +} + +/** Get a list of groups in an edje file + * @param file The path to the edje file + * + * @return The Evas_List of group names (char *) + * + * Note: the list must be freed using edje_file_collection_list_free() + * when you are done with it. + */ +EAPI Evas_List * +edje_file_collection_list(const char *file) +{ + Evas_List *lst = NULL; + Edje_File *edf; + int error_ret = 0; + + if ((!file) || (!*file)) return NULL; + edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL); + if (edf != NULL) + { + if (edf->collection_dir) + { + Evas_List *l; + + for (l = edf->collection_dir->entries; l; l = l->next) + { + Edje_Part_Collection_Directory_Entry *ce; + + ce = l->data; + lst = evas_list_append(lst, evas_stringshare_add(ce->entry)); + } + } + _edje_cache_file_unref(edf); + } + return lst; +} + +/** Free file collection list + * @param lst The Evas_List of groups + * + * Frees the list returned by edje_file_collection_list(). + */ +EAPI void +edje_file_collection_list_free(Evas_List *lst) +{ + while (lst) + { + if (lst->data) evas_stringshare_del(lst->data); + lst = evas_list_remove(lst, lst->data); + } +} + +/** Determine whether a group matching glob exists in an edje file. + * @param file The file path + * @param glob A glob to match on + * + * @return 1 if a match is found, 0 otherwise + */ +EAPI int +edje_file_group_exists(const char *file, const char *glob) +{ + Edje_File *edf; + int error_ret = 0; + + if ((!file) || (!*file)) return 0; + edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL); + if (edf != NULL) + { + if (edf->collection_dir) + { + Evas_List *l; + + for (l = edf->collection_dir->entries; l; l = l->next) + { + Edje_Part_Collection_Directory_Entry *ce; + + ce = l->data; + if (_edje_glob_match(ce->entry, glob)) return 1; + } + } + _edje_cache_file_unref(edf); + } + return 0; +} + + +/** Get data from the file level data block of an edje file + * @param file The path to the .edj file + * @param key The data key + * @return The string value of the data + * + * If an edje file is built from the following edc: + * + * data { + * item: "key1" "value1"; + * item: "key2" "value2"; + * } + * collections { ... } + * + * Then, edje_file_data_get("key1") will return "value1" + */ +EAPI char * +edje_file_data_get(const char *file, const char *key) +{ + Edje_File *edf; + char *str = NULL; + int error_ret = 0; + + if (key) + { + edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL); + if ((edf != NULL) && (edf->data_cache != NULL)) + { + str = evas_hash_find(edf->data_cache, key); + if (str) str = strdup(str); + _edje_cache_file_unref(edf); + } + } + return str; +} + +static int +_edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *part, Evas_List *group_path) +{ Edje *ed; int n; Evas_List *parts = NULL; Evas_List *old_swallows; + int group_path_started = 0; ed = _edje_fetch(obj); if (!ed) return 0; @@ -95,6 +278,8 @@ ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; return 0; } + rp->edje = ed; + _edje_ref(rp->edje); rp->part = ep; parts = evas_list_append(parts, rp); rp->param1.description = ep->default_desc; @@ -113,7 +298,7 @@ rp->object = evas_object_text_add(ed->evas); evas_object_text_font_source_set(rp->object, ed->path); } - else if (ep->type == EDJE_PART_TYPE_SWALLOW) + 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); @@ -131,7 +316,7 @@ { evas_object_smart_member_add(rp->object, ed->obj); evas_object_layer_set(rp->object, evas_object_layer_get(ed->obj)); - if (ep->type != EDJE_PART_TYPE_SWALLOW) + if (ep->type != EDJE_PART_TYPE_SWALLOW && ep->type != EDJE_PART_TYPE_GROUP) { if (ep->mouse_events) { @@ -252,6 +437,85 @@ (evas_object_visible_get(obj))) evas_object_show(ed->clipper); + /* instantiate 'internal swallows' */ + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + + rp = ed->table_parts[i]; + if (!rp->part->type == EDJE_PART_TYPE_GROUP) continue; + if (rp->part->source) + { + Evas_List *l; + Evas_Object *child_obj; + Edje *child_ed; + const char *group_path_entry = evas_stringshare_add(rp->part->source); + if (!group_path) + { + group_path = evas_list_append(NULL, evas_stringshare_add(part)); + group_path_started = 1; + } + /* make sure that this group isn't already in the tree of parents */ + for (l = group_path; l; l = l->next) + { + if (l->data == group_path_entry) + { + _edje_thaw(ed); + _edje_unblock(ed); + _edje_unref(ed); + _edje_file_del(ed); + evas_stringshare_del(group_path_entry); + if (group_path_started) + { + evas_stringshare_del(group_path->data); + evas_list_free(group_path); + } + + ed->load_error = EDJE_LOAD_ERROR_RECURSIVE_REFERENCE; + return 0; + } + } + + child_obj = edje_object_add(ed->evas); + group_path = evas_list_append(group_path, group_path_entry); + if (!_edje_object_file_set_internal(child_obj, file, rp->part->source, group_path)) + { + _edje_thaw(ed); + _edje_unblock(ed); + _edje_unref(ed); + _edje_file_del(ed); + + if (group_path_started) + { + while (group_path) + { + evas_stringshare_del(group_path->data); + group_path = evas_list_remove_list(group_path, group_path); + } + } + ed->load_error = edje_object_load_error_get(child_obj); + return 0; + } + child_ed = _edje_fetch(child_obj); + child_ed->parent = evas_stringshare_add(rp->part->name); + + group_path = evas_list_remove(group_path, group_path_entry); + evas_stringshare_del(group_path_entry); + + edje_object_signal_callback_add(child_obj, "*", "*", _cb_signal_repeat, obj); + _edje_real_part_swallow(rp, child_obj); + } + } + + if (group_path_started) + { + while (group_path) + { + evas_stringshare_del(group_path->data); + group_path = evas_list_remove_list(group_path, group_path); + } + } + /* reswallow any swallows that existed before setting the file */ if (old_swallows) { @@ -287,180 +551,6 @@ return 1; } -/* FIXDOC: Verify/expand doc. */ -/** Get the file and group name that @a obj was loaded from - * @param obj A valid Evas_Object handle - * @param file A pointer to store a pointer to the filename in - * @param part A pointer to store a pointer to the group name in - * - * This gets the EET file location and group for the given Evas_Object. - * If @a obj is either not an edje file, or has not had its file/group set - * using edje_object_file_set(), then both @a file and @a part will be set - * to NULL. - * - * It is valid to pass in NULL for either @a file or @a part if you are not - * interested in one of the values. - */ -EAPI void -edje_object_file_get(Evas_Object *obj, const char **file, const char **part) -{ - Edje *ed; - - ed = _edje_fetch(obj); - if (!ed) - { - if (file) *file = NULL; - if (part) *part = NULL; - return; - } - if (file) *file = ed->path; - if (part) *part = ed->part; -} - -/* FIXDOC: Verify. return error? */ -/** Gets the Edje load error - * @param obj A valid Evas_Object handle - * - * @return The Edje load error:\n - * 0: No Error\n - * 1: Generic Error\n - * 2: Does not Exist\n - * 3: Permission Denied\n - * 4: Resource Allocation Failed\n - * 5: Corrupt File\n - * 6: Unknown Format\n - * 7: Incompatible File - */ -EAPI int -edje_object_load_error_get(Evas_Object *obj) -{ - Edje *ed; - - ed = _edje_fetch(obj); - if (!ed) return EDJE_LOAD_ERROR_NONE; - return ed->load_error; -} - -/** Get a list of groups in an edje file - * @param file The path to the edje file - * - * @return The Evas_List of group names (char *) - * - * Note: the list must be freed using edje_file_collection_list_free() - * when you are done with it. - */ -EAPI Evas_List * -edje_file_collection_list(const char *file) -{ - Evas_List *lst = NULL; - Edje_File *edf; - int error_ret = 0; - - if ((!file) || (!*file)) return NULL; - edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL); - if (edf != NULL) - { - if (edf->collection_dir) - { - Evas_List *l; - - for (l = edf->collection_dir->entries; l; l = l->next) - { - Edje_Part_Collection_Directory_Entry *ce; - - ce = l->data; - lst = evas_list_append(lst, evas_stringshare_add(ce->entry)); - } - } - _edje_cache_file_unref(edf); - } - return lst; -} - -/** Free file collection list - * @param lst The Evas_List of groups - * - * Frees the list returned by edje_file_collection_list(). - */ -EAPI void -edje_file_collection_list_free(Evas_List *lst) -{ - while (lst) - { - if (lst->data) evas_stringshare_del(lst->data); - lst = evas_list_remove(lst, lst->data); - } -} - -/** Determine whether a group matching glob exists in an edje file. - * @param file The file path - * @param glob A glob to match on - * - * @return 1 if a match is found, 0 otherwise - */ -EAPI int -edje_file_group_exists(const char *file, const char *glob) -{ - Edje_File *edf; - int error_ret = 0; - - if ((!file) || (!*file)) return 0; - edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL); - if (edf != NULL) - { - if (edf->collection_dir) - { - Evas_List *l; - - for (l = edf->collection_dir->entries; l; l = l->next) - { - Edje_Part_Collection_Directory_Entry *ce; - - ce = l->data; - if (_edje_glob_match(ce->entry, glob)) return 1; - } - } - _edje_cache_file_unref(edf); - } - return 0; -} - - -/** Get data from the file level data block of an edje file - * @param file The path to the .edj file - * @param key The data key - * @return The string value of the data - * - * If an edje file is built from the following edc: - * - * data { - * item: "key1" "value1"; - * item: "key2" "value2"; - * } - * collections { ... } - * - * Then, edje_file_data_get("key1") will return "value1" - */ -EAPI char * -edje_file_data_get(const char *file, const char *key) -{ - Edje_File *edf; - char *str = NULL; - int error_ret = 0; - - if (key) - { - edf = _edje_cache_file_coll_open(file, NULL, &error_ret, NULL); - if ((edf != NULL) && (edf->data_cache != NULL)) - { - str = evas_hash_find(edf->data_cache, key); - if (str) str = strdup(str); - _edje_cache_file_unref(edf); - } - } - return str; -} - void _edje_file_add(Edje *ed) { @@ -491,7 +581,7 @@ Edje_Real_Part *rp; rp = ed->table_parts[i]; - if (!rp->swallowed_object) continue; + if (rp->part->type != EDJE_PART_TYPE_SWALLOW || !rp->swallowed_object) continue; swallows = evas_list_append(swallows, evas_stringshare_add(rp->part->name)); swallows = evas_list_append(swallows, rp->swallowed_object); } @@ -551,8 +641,10 @@ if (rp->part->mouse_events) _edje_callbacks_del(rp->swallowed_object); rp->swallowed_object = NULL; -/* I think it would be better swallowed objects dont get deleted */ -/* evas_object_del(rp->swallowed_object);*/ + +/* 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); } if (rp->text.text) evas_stringshare_del(rp->text.text); if (rp->text.font) evas_stringshare_del(rp->text.font); @@ -564,6 +656,7 @@ _edje_collection_free_part_description_free(rp->custom.description); } + _edje_unref(rp->edje); free(rp); } } @@ -859,3 +952,18 @@ fdata = NULL; } #endif + +static void +_cb_signal_repeat(void *data, Evas_Object *obj, const char *signal, const char *source) +{ + Evas_Object *parent; + Edje *ed; + char new_src[4096]; /* XXX is this max reasonable? */ + + parent = data; + ed = _edje_fetch(obj); + if (!ed) return; + snprintf(new_src, sizeof(new_src), "%s%c%s", ed->parent, EDJE_PART_PATH_SEPARATOR, source); + + edje_object_signal_emit(parent, signal, new_src); +} =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_main.c,v retrieving revision 1.49 retrieving revision 1.50 diff -u -3 -r1.49 -r1.50 --- edje_main.c 21 Jan 2006 22:38:01 -0000 1.49 +++ edje_main.c 27 May 2007 05:28:07 -0000 1.50 @@ -85,6 +85,7 @@ _edje_file_del(ed); if (ed->path) evas_stringshare_del(ed->path); if (ed->part) evas_stringshare_del(ed->part); + if (ed->parent) evas_stringshare_del(ed->parent); ed->path = NULL; ed->part = NULL; if ((ed->actions) || (ed->pending_actions)) =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_message_queue.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- edje_message_queue.c 5 May 2007 15:14:16 -0000 1.26 +++ edje_message_queue.c 27 May 2007 05:28:07 -0000 1.27 @@ -8,6 +8,7 @@ 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) { =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.124 retrieving revision 1.125 diff -u -3 -r1.124 -r1.125 --- edje_private.h 26 May 2007 23:57:21 -0000 1.124 +++ edje_private.h 27 May 2007 05:28:07 -0000 1.125 @@ -132,7 +132,8 @@ #define EDJE_PART_TYPE_SWALLOW 4 #define EDJE_PART_TYPE_TEXTBLOCK 5 #define EDJE_PART_TYPE_GRADIENT 6 -#define EDJE_PART_TYPE_LAST 7 +#define EDJE_PART_TYPE_GROUP 7 +#define EDJE_PART_TYPE_LAST 8 #define EDJE_TEXT_EFFECT_NONE 0 #define EDJE_TEXT_EFFECT_PLAIN 1 @@ -208,6 +209,8 @@ #define EDJE_STATE_PARAM_VISIBLE 31 #define EDJE_STATE_PARAM_LAST 32 +#define EDJE_PART_PATH_SEPARATOR ':' +#define EDJE_PART_PATH_SEPARATOR_STRING ":" /*----------*/ struct _Edje_File @@ -421,6 +424,7 @@ /* davinchi */ int events_id; /* If it is used as scrollbar */ } dragable; + char *source; }; struct _Edje_Part_Image_Id @@ -562,6 +566,7 @@ { const char *path; const char *part; + const char *parent; Evas_Coord x, y, w, h; struct { @@ -617,6 +622,7 @@ struct _Edje_Real_Part { + Edje *edje; int x, y, w, h; struct { int x, y, w, h; @@ -951,6 +957,7 @@ Evas_Font_Size _edje_text_size_calc(Evas_Font_Size size, Edje_Text_Class *tc); Edje_Real_Part *_edje_real_part_get(Edje *ed, const char *part); +Edje_Real_Part *_edje_real_part_recursive_get(Edje *ed, const char *part); Edje_Color_Class *_edje_color_class_find(Edje *ed, const char *color_class); void _edje_color_class_member_add(Edje *ed, const char *color_class); void _edje_color_class_member_del(Edje *ed, const char *color_class); @@ -973,6 +980,7 @@ int _edje_block_break(Edje *ed); void _edje_block_violate(Edje *ed); void _edje_object_part_swallow_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +void _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow); void _edje_embryo_script_init (Edje *ed); void _edje_embryo_script_shutdown (Edje *ed); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_program.c,v retrieving revision 1.52 retrieving revision 1.53 diff -u -3 -r1.52 -r1.53 --- edje_program.c 15 Apr 2007 04:05:41 -0000 1.52 +++ edje_program.c 27 May 2007 05:28:07 -0000 1.53 @@ -1,3 +1,6 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ #include "Edje.h" #include "edje_private.h" @@ -185,6 +188,8 @@ * action: ... * } * @endcode + * + * FIXME should this signal be sent to children also? */ EAPI void edje_object_signal_emit(Evas_Object *obj, const char *emission, const char *source) @@ -212,6 +217,7 @@ Edje *ed; double t; Evas_List *l; + int i; ed = _edje_fetch(obj); if (!ed) return; @@ -235,6 +241,14 @@ ed->paused = 1; ed->paused_at = ecore_time_get(); } + + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + rp = ed->table_parts[i]; + if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object) + edje_object_play_set(rp->swallowed_object, play); + } } /* FIXDOC: Verify/Expand */ @@ -267,6 +281,7 @@ { Edje *ed; Evas_List *l; + int i; ed = _edje_fetch(obj); if (!ed) return; @@ -304,6 +319,15 @@ } } break_prog: + + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + rp = ed->table_parts[i]; + if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object) + edje_object_animation_set(rp->swallowed_object, on); + } + _edje_thaw(ed); _edje_unblock(ed); } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_util.c,v retrieving revision 1.94 retrieving revision 1.95 diff -u -3 -r1.94 -r1.95 --- edje_util.c 26 May 2007 23:57:21 -0000 1.94 +++ edje_util.c 27 May 2007 05:28:07 -0000 1.95 @@ -1,6 +1,8 @@ /* * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 */ +#include <stddef.h> +#include <Ecore_Str.h> #include "Edje.h" #include "edje_private.h" @@ -22,6 +24,8 @@ static Evas_Bool _edje_color_class_list_foreach(Evas_Hash *hash, const char *key, void *data, void *fdata); static Evas_Bool _edje_text_class_list_foreach(Evas_Hash *hash, const char *key, void *data, void *fdata); +Edje_Real_Part *_edje_real_part_recursive_get_helper(Edje *ed, char **path); + /************************** API Routines **************************/ /* FIXDOC: These all need to be looked over, Verified/Expanded upon. I just got lazy and stopped putting FIXDOC next to each function in this file. */ @@ -125,9 +129,17 @@ edje_object_freeze(Evas_Object *obj) { Edje *ed; + int i; ed = _edje_fetch(obj); if (!ed) return 0; + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + rp = ed->table_parts[i]; + if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object) + edje_object_freeze(rp->swallowed_object); + } return _edje_freeze(ed); } @@ -142,9 +154,17 @@ edje_object_thaw(Evas_Object *obj) { Edje *ed; + int i; ed = _edje_fetch(obj); if (!ed) return 0; + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + rp = ed->table_parts[i]; + if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object) + edje_object_thaw(rp->swallowed_object); + } return _edje_thaw(ed); } @@ -329,6 +349,7 @@ Edje *ed; Evas_List *l; Edje_Color_Class *cc; + int i; ed = _edje_fetch(obj); if ((!ed) || (!color_class)) return; @@ -391,6 +412,15 @@ cc->a3 = a3; ed->color_classes = evas_list_append(ed->color_classes, cc); ed->dirty = 1; + + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + rp = ed->table_parts[i]; + if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object) + edje_object_color_class_set(rp->swallowed_object, color_class, r, g, b, a, r2, g2, b2, a2, r3, g3, b3, a3); + } + _edje_recalc(ed); } @@ -406,6 +436,7 @@ Edje *ed; Evas_List *l; Edje_Color_Class *cc = NULL; + int i; if (!color_class) return; @@ -422,7 +453,14 @@ } } - ed = _edje_fetch(obj); + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + rp = ed->table_parts[i]; + if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object) + edje_object_color_class_del(rp->swallowed_object, color_class); + } + ed->dirty = 1; _edje_recalc(ed); } @@ -573,6 +611,7 @@ Edje *ed; Evas_List *l; Edje_Text_Class *tc; + int i; ed = _edje_fetch(obj); if ((!ed) || (!text_class)) return; @@ -620,6 +659,14 @@ else tc->font = NULL; tc->size = size; + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + rp = ed->table_parts[i]; + if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object) + edje_object_text_class_set(rp->swallowed_object, text_class, font, size); + } + /* Add to edje's text class list */ ed->text_classes = evas_list_append(ed->text_classes, tc); ed->dirty = 1; @@ -641,7 +688,7 @@ ed = _edje_fetch(obj); if ((!ed) || (!part)) return 0; - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return 0; return 1; } @@ -666,7 +713,7 @@ ed = _edje_fetch(obj); if ((!ed) || (!part)) return NULL; - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return NULL; return rp->object; } @@ -699,7 +746,7 @@ if (h) *h = 0; return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { if (x) *x = 0; @@ -719,11 +766,20 @@ edje_object_text_change_cb_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, const char *part), void *data) { Edje *ed; + int i; ed = _edje_fetch(obj); if (!ed) return; ed->text_change.func = func; ed->text_change.data = data; + + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + rp = ed->table_parts[i]; + if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object) + edje_object_text_change_cb_set(rp->swallowed_object, func, data); + } } /** Sets the text for an object part @@ -739,7 +795,7 @@ ed = _edje_fetch(obj); if ((!ed) || (!part)) return; - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return; if ((rp->part->type != EDJE_PART_TYPE_TEXT) && (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK)) return; @@ -751,9 +807,9 @@ if (rp->text.text) evas_stringshare_del(rp->text.text); if (text) rp->text.text = evas_stringshare_add(text); else rp->text.text = NULL; - ed->dirty = 1; - _edje_recalc(ed); - if (ed->text_change.func) ed->text_change.func(ed->text_change.data, obj, part); + rp->edje->dirty = 1; + _edje_recalc(rp->edje); + if (rp->edje->text_change.func) rp->edje->text_change.func(rp->edje->text_change.data, obj, part); } /** Returns the text of the object part @@ -769,7 +825,7 @@ ed = _edje_fetch(obj); if ((!ed) || (!part)) return NULL; - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return NULL; if (rp->part->type == EDJE_PART_TYPE_TEXT) return rp->text.text; @@ -793,95 +849,13 @@ { Edje *ed; Edje_Real_Part *rp; - char *type; ed = _edje_fetch(obj); if ((!ed) || (!part)) return; - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return; - if (rp->swallowed_object) - { - evas_object_smart_member_del(rp->swallowed_object); - evas_object_event_callback_del(rp->swallowed_object, - EVAS_CALLBACK_FREE, - _edje_object_part_swallow_free_cb); - evas_object_clip_unset(rp->swallowed_object); - 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; - } - if (!obj_swallow) return; - rp->swallowed_object = obj_swallow; - evas_object_smart_member_add(rp->swallowed_object, ed->obj); - if (rp->clip_to) - evas_object_clip_set(rp->swallowed_object, rp->clip_to->object); - else evas_object_clip_set(rp->swallowed_object, ed->clipper); - evas_object_stack_above(rp->swallowed_object, rp->object); - evas_object_event_callback_add(rp->swallowed_object, - EVAS_CALLBACK_FREE, - _edje_object_part_swallow_free_cb, - obj); - type = (char *)evas_object_type_get(obj_swallow); - rp->swallow_params.min.w = 0; - rp->swallow_params.min.w = 0; - rp->swallow_params.max.w = -1; - rp->swallow_params.max.h = -1; - if ((type) && (!strcmp(type, "edje"))) - { - Evas_Coord w, h; - - edje_object_size_min_get(obj_swallow, &w, &h); - rp->swallow_params.min.w = w; - rp->swallow_params.min.h = h; - edje_object_size_max_get(obj_swallow, &w, &h); - rp->swallow_params.max.w = w; - rp->swallow_params.max.h = h; - } - else if ((type) && ((!strcmp(type, "text")) || - (!strcmp(type, "polygon")) || - (!strcmp(type, "line")))) - { - Evas_Coord w, h; - - evas_object_geometry_get(obj_swallow, NULL, NULL, &w, &h); - rp->swallow_params.min.w = w; - rp->swallow_params.min.h = h; - rp->swallow_params.max.w = w; - rp->swallow_params.max.h = h; - } - { - int w1, h1, w2, h2, am, aw, ah; - - w1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minw"); - h1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minh"); - w2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxw"); - h2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxh"); - am = (int)evas_object_data_get(obj_swallow, "\377 edje.aspm"); - aw = (int)evas_object_data_get(obj_swallow, "\377 edje.aspw"); - ah = (int)evas_object_data_get(obj_swallow, "\377 edje.asph"); - rp->swallow_params.min.w = w1; - rp->swallow_params.min.h = h1; - if (w2 > 0) rp->swallow_params.max.w = w2; - if (h2 > 0) rp->swallow_params.max.h = h2; - rp->swallow_params.aspect.mode = am; - rp->swallow_params.aspect.w = aw; - rp->swallow_params.aspect.h = ah; - evas_object_data_set(rp->swallowed_object, "\377 edje.swallowing_part", rp); - } - - if (rp->part->mouse_events) - { - _edje_callbacks_add(obj_swallow, ed, rp); - if (rp->part->repeat_events) - evas_object_repeat_events_set(obj_swallow, 1); - } - else - evas_object_pass_events_set(obj_swallow, 1); - - - ed->dirty = 1; - _edje_recalc(ed); + if (rp->part->type != EDJE_PART_TYPE_SWALLOW) return; + _edje_real_part_swallow(rp, obj_swallow); } static void @@ -1022,36 +996,31 @@ edje_object_part_unswallow(Evas_Object *obj, Evas_Object *obj_swallow) { Edje *ed; - int i; + Edje_Real_Part *rp; - ed = _edje_fetch(obj); - if ((!ed) || (!obj_swallow)) return; - for (i = 0; i < ed->table_parts_size; i++) + if (!obj_swallow) return; + + rp = (Edje_Real_Part *)evas_object_data_get(obj_swallow, "\377 edje.swallowing_part"); + if (rp && rp->swallowed_object == obj_swallow) { - Edje_Real_Part *rp; - - rp = ed->table_parts[i]; - if (rp->swallowed_object == obj_swallow) - { - evas_object_smart_member_del(rp->swallowed_object); - evas_object_event_callback_del(rp->swallowed_object, - EVAS_CALLBACK_FREE, - _edje_object_part_swallow_free_cb); - evas_object_clip_unset(rp->swallowed_object); - 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; - rp->swallow_params.min.w = 0; - rp->swallow_params.min.h = 0; - rp->swallow_params.max.w = 0; - rp->swallow_params.max.h = 0; - ed->dirty = 1; - _edje_recalc(ed); - return; - } + evas_object_smart_member_del(rp->swallowed_object); + evas_object_event_callback_del(rp->swallowed_object, + EVAS_CALLBACK_FREE, + _edje_object_part_swallow_free_cb); + evas_object_clip_unset(rp->swallowed_object); + 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; + rp->swallow_params.min.w = 0; + rp->swallow_params.min.h = 0; + rp->swallow_params.max.w = 0; + rp->swallow_params.max.h = 0; + rp->edje->dirty = 1; + _edje_recalc(rp->edje); + return; } } @@ -1068,7 +1037,7 @@ ed = _edje_fetch(obj); if ((!ed) || (!part)) return NULL; - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return NULL; return rp->swallowed_object; } @@ -1297,7 +1266,7 @@ if (val_ret) *val_ret = 0; return ""; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { if (val_ret) *val_ret = 0; @@ -1344,7 +1313,7 @@ { return EDJE_DRAG_DIR_NONE; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { return EDJE_DRAG_DIR_NONE; @@ -1374,7 +1343,7 @@ { return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { return; @@ -1390,8 +1359,8 @@ if ((rp->drag.val.x == dx) && (rp->drag.val.y == dy)) return; rp->drag.val.x = dx; rp->drag.val.y = dy; - _edje_dragable_pos_set(ed, rp, dx, dy); - _edje_emit(ed, "drag,set", rp->part->name); + _edje_dragable_pos_set(rp->edje, rp, dx, dy); + _edje_emit(rp->edje, "drag,set", rp->part->name); } /** Get the dragable object location @@ -1417,7 +1386,7 @@ if (dy) *dy = 0; return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { if (dx) *dx = 0; @@ -1451,7 +1420,7 @@ { return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { return; @@ -1463,8 +1432,8 @@ if ((rp->drag.size.x == dw) && (rp->drag.size.y == dh)) return; rp->drag.size.x = dw; rp->drag.size.y = dh; - ed->dirty = 1; - _edje_recalc(ed); + rp->edje->dirty = 1; + _edje_recalc(rp->edje); } /** Get the dragable object size @@ -1488,7 +1457,7 @@ if (dh) *dh = 0; return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { if (dw) *dw = 0; @@ -1518,7 +1487,7 @@ { return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { return; @@ -1552,7 +1521,7 @@ if (dy) *dy = 0; return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { if (dx) *dx = 0; @@ -1582,7 +1551,7 @@ { return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { return; @@ -1616,7 +1585,7 @@ if (dy) *dy = 0; return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { if (dx) *dx = 0; @@ -1648,7 +1617,7 @@ { return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { return; @@ -1661,8 +1630,8 @@ 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; - _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y); - _edje_emit(ed, "drag,step", rp->part->name); + _edje_dragable_pos_set(rp->edje, rp, rp->drag.val.x, rp->drag.val.y); + _edje_emit(rp->edje, "drag,step", rp->part->name); } /** Pages x,y steps @@ -1686,7 +1655,7 @@ { return; } - rp = _edje_real_part_get(ed, (char *)part); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { return; @@ -1699,10 +1668,43 @@ 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; - _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y); - _edje_emit(ed, "drag,page", rp->part->name); + _edje_dragable_pos_set(rp->edje, rp, rp->drag.val.x, rp->drag.val.y); + _edje_emit(rp->edje, "drag,page", rp->part->name); +} + +Edje_Real_Part * +_edje_real_part_recursive_get(Edje *ed, const char *part) +{ + Edje_Real_Part *rp; + char **path; + path = ecore_str_split(part, EDJE_PART_PATH_SEPARATOR_STRING, 0); + if (!path) return NULL; + + //printf("recursive get: %s\n", part); + rp = _edje_real_part_recursive_get_helper(ed, path); + + free(*path); + free(path); + return rp; } +Edje_Real_Part * +_edje_real_part_recursive_get_helper(Edje *ed, char **path) +{ + Edje_Real_Part *rp; + //printf(" lookup: %s on %s\n", path[0], ed->parent ? ed->parent : "-"); + rp = _edje_real_part_get(ed, path[0]); + if (path[1] == NULL) + return rp; + + if (!rp || rp->part->type != EDJE_PART_TYPE_GROUP || !rp->swallowed_object) return NULL; + + ed = _edje_fetch(rp->swallowed_object); + if (!ed) return NULL; + + path++; + return _edje_real_part_recursive_get_helper(ed, path); +} /* Private Routines */ @@ -2034,3 +2036,94 @@ e = NULL; event_info = NULL; } + +void +_edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow) +{ + char *type; + + if (rp->swallowed_object) + { + evas_object_smart_member_del(rp->swallowed_object); + evas_object_event_callback_del(rp->swallowed_object, + EVAS_CALLBACK_FREE, + _edje_object_part_swallow_free_cb); + evas_object_clip_unset(rp->swallowed_object); + 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; + } + if (!obj_swallow) return; + rp->swallowed_object = obj_swallow; + evas_object_smart_member_add(rp->swallowed_object, rp->edje->obj); + if (rp->clip_to) + evas_object_clip_set(rp->swallowed_object, rp->clip_to->object); + else evas_object_clip_set(rp->swallowed_object, rp->edje->clipper); + evas_object_stack_above(rp->swallowed_object, rp->object); + evas_object_event_callback_add(rp->swallowed_object, + EVAS_CALLBACK_FREE, + _edje_object_part_swallow_free_cb, + rp->edje->obj); + type = (char *)evas_object_type_get(obj_swallow); + rp->swallow_params.min.w = 0; + rp->swallow_params.min.w = 0; + rp->swallow_params.max.w = -1; + rp->swallow_params.max.h = -1; + if ((type) && (!strcmp(type, "edje"))) + { + Evas_Coord w, h; + + edje_object_size_min_get(obj_swallow, &w, &h); + rp->swallow_params.min.w = w; + rp->swallow_params.min.h = h; + edje_object_size_max_get(obj_swallow, &w, &h); + rp->swallow_params.max.w = w; + rp->swallow_params.max.h = h; + } + else if ((type) && ((!strcmp(type, "text")) || + (!strcmp(type, "polygon")) || + (!strcmp(type, "line")))) + { + Evas_Coord w, h; + + evas_object_geometry_get(obj_swallow, NULL, NULL, &w, &h); + rp->swallow_params.min.w = w; + rp->swallow_params.min.h = h; + rp->swallow_params.max.w = w; + rp->swallow_params.max.h = h; + } + { + int w1, h1, w2, h2, am, aw, ah; + + w1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minw"); + h1 = (int)evas_object_data_get(obj_swallow, "\377 edje.minh"); + w2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxw"); + h2 = (int)evas_object_data_get(obj_swallow, "\377 edje.maxh"); + am = (int)evas_object_data_get(obj_swallow, "\377 edje.aspm"); + aw = (int)evas_object_data_get(obj_swallow, "\377 edje.aspw"); + ah = (int)evas_object_data_get(obj_swallow, "\377 edje.asph"); + rp->swallow_params.min.w = w1; + rp->swallow_params.min.h = h1; + if (w2 > 0) rp->swallow_params.max.w = w2; + if (h2 > 0) rp->swallow_params.max.h = h2; + rp->swallow_params.aspect.mode = am; + rp->swallow_params.aspect.w = aw; + rp->swallow_params.aspect.h = ah; + evas_object_data_set(rp->swallowed_object, "\377 edje.swallowing_part", rp); + } + + if (rp->part->mouse_events) + { + _edje_callbacks_add(obj_swallow, rp->edje, rp); + if (rp->part->repeat_events) + evas_object_repeat_events_set(obj_swallow, 1); + } + else + evas_object_pass_events_set(obj_swallow, 1); + + + rp->edje->dirty = 1; + _edje_recalc(rp->edje); +} + |
From: Enlightenment C. <no...@cv...> - 2007-05-27 05:28:39
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/bin Modified Files: edje_cc_handlers.c Log Message: Add GROUP Parts to edje. These can be used to automatically swallow in another group from the same file. Parts within child groups can be referred to by a ':' separated 'full path' of part names. Any API functions that take a part name will now accept a full path also. Signals emitted by child objects will be repeated up to the parents with the source changed to be the path relative to the receiving object. E.g in the example below, a mouse moving over the lower light green rectangle would result in the parent object recieving a "mouse,move" signal with source "bot:inner". **** NEW RESTRICTION **** part names should no longer include a ':' character. This is not yet enforced by edje_cc, but will cause the part to be inaccessible from the API. Example EDC: collections { group { name: "parent"; parts { part { name: "top"; type: GROUP; source: "child"; description { state: "default" 0.0; rel2.relative: 1 0.5; } } part { name: "bot"; type: GROUP; source: "child"; description { state: "default" 0.0; rel1.relative: 0 0.5; } } } } group { name: "child"; parts { part { name: "base"; type: RECT; description { state: "default" 0.0; color: 160 208 8 255; } } part { name: "inner"; type: RECT; description { state: "default" 0.0; rel1.offset: 10 10; rel2.offset: -11 -11; color: 210 228 76 255; } } } } } =================================================================== RCS file: /cvs/e/e17/libs/edje/src/bin/edje_cc_handlers.c,v retrieving revision 1.72 retrieving revision 1.73 diff -u -3 -r1.72 -r1.73 --- edje_cc_handlers.c 31 Mar 2007 10:53:22 -0000 1.72 +++ edje_cc_handlers.c 27 May 2007 05:28:07 -0000 1.73 @@ -45,6 +45,7 @@ static void st_collections_group_parts_part_repeat_events(void); static void st_collections_group_parts_part_use_alternate_font_metrics(void); static void st_collections_group_parts_part_clip_to_id(void); +static void st_collections_group_parts_part_source(void); static void st_collections_group_parts_part_dragable_x(void); static void st_collections_group_parts_part_dragable_y(void); static void st_collections_group_parts_part_dragable_confine(void); @@ -179,6 +180,7 @@ {"collections.group.parts.part.repeat_events", st_collections_group_parts_part_repeat_events}, {"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}, + {"collections.group.parts.part.source", st_collections_group_parts_part_source}, {"collections.group.parts.part.dragable.x", st_collections_group_parts_part_dragable_x}, {"collections.group.parts.part.dragable.y", st_collections_group_parts_part_dragable_y}, {"collections.group.parts.part.dragable.confine", st_collections_group_parts_part_dragable_confine}, @@ -949,6 +951,7 @@ "SWALLOW", EDJE_PART_TYPE_SWALLOW, "TEXTBLOCK", EDJE_PART_TYPE_TEXTBLOCK, "GRADIENT", EDJE_PART_TYPE_GRADIENT, + "GROUP", EDJE_PART_TYPE_GROUP, NULL); } @@ -1008,6 +1011,29 @@ data_queue_part_lookup(pc, name, &(ep->clip_to_id)); free(name); } +} + +static void +st_collections_group_parts_part_source(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)); + + if (ep->type != EDJE_PART_TYPE_GROUP) + { + fprintf(stderr, "%s: Error. parse error %s:%i. " + "source attribute in non-GROUP part.\n", + progname, file_in, line - 1); + exit(-1); + } + + //XXX validate this somehow (need to decide on the format also) + ep->source = parse_str(0); } static void |
From: Enlightenment C. <no...@cv...> - 2007-05-27 05:30:08
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje Modified Files: AUTHORS Log Message: AUTHOR++ =================================================================== RCS file: /cvs/e/e17/libs/edje/AUTHORS,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- AUTHORS 2 Jul 2006 06:18:17 -0000 1.4 +++ AUTHORS 27 May 2007 05:30:05 -0000 1.5 @@ -2,3 +2,4 @@ Tilman Sauerbeck (tilman at code-monkey de) ZigsMcKenzie <zig...@gm...> Cedric BAIL <ced...@fr...> +Brian Mattern <re...@re...> |
From: Enlightenment C. <no...@cv...> - 2007-07-06 22:36:41
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c edje_data.c edje_private.h Log Message: add cedric bail's fill.type patch. you can now include "type: TILE;" in the fill block to tile an image part at the size of its image data =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.102 retrieving revision 1.103 diff -u -3 -r1.102 -r1.103 --- edje_calc.c 27 May 2007 05:28:07 -0000 1.102 +++ edje_calc.c 6 Jul 2007 22:36:40 -0000 1.103 @@ -974,13 +974,26 @@ params->smooth = desc->fill.smooth; if (flags & FLAG_X) { - params->fill.x = desc->fill.pos_abs_x + (params->w * desc->fill.pos_rel_x); - params->fill.w = desc->fill.abs_x + (params->w * desc->fill.rel_x); + int fw; + + if (desc->fill.type == EDJE_FILL_TYPE_TILE) + evas_object_image_size_get(ep->object, &fw, NULL); + else + fw = params->w; + + params->fill.x = desc->fill.pos_abs_x + (fw * desc->fill.pos_rel_x); + params->fill.w = desc->fill.abs_x + (fw * desc->fill.rel_x); } if (flags & FLAG_Y) { - params->fill.y = desc->fill.pos_abs_y + (params->h * desc->fill.pos_rel_y); - params->fill.h = desc->fill.abs_y + (params->h * desc->fill.rel_y); + int fh; + if (desc->fill.type == EDJE_FILL_TYPE_TILE) + evas_object_image_size_get(ep->object, NULL, &fh); + else + fh = params->h; + + params->fill.y = desc->fill.pos_abs_y + (fh * desc->fill.pos_rel_y); + params->fill.h = desc->fill.abs_y + (fh * desc->fill.rel_y); } params->fill.angle = desc->fill.angle; params->fill.spread = desc->fill.spread; =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_data.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -3 -r1.36 -r1.37 --- edje_data.c 27 May 2007 05:28:07 -0000 1.36 +++ edje_data.c 6 Jul 2007 22:36:40 -0000 1.37 @@ -293,6 +293,7 @@ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "fill.abs_y", fill.abs_y, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "fill.angle", fill.angle, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "fill.spread", fill.spread, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "fill.type", fill.type, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "color_class", color_class, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "color.r", color.r, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "color.g", color.g, EET_T_UCHAR); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.126 retrieving revision 1.127 diff -u -3 -r1.126 -r1.127 --- edje_private.h 28 Jun 2007 23:22:20 -0000 1.126 +++ edje_private.h 6 Jul 2007 22:36:40 -0000 1.127 @@ -504,6 +504,7 @@ int angle; /* angle of fill -- currently only used by grads */ int spread; /* spread of fill -- currently only used by grads */ char smooth; /* fill with smooth scaling or not */ + unsigned char type; /* fill coordinate from container (SCALE) or from source image (TILE) */ } fill; char *color_class; /* how to modify the color */ @@ -883,6 +884,12 @@ int id; unsigned char *msg; }; + +typedef enum _Edje_Fill +{ + EDJE_FILL_TYPE_SCALE = 0, + EDJE_FILL_TYPE_TILE +} Edje_Fill; EAPI extern Eet_Data_Descriptor *_edje_edd_edje_file; EAPI extern Eet_Data_Descriptor *_edje_edd_edje_style; |
From: Enlightenment C. <no...@cv...> - 2007-07-06 22:37:12
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/bin Modified Files: edje_cc_handlers.c Log Message: add cedric bail's fill.type patch. you can now include "type: TILE;" in the fill block to tile an image part at the size of its image data =================================================================== RCS file: /cvs/e/e17/libs/edje/src/bin/edje_cc_handlers.c,v retrieving revision 1.73 retrieving revision 1.74 diff -u -3 -r1.73 -r1.74 --- edje_cc_handlers.c 27 May 2007 05:28:07 -0000 1.73 +++ edje_cc_handlers.c 6 Jul 2007 22:36:40 -0000 1.74 @@ -83,6 +83,7 @@ static void st_collections_group_parts_part_description_fill_size_offset(void); static void st_collections_group_parts_part_description_fill_angle(void); static void st_collections_group_parts_part_description_fill_spread(void); +static void st_collections_group_parts_part_description_fill_type(void); static void st_collections_group_parts_part_description_color_class(void); static void st_collections_group_parts_part_description_color(void); static void st_collections_group_parts_part_description_color2(void); @@ -229,6 +230,7 @@ {"collections.group.parts.part.description.fill.size.offset", st_collections_group_parts_part_description_fill_size_offset}, {"collections.group.parts.part.description.fill.angle", st_collections_group_parts_part_description_fill_angle}, {"collections.group.parts.part.description.fill.spread", st_collections_group_parts_part_description_fill_spread}, + {"collections.group.parts.part.description.fill.type", st_collections_group_parts_part_description_fill_type}, {"collections.group.parts.part.description.color_class", st_collections_group_parts_part_description_color_class}, {"collections.group.parts.part.description.color", st_collections_group_parts_part_description_color}, {"collections.group.parts.part.description.color2", st_collections_group_parts_part_description_color2}, @@ -1151,6 +1153,7 @@ ed->fill.abs_y = 0; ed->fill.angle = 0; ed->fill.spread = 0; + ed->fill.type = EDJE_FILL_TYPE_SCALE; ed->color_class = NULL; ed->color.r = 255; ed->color.g = 255; @@ -1801,7 +1804,7 @@ if (ep->type != EDJE_PART_TYPE_IMAGE) { fprintf(stderr, "%s: Error. parse error %s:%i. " - "fill attributes in non-IMAGE part.\n", + "fill.type attribute in non-IMAGE part.\n", progname, file_in, line - 1); exit(-1); } @@ -2656,6 +2659,34 @@ ep = evas_list_data(evas_list_last(pc->programs)); ep->in.from = parse_float_range(0, 0.0, 999999999.0); ep->in.range = parse_float_range(1, 0.0, 999999999.0); +} + +static void +st_collections_group_parts_part_description_fill_type(void) +{ + Edje_Part_Collection *pc; + Edje_Part *ep; + Edje_Part_Description *ed; + + check_arg_count(1); + + pc = evas_list_data(evas_list_last(edje_collections)); + ep = evas_list_data(evas_list_last(pc->parts)); + ed = ep->default_desc; + if (ep->other_desc) ed = evas_list_data(evas_list_last(ep->other_desc)); + + if (ep->type != EDJE_PART_TYPE_IMAGE) + { + fprintf(stderr, "%s: Error. parse error %s:%i. " + "fill attributes in non-IMAGE part.\n", + progname, file_in, line - 1); + exit(-1); + } + + ed->fill.type = parse_enum(0, + "SCALE", EDJE_FILL_TYPE_SCALE, + "TILE", EDJE_FILL_TYPE_TILE, + NULL); } static void |
From: Enlightenment C. <no...@cv...> - 2007-07-12 21:30:38
|
Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/edje Dir : e17/libs/edje/src/lib Modified Files: edje_load.c Log Message: yikes =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.105 retrieving revision 1.106 diff -u -3 -r1.105 -r1.106 --- edje_load.c 27 May 2007 05:28:07 -0000 1.105 +++ edje_load.c 12 Jul 2007 21:30:36 -0000 1.106 @@ -443,7 +443,7 @@ Edje_Real_Part *rp; rp = ed->table_parts[i]; - if (!rp->part->type == EDJE_PART_TYPE_GROUP) continue; + if (rp->part->type != EDJE_PART_TYPE_GROUP) continue; if (rp->part->source) { Evas_List *l; |