Enlightenment CVS committal Author : raster Project : e17 Module : libs/edje
Dir : e17/libs/edje/src/lib Modified Files: edje_callbacks.c edje_data.c edje_load.c edje_private.h Log Message: pavel's patch. :) =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_callbacks.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- edje_callbacks.c 14 Dec 2004 03:24:32 -0000 1.18 +++ edje_callbacks.c 26 Jul 2005 13:59:02 -0000 1.19 @@ -1,3 +1,8 @@ +/* + * vim: ts=8 + */ + + #include "Edje.h" #include "edje_private.h" @@ -54,14 +59,75 @@ _edje_ref(ed); _edje_freeze(ed); _edje_emit(ed, buf, rp->part->name); + + if (rp->events_to) + { + int x, y; + Edje_Real_Part* events; + events = rp->events_to; + + //fprintf(stderr,"rp = %s, events = %s\n", rp->part->name, events->part->name); + + evas_object_geometry_get(rp->object, &x, &y, NULL, NULL); + /* + fprintf(stderr,"x = %d, y = %d\n", x, y); + fprintf(stderr,"ev->canvas.x = %d\n", ev->canvas.x); + * + x = ed->x; + y = ed->y; + */ + if ((events->part->dragable.x) || (events->part->dragable.y)) + { + if (events->part->dragable.x) + { + events->drag.tmp.x = ev->canvas.x - x - (events->x + events->w/2); + events->drag.down.x = ev->canvas.x - x; + events->x = ev->canvas.x - x - events->w/2; + } + if (events->part->dragable.y) + { + events->drag.tmp.y = ev->canvas.y - y - (events->y + events->h/2); + events->drag.down.y = ev->canvas.y - y; + events->y = ev->canvas.y - y - events->h/2; + } + + snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button); + _edje_emit(ed, buf, events->part->name); + ed->dirty = 1; + } + _edje_recalc(ed); + _edje_thaw(ed); + _edje_unref(ed); + _edje_ref(ed); + _edje_freeze(ed); + + rp = events; + { + double dx, dy; + int dir; + + dir = _edje_part_dragable_calc(ed, rp, &dx, &dy); +// fprintf(stderr,"dx = %f, dy = %f\n", dx, dy); + if ((dx != rp->drag.val.x) || (dy != rp->drag.val.y)) + { + rp->drag.val.x = dx; + rp->drag.val.y = dy; + _edje_emit(ed, "drag", rp->part->name); + ed->dirty = 1; + rp->drag.need_reset = 1; + _edje_recalc(ed); + } + } + } + if ((rp->part->dragable.x) || (rp->part->dragable.y)) { if (rp->drag.down.count == 0) { if (rp->part->dragable.x) - rp->drag.down.x = ev->canvas.x; + rp->drag.down.x = ev->canvas.x; if (rp->part->dragable.y) - rp->drag.down.y = ev->canvas.y; + rp->drag.down.y = ev->canvas.y; _edje_emit(ed, "drag,start", rp->part->name); } rp->drag.down.count++; @@ -90,9 +156,18 @@ ed = data; rp = evas_object_data_get(obj, "real_part"); if (!rp) return; + snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); _edje_ref(ed); _edje_emit(ed, buf, rp->part->name); + + if(rp->events_to) + { + rp = rp->events_to; + snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); + _edje_emit(ed, buf, rp->part->name); + } + if ((rp->part->dragable.x) || (rp->part->dragable.y)) { if (rp->drag.down.count > 0) @@ -132,6 +207,9 @@ ed = data; rp = evas_object_data_get(obj, "real_part"); if (!rp) return; + if (rp->events_to) + rp = rp->events_to; + if (rp->still_in) { Evas_Coord x, y, w, h; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_data.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- edje_data.c 31 Mar 2005 17:26:31 -0000 1.22 +++ edje_data.c 26 Jul 2005 13:59:02 -0000 1.23 @@ -238,6 +238,7 @@ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "dragable.step_y", dragable.step_y, EET_T_INT); 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); _edje_edd_edje_part_collection = NEWD("Edje_Part_Collection", =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.65 retrieving revision 1.66 diff -u -3 -r1.65 -r1.66 --- edje_load.c 25 May 2005 08:07:34 -0000 1.65 +++ edje_load.c 26 Jul 2005 13:59:03 -0000 1.66 @@ -85,6 +85,7 @@ desc = hist->data; if (desc->color_class) _edje_color_class_member_add(ed, desc->color_class); } + hist = NULL; hist = evas_list_append(hist, ep); while (ep->dragable.confine_id >= 0) { @@ -101,6 +102,32 @@ evas_list_free(hist); hist = NULL; hist = evas_list_append(hist, ep); + while (ep->dragable.events_id >= 0) + { + Edje_Part* prev; + + prev = ep; + + ep = evas_list_nth(ed->collection->parts, + ep->dragable.events_id); + + if (!ep->dragable.x && !ep->dragable.y) + { + prev->dragable.events_id = -1; + break; + } + + if (evas_list_find(hist, ep)) + { + printf("EDJE ERROR: events_to loops. invalidating loop.\n"); + ep->dragable.events_id = -1; + break; + } + hist = evas_list_append(hist, ep); + } + evas_list_free(hist); + hist = NULL; + hist = evas_list_append(hist, ep); while (ep->clip_to_id >= 0) { ep = evas_list_nth(ed->collection->parts, @@ -232,6 +259,18 @@ if (rp->part->dragable.confine_id >= 0) rp->confine_to = evas_list_nth(ed->parts, rp->part->dragable.confine_id); + /* replay events for dragable */ + if (rp->part->dragable.events_id >= 0) + { + rp->events_to = + evas_list_nth(ed->parts, + rp->part->dragable.events_id); + /* events_to may be used only with dragable */ + if (!rp->events_to->part->dragable.x && + !rp->events_to->part->dragable.y) + rp->events_to = NULL; + } + rp->swallow_params.min.w = 0; rp->swallow_params.min.w = 0; rp->swallow_params.max.w = -1; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.85 retrieving revision 1.86 diff -u -3 -r1.85 -r1.86 --- edje_private.h 3 Apr 2005 11:43:00 -0000 1.85 +++ edje_private.h 26 Jul 2005 13:59:03 -0000 1.86 @@ -182,7 +182,7 @@ char *entry; /* the name of the font */ }; - + /*----------*/ struct _Edje_Image_Directory @@ -305,6 +305,9 @@ int count_y; /* drag area divided by n (0 = no limit) */ int confine_id; /* dragging within this bit, -1 = no */ + + /* davinchi */ + int events_id; /* If it is used as scrollbar */ } dragable; }; @@ -542,6 +545,7 @@ Edje_Real_Part *clip_to; Edje_Running_Program *program; + Edje_Real_Part *events_to; }; struct _Edje_Running_Program ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs