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

Reply via email to