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)
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;
}
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, x, y);
+ evas_object_move(drag->comp_object, x + drag->dx, y + drag->dy);
}
EINTERN void
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);