e_dnd: Add reference point and use the point when drag move 36/295436/2
authorJunseok Kim <juns.kim@samsung.com>
Thu, 6 Apr 2023 06:13:33 +0000 (15:13 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Fri, 7 Jul 2023 07:27:58 +0000 (07:27 +0000)
Change-Id: I95d0b33f9169a9f32ecad988bb7450db5c480679

src/bin/e_dnd.c
src/bin/e_dnd.h

index 2cfaac2..d5e805d 100644 (file)
@@ -89,14 +89,13 @@ _e_drag_finalize(E_Drag *drag, E_Drag_Type type, int x, int y)
         e_drag_object_set(drag, evas_object_rectangle_add(drag->evas));
         evas_object_color_set(drag->object, 0, 0, 0, 0);
      }
-   evas_object_move(drag->comp_object, drag->x, drag->y);
+   e_drag_move(drag, x, y);
    evas_object_resize(drag->comp_object, drag->w, drag->h);
    drag->visible = 1;
    evas_object_show(drag->comp_object);
+   evas_object_show(drag->object);
    drag->type = type;
 
-   drag->dx = x - drag->x;
-   drag->dy = y - drag->y;
 
    _active_handlers = eina_list_free(_active_handlers);
    EINA_LIST_FOREACH(_drop_handlers, l, h)
@@ -186,7 +185,6 @@ e_drag_new(int x, int y,
    drag = e_object_alloc(sizeof(E_Drag) + num_types * sizeof(char *),
                          E_DRAG_TYPE, E_OBJECT_CLEANUP_FUNC(_e_drag_free));
    if (!drag) return NULL;
-
    drag->x = x;
    drag->y = y;
    drag->w = 24;
@@ -235,13 +233,25 @@ e_drag_object_set(E_Drag *drag, Evas_Object *object)
 }
 
 EINTERN void
+e_drag_reference_point_set(E_Drag *drag, int x, int y)
+{
+   if ((drag->dx == x) && (drag->dy == y)) return;
+   drag->dx = x;
+   drag->dy = y;
+   e_drag_move(drag, drag->x, drag->y);
+}
+
+EINTERN void
 e_drag_move(E_Drag *drag, int x, int y)
 {
-   if ((drag->x == x) && (drag->y == y)) return;
+   int cur_x, cur_y;
+   evas_object_geometry_get(drag->comp_object, &cur_x, &cur_y, NULL, NULL);
+   if ((cur_x == x + drag->dx) && (cur_y == y + drag->dy)) return;
+
    drag->x = x;
    drag->y = y;
    if (_drag_current == drag)
-     evas_object_move(drag->comp_object, xy);
+     evas_object_move(drag->comp_object, x + drag->dx, y + drag->dy);
 }
 
 EINTERN void
index e21805e..894434e 100644 (file)
@@ -121,6 +121,7 @@ EINTERN E_Drag         *e_drag_new(int x, int y,
                                 void (*finished_cb)(E_Drag *drag, int dropped));
 EINTERN Evas           *e_drag_evas_get(const E_Drag *drag);
 EINTERN void            e_drag_object_set(E_Drag *drag, Evas_Object *object);
+EINTERN void            e_drag_reference_point_set(E_Drag *drag, int x, int y);
 EINTERN void            e_drag_move(E_Drag *drag, int x, int y);
 EINTERN void            e_drag_resize(E_Drag *drag, int w, int h);