e_dnd: use e_map to adjust rotation of the pointer 13/296513/1
authorJunseok Kim <juns.kim@samsung.com>
Wed, 26 Jul 2023 12:47:55 +0000 (21:47 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 31 Jul 2023 04:40:49 +0000 (13:40 +0900)
Change-Id: I96e1ab351210e5405281d6d7f503bd51c582980e

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

index fa6895d..af4731d 100644 (file)
@@ -12,6 +12,7 @@ struct _E_Drag_Hook
 /* local subsystem functions */
 static void           _e_drag_end(E_Drag *drag);
 static void           _e_drag_free(E_Drag *drag);
+static void           _e_drag_rotation_angle_map_adjust(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);
@@ -118,8 +119,9 @@ _e_drag_finalize(E_Drag *drag, int x, int y)
         evas_object_color_set(drag->object, 0, 0, 0, 0);
      }
 
+   drag->angle = e_comp->pointer->rotation;
    e_drag_move(drag, x, y);
-   evas_object_resize(drag->comp_object, drag->w, drag->h);
+   e_drag_resize(drag, drag->w, drag->h);
    drag->visible = 1;
    evas_object_show(drag->comp_object);
    evas_object_show(drag->object);
@@ -232,7 +234,10 @@ e_drag_resize(E_Drag *drag, int w, int h)
    drag->h = h;
    drag->w = w;
    if (_drag_current == drag)
-     evas_object_resize(drag->comp_object, w, h);
+     {
+        evas_object_resize(drag->comp_object, w, h);
+        _e_drag_rotation_angle_map_adjust(drag);
+     }
 }
 
 EINTERN int
@@ -288,6 +293,40 @@ _e_drag_free(E_Drag *drag)
    _drag_win = 0;
 }
 
+static void
+_e_drag_rotation_angle_map_adjust(E_Drag *drag)
+{
+   int angle;
+   E_Map *map;
+
+   map = e_map_new();
+   EINA_SAFETY_ON_NULL_RETURN(map);
+
+   angle = drag->angle;
+
+   if (angle)
+     {
+        if (angle == 90)
+          angle = 270;
+        else if (angle == 270)
+          angle = 90;
+
+        e_map_util_points_populate_from_object_full(map, drag->comp_object, 0);
+
+        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);
+     }
+
+   e_map_free(map);
+}
+
 static Eina_Bool
 _e_dnd_cb_mouse_up(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
 {
index 8a45d76..5c1628d 100644 (file)
@@ -33,6 +33,7 @@ struct _E_Drag
 
    int                x, y, w, h;
    int                dx, dy;
+   int                angle;
    unsigned int       button_mask;
 
    unsigned char      visible : 1;