/* local subsystem functions */
static void _e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type);
static void _e_drag_free(E_Drag *drag);
-static void _e_drag_rotation_angle_map_adjust(E_Drag *drag);
+static void _e_drag_map_apply(E_Drag *drag);
static Eina_Bool _e_dnd_cb_mouse_up(void *data, int type, void *event);
static Eina_Bool _e_dnd_cb_mouse_move(void *data, int type, void *event);
drag->x = x;
drag->y = y;
if (_drag_current == drag)
- evas_object_move(drag->comp_object, x + drag->dx, y + drag->dy);
+ {
+ evas_object_move(drag->comp_object, x + drag->dx, y + drag->dy);
+ _e_drag_map_apply(drag);
+ }
}
EINTERN void
if (_drag_current == drag)
{
evas_object_resize(drag->comp_object, w, h);
- _e_drag_rotation_angle_map_adjust(drag);
+ _e_drag_map_apply(drag);
}
}
}
static void
-_e_drag_rotation_angle_map_adjust(E_Drag *drag)
+_e_drag_map_apply(E_Drag *drag)
{
- int angle;
- E_Map *map;
-
- map = e_map_new();
- EINA_SAFETY_ON_NULL_RETURN(map);
+ int angle, drag_client_w, drag_client_h;
+ E_Map *map = NULL, *new_map = NULL;
+ Eina_Bool need_map_enable;
angle = drag->angle;
- if (angle)
- {
- if (angle == 90)
- angle = 270;
- else if (angle == 270)
- angle = 90;
+ if (angle == 90)
+ angle = 270;
+ else if (angle == 270)
+ angle = 90;
- e_map_util_points_populate_from_object_full(map, drag->comp_object, 0);
+ need_map_enable = evas_object_map_enable_get(e_comp_wl->drag_client->frame) || (angle != 0);
+ if (!need_map_enable) return;
- e_map_util_rotate(map, angle, drag->x, drag->y);
- e_map_util_object_move_sync_set(map, EINA_TRUE);
- e_comp_object_map_set(drag->comp_object, map);
- e_comp_object_map_enable_set(drag->comp_object, EINA_TRUE);
- }
- else
- {
- e_comp_object_map_set(drag->comp_object, NULL);
- e_comp_object_map_enable_set(drag->comp_object, EINA_FALSE);
- }
+ map = e_client_map_get(e_comp_wl->drag_client);
+ if (!map) return;
+
+ new_map = e_map_dup(map);
+ if (!new_map) goto fin;
+
+ e_client_geometry_get(e_comp_wl->drag_client, NULL, NULL, &drag_client_w, &drag_client_h);
+ e_map_util_points_populate_from_geometry(new_map, drag->x, drag->y, drag_client_w, drag_client_h, 0);
+ e_map_util_rotate(new_map, angle, drag->x, drag->y);
+ e_map_util_object_move_sync_set(new_map, EINA_TRUE);
+ e_comp_object_map_set(drag->comp_object, new_map);
+ e_comp_object_map_enable_set(drag->comp_object, EINA_TRUE);
- e_map_free(map);
+fin:
+ if (map) e_map_free(map);
+ if (new_map) e_map_free(new_map);
}
static Eina_Bool