Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_border.c e_dnd.c e_dnd.h 


Log Message:
The icon is now correctly positioned relative to the mouse.

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.202
retrieving revision 1.203
diff -u -3 -r1.202 -r1.203
--- e_border.c  14 May 2005 05:35:46 -0000      1.202
+++ e_border.c  15 May 2005 05:20:17 -0000      1.203
@@ -2512,38 +2512,38 @@
          {
             if ((bd->drag.x == -1) && (bd->drag.y == -1))
               {
-                 bd->drag.x = ev->x;
-                 bd->drag.y = ev->y;
+                 bd->drag.x = ev->root.x;
+                 bd->drag.y = ev->root.y;
               }
             else
               {
                  int x, y;
                  double dist;
 
-                 x = bd->drag.x - ev->x;
-                 y = bd->drag.y - ev->y;
+                 x = bd->drag.x - ev->root.x;
+                 y = bd->drag.y - ev->root.y;
                  dist = sqrt(pow(x, 2) + pow(y, 2));
-                 if (dist > 10)
+                 if (dist > 4)
                    {
                       /* start drag! */
                       if (bd->icon_object)
                         {
                            E_Drag *drag;
                            Evas_Object *o;
-                           Evas_Coord w, h;
+                           Evas_Coord x, y, w, h;
                            const char *file, *part;
 
-                           drag = e_drag_new(bd->zone->container,
+                           evas_object_geometry_get(bd->icon_object,
+                                                    &x, &y, &w, &h);
+                           drag = e_drag_new(bd->zone->container, bd->x + x, 
bd->y + y,
                                              "enlightenment/border", bd, NULL);
                            o = edje_object_add(drag->evas);
                            edje_object_file_get(bd->icon_object, &file, &part);
                            edje_object_file_set(o, file, part);
                            e_drag_object_set(drag, o);
 
-                           evas_object_geometry_get(bd->icon_object,
-                                                    NULL, NULL, &w, &h);
                            e_drag_resize(drag, w, h);
-                           e_drag_start(drag);
+                           e_drag_start(drag, bd->drag.x, bd->drag.y);
                            evas_event_feed_mouse_up(bd->bg_evas, 1,
                                                     EVAS_BUTTON_NONE, NULL);
                         }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_dnd.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -3 -r1.23 -r1.24
--- e_dnd.c     11 May 2005 21:33:52 -0000      1.23
+++ e_dnd.c     15 May 2005 05:20:17 -0000      1.24
@@ -119,7 +119,7 @@
 }
 
 E_Drag*
-e_drag_new(E_Container *container,
+e_drag_new(E_Container *container, int x, int y,
           const char *type, void *data,
           void (*finished_cb)(E_Drag *drag, int dropped))
 {
@@ -128,8 +128,8 @@
    drag = E_OBJECT_ALLOC(E_Drag, E_DRAG_TYPE, _e_drag_free);
    if (!drag) return NULL;
 
-   drag->x = 0;
-   drag->y = 0;
+   drag->x = x;
+   drag->y = y;
    drag->w = 24;
    drag->h = 24;
    drag->layer = 250;
@@ -221,15 +221,15 @@
 void
 e_drag_move(E_Drag *drag, int x, int y)
 {
-   if ((drag->x == x) && (drag->y == y)) return;
-   drag->x = x;
-   drag->y = y;
+   if (((drag->x + drag->dx) == x) && ((drag->y + drag->dy) == y)) return;
+   drag->x = x - drag->dx;
+   drag->y = y - drag->dy;
    ecore_evas_move(drag->ecore_evas,
-                  drag->x - (drag->w / 2), 
-                  drag->y - (drag->h / 2));
+                  drag->x, 
+                  drag->y);
    e_container_shape_move(drag->shape,
-                         drag->x - (drag->w / 2), 
-                         drag->y - (drag->h / 2));
+                         drag->x, 
+                         drag->y);
 }
 
 void
@@ -250,7 +250,7 @@
 }
 
 void
-e_drag_start(E_Drag *drag)
+e_drag_start(E_Drag *drag, int x, int y)
 {
    Evas_List *l;
 
@@ -261,6 +261,9 @@
    ecore_x_pointer_confine_grab(_drag_win);
    ecore_x_keyboard_grab(_drag_win);
 
+   drag->dx = x - drag->x;
+   drag->dy = y - drag->y;
+
    for (l = _drop_handlers; l; l = l->next)
      {
        E_Drop_Handler *h;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_dnd.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- e_dnd.h     11 May 2005 21:33:53 -0000      1.17
+++ e_dnd.h     15 May 2005 05:20:17 -0000      1.18
@@ -34,6 +34,7 @@
    Evas_Object       *object;
 
    int x, y, w, h;
+   int dx, dy;
 
    unsigned int   layer;
    unsigned char  visible : 1;
@@ -81,7 +82,8 @@
 
 EAPI int  e_dnd_active(void);
 
-EAPI E_Drag* e_drag_new(E_Container *container, const char *type, void *data,
+/* x and y are the top left coords of the object that is to be dragged */
+EAPI E_Drag* e_drag_new(E_Container *container, int x, int y, const char 
*type, void *data,
                        void (*finished_cb)(E_Drag *drag, int dropped));
 EAPI Evas   *e_drag_evas_get(E_Drag *drag);
 EAPI void    e_drag_object_set(E_Drag *drag, Evas_Object *object);
@@ -91,7 +93,8 @@
 EAPI void    e_drag_resize(E_Drag *drag, int w, int h);
 EAPI void    e_drag_idler_before(void);
 
-EAPI void e_drag_start(E_Drag *drag);
+/* x and y are the coords where the mouse is when dragging starts */
+EAPI void e_drag_start(E_Drag *drag, int x, int y);
 EAPI void e_drag_update(int x, int y);
 EAPI void e_drag_end(int x, int y);
 




-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to