Use delta value for the "Drag & drop" gesture 48/153848/1
authorShinwoo Kim <cinoo.kim@samsung.com>
Wed, 20 Sep 2017 12:00:25 +0000 (21:00 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Sat, 30 Sep 2017 08:58:26 +0000 (17:58 +0900)
If there is a highlighted object, the "Drag & drop" gesture uses the geometry
value of the highlighted object.
But the geometry value was used only for 'mouse button down' event,
and was not used for 'move' event.
So we are using delta value which is difference between highlighted object
geometry value and 1 finger touch point on the screen for the "Drag & drop"
gesture.

Change-Id: Icfa9879850c58e941799e97fcef74149f53404b7

src/e_screen_reader_gestures.c

index e95712a..f37739d 100644 (file)
@@ -86,6 +86,8 @@ struct _Cover
         Eina_Bool double_tap;
         Ecore_Event_Mouse_Button *ev_down;
         Eina_Bool drag_start;
+        int drag_x_delta;
+        int drag_y_delta;
    } tap_n_hold_gesture_data;
 };
 typedef struct _Cover Cover;
@@ -913,6 +915,13 @@ _hover_event_emit(Cover *cov, gesture_state_e state)
              cov->tap_n_hold_gesture_data.ev_down->y = highlighted_object_y;
              cov->tap_n_hold_gesture_data.ev_down->root.x = highlighted_object_x;
              cov->tap_n_hold_gesture_data.ev_down->root.y = highlighted_object_y;
+             cov->tap_n_hold_gesture_data.drag_x_delta = highlighted_object_x - cov->hover_gesture.x[0];
+             cov->tap_n_hold_gesture_data.drag_y_delta = highlighted_object_y - cov->hover_gesture.y[0];
+          }
+        else
+          {
+             cov->tap_n_hold_gesture_data.drag_x_delta = 0;
+             cov->tap_n_hold_gesture_data.drag_y_delta = 0;
           }
         _emit_mouse_move_event(cov->tap_n_hold_gesture_data.ev_down);
         cov->tap_n_hold_gesture_data.ev_down->multi.radius += MAGIC_NUMBER;
@@ -1344,10 +1353,20 @@ _mouse_move(int type, Ecore_Event_Mouse_Move *event)
           {
              /* Do not change event point info if its multi.radius >= MAGIC_NUMBER.
                 It is created before down event occurs in _emit_mouse_move_event for start_Scroll */
-             ev->x += cover->flick_gesture.object_needs_scroll_x_delta;
-             ev->y += cover->flick_gesture.object_needs_scroll_y_delta;
-             ev->root.x += cover->flick_gesture.object_needs_scroll_x_delta;
-             ev->root.y += cover->flick_gesture.object_needs_scroll_y_delta;
+             if (cover->tap_n_hold_gesture_data.drag_start)
+               {
+                  ev->x += cover->tap_n_hold_gesture_data.drag_x_delta;
+                  ev->y += cover->tap_n_hold_gesture_data.drag_y_delta;
+                  ev->root.x += cover->tap_n_hold_gesture_data.drag_x_delta;
+                  ev->root.y += cover->tap_n_hold_gesture_data.drag_y_delta;
+               }
+             else
+               {
+                  ev->x += cover->flick_gesture.object_needs_scroll_x_delta;
+                  ev->y += cover->flick_gesture.object_needs_scroll_y_delta;
+                  ev->root.x += cover->flick_gesture.object_needs_scroll_x_delta;
+                  ev->root.y += cover->flick_gesture.object_needs_scroll_y_delta;
+               }
           }
         if (cover->flick_gesture.flick_to_scroll) _hover_gesture_mouse_move(ev, cover);
         return EINA_TRUE;