OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/events/gestures/gesture_sequence.h" | 5 #include "ui/events/gestures/gesture_sequence.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <limits> | 9 #include <limits> |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 namespace ui { | 22 namespace ui { |
23 | 23 |
24 namespace { | 24 namespace { |
25 | 25 |
26 // ui::EventType is mapped to TouchState so it can fit into 3 bits of | 26 // ui::EventType is mapped to TouchState so it can fit into 3 bits of |
27 // Signature. | 27 // Signature. |
28 enum TouchState { | 28 enum TouchState { |
29 TS_RELEASED, | 29 TS_RELEASED, |
30 TS_PRESSED, | 30 TS_PRESSED, |
31 TS_MOVED, | 31 TS_MOVED, |
32 TS_STATIONARY, | |
33 TS_CANCELLED, | 32 TS_CANCELLED, |
34 TS_UNKNOWN, | 33 TS_UNKNOWN, |
35 }; | 34 }; |
36 | 35 |
37 // ui::EventResult is mapped to TouchStatusInternal to simply indicate whether a | 36 // ui::EventResult is mapped to TouchStatusInternal to simply indicate whether a |
38 // processed touch-event should affect gesture-recognition or not. | 37 // processed touch-event should affect gesture-recognition or not. |
39 enum TouchStatusInternal { | 38 enum TouchStatusInternal { |
40 TSI_NOT_PROCESSED, // The touch-event should take-part into | 39 TSI_NOT_PROCESSED, // The touch-event should take-part into |
41 // gesture-recognition only if the touch-event has not | 40 // gesture-recognition only if the touch-event has not |
42 // been processed. | 41 // been processed. |
(...skipping 10 matching lines...) Expand all Loading... |
53 | 52 |
54 // Get equivalent TouchState from EventType |type|. | 53 // Get equivalent TouchState from EventType |type|. |
55 TouchState TouchEventTypeToTouchState(ui::EventType type) { | 54 TouchState TouchEventTypeToTouchState(ui::EventType type) { |
56 switch (type) { | 55 switch (type) { |
57 case ui::ET_TOUCH_RELEASED: | 56 case ui::ET_TOUCH_RELEASED: |
58 return TS_RELEASED; | 57 return TS_RELEASED; |
59 case ui::ET_TOUCH_PRESSED: | 58 case ui::ET_TOUCH_PRESSED: |
60 return TS_PRESSED; | 59 return TS_PRESSED; |
61 case ui::ET_TOUCH_MOVED: | 60 case ui::ET_TOUCH_MOVED: |
62 return TS_MOVED; | 61 return TS_MOVED; |
63 case ui::ET_TOUCH_STATIONARY: | |
64 return TS_STATIONARY; | |
65 case ui::ET_TOUCH_CANCELLED: | 62 case ui::ET_TOUCH_CANCELLED: |
66 return TS_CANCELLED; | 63 return TS_CANCELLED; |
67 default: | 64 default: |
68 DVLOG(1) << "Unknown Touch Event type"; | 65 DVLOG(1) << "Unknown Touch Event type"; |
69 } | 66 } |
70 return TS_UNKNOWN; | 67 return TS_UNKNOWN; |
71 } | 68 } |
72 | 69 |
73 // Gesture signature types for different values of combination (GestureState, | 70 // Gesture signature types for different values of combination (GestureState, |
74 // touch_id, ui::EventType, touch_handled), see Signature for more info. | 71 // touch_id, ui::EventType, touch_handled), see Signature for more info. |
(...skipping 17 matching lines...) Expand all Loading... |
92 GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED = | 89 GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED = |
93 G(GS_PENDING_SYNTHETIC_CLICK, 0, TS_RELEASED, TSI_PROCESSED), | 90 G(GS_PENDING_SYNTHETIC_CLICK, 0, TS_RELEASED, TSI_PROCESSED), |
94 | 91 |
95 // Ignore processed touch-move events until gesture-scroll starts. | 92 // Ignore processed touch-move events until gesture-scroll starts. |
96 GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED = | 93 GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED = |
97 G(GS_PENDING_SYNTHETIC_CLICK, 0, TS_MOVED, TSI_NOT_PROCESSED), | 94 G(GS_PENDING_SYNTHETIC_CLICK, 0, TS_MOVED, TSI_NOT_PROCESSED), |
98 | 95 |
99 GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED = | 96 GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED = |
100 G(GS_PENDING_SYNTHETIC_CLICK, 0, TS_MOVED, TSI_PROCESSED), | 97 G(GS_PENDING_SYNTHETIC_CLICK, 0, TS_MOVED, TSI_PROCESSED), |
101 | 98 |
102 GST_PENDING_SYNTHETIC_CLICK_FIRST_STATIONARY = | |
103 G(GS_PENDING_SYNTHETIC_CLICK, 0, TS_STATIONARY, TSI_NOT_PROCESSED), | |
104 | |
105 GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED = | 99 GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED = |
106 G(GS_PENDING_SYNTHETIC_CLICK, 0, TS_CANCELLED, TSI_ALWAYS), | 100 G(GS_PENDING_SYNTHETIC_CLICK, 0, TS_CANCELLED, TSI_ALWAYS), |
107 | 101 |
108 GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED = | 102 GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED = |
109 G(GS_PENDING_SYNTHETIC_CLICK, 1, TS_PRESSED, TSI_NOT_PROCESSED), | 103 G(GS_PENDING_SYNTHETIC_CLICK, 1, TS_PRESSED, TSI_NOT_PROCESSED), |
110 | 104 |
111 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED = | 105 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED = |
112 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, | 106 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, |
113 0, | 107 0, |
114 TS_RELEASED, | 108 TS_RELEASED, |
115 TSI_NOT_PROCESSED), | 109 TSI_NOT_PROCESSED), |
116 | 110 |
117 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED = | 111 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED = |
118 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_RELEASED, TSI_PROCESSED), | 112 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_RELEASED, TSI_PROCESSED), |
119 | 113 |
120 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED = | 114 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED = |
121 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_MOVED, TSI_ALWAYS), | 115 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_MOVED, TSI_ALWAYS), |
122 | 116 |
123 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY = | |
124 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_STATIONARY, TSI_ALWAYS), | |
125 | |
126 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED = | 117 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED = |
127 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_CANCELLED, TSI_ALWAYS), | 118 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_CANCELLED, TSI_ALWAYS), |
128 | 119 |
129 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED = | 120 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED = |
130 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 1, TS_PRESSED, TSI_NOT_PROCESSED), | 121 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 1, TS_PRESSED, TSI_NOT_PROCESSED), |
131 | 122 |
132 GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED = | 123 GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED = |
133 G(GS_SYNTHETIC_CLICK_ABORTED, 0, TS_RELEASED, TSI_ALWAYS), | 124 G(GS_SYNTHETIC_CLICK_ABORTED, 0, TS_RELEASED, TSI_ALWAYS), |
134 | 125 |
135 GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED = | 126 GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED = |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 TouchState touch_state = TouchEventTypeToTouchState(type); | 325 TouchState touch_state = TouchEventTypeToTouchState(type); |
335 EdgeStateSignatureType signature = static_cast<EdgeStateSignatureType> | 326 EdgeStateSignatureType signature = static_cast<EdgeStateSignatureType> |
336 (G(gesture_state, touch_id, touch_state, touch_status)); | 327 (G(gesture_state, touch_id, touch_state, touch_status)); |
337 | 328 |
338 switch (signature) { | 329 switch (signature) { |
339 case GST_NO_GESTURE_FIRST_PRESSED: | 330 case GST_NO_GESTURE_FIRST_PRESSED: |
340 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: | 331 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: |
341 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED: | 332 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED: |
342 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED: | 333 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED: |
343 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED: | 334 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED: |
344 case GST_PENDING_SYNTHETIC_CLICK_FIRST_STATIONARY: | |
345 case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: | 335 case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: |
346 case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED: | 336 case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED: |
347 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED: | 337 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED: |
348 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED: | 338 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED: |
349 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED: | 339 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED: |
350 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY: | |
351 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED: | 340 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED: |
352 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED: | 341 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED: |
353 case GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED: | 342 case GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED: |
354 case GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED: | 343 case GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED: |
355 case GST_SCROLL_FIRST_RELEASED: | 344 case GST_SCROLL_FIRST_RELEASED: |
356 case GST_SCROLL_FIRST_MOVED: | 345 case GST_SCROLL_FIRST_MOVED: |
357 case GST_SCROLL_FIRST_MOVED_HANDLED: | 346 case GST_SCROLL_FIRST_MOVED_HANDLED: |
358 case GST_SCROLL_FIRST_CANCELLED: | 347 case GST_SCROLL_FIRST_CANCELLED: |
359 case GST_SCROLL_SECOND_PRESSED: | 348 case GST_SCROLL_SECOND_PRESSED: |
360 case GST_PENDING_TWO_FINGER_TAP_FIRST_RELEASED: | 349 case GST_PENDING_TWO_FINGER_TAP_FIRST_RELEASED: |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 break; | 558 break; |
570 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: | 559 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: |
571 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED: | 560 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED: |
572 if (Click(event, point, gestures.get())) | 561 if (Click(event, point, gestures.get())) |
573 point.UpdateForTap(); | 562 point.UpdateForTap(); |
574 else | 563 else |
575 PrependTapCancelGestureEvent(point, gestures.get()); | 564 PrependTapCancelGestureEvent(point, gestures.get()); |
576 set_state(GS_NO_GESTURE); | 565 set_state(GS_NO_GESTURE); |
577 break; | 566 break; |
578 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED: | 567 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED: |
579 case GST_PENDING_SYNTHETIC_CLICK_FIRST_STATIONARY: | |
580 if (ScrollStart(event, point, gestures.get())) { | 568 if (ScrollStart(event, point, gestures.get())) { |
581 PrependTapCancelGestureEvent(point, gestures.get()); | 569 PrependTapCancelGestureEvent(point, gestures.get()); |
582 set_state(GS_SCROLL); | 570 set_state(GS_SCROLL); |
583 if (ScrollUpdate(event, point, gestures.get(), FS_FIRST_SCROLL)) | 571 if (ScrollUpdate(event, point, gestures.get(), FS_FIRST_SCROLL)) |
584 point.UpdateForScroll(); | 572 point.UpdateForScroll(); |
585 } | 573 } |
586 break; | 574 break; |
587 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED: | 575 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED: |
588 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED: | 576 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED: |
589 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY: | |
590 if (point.IsInScrollWindow(event)) { | 577 if (point.IsInScrollWindow(event)) { |
591 PrependTapCancelGestureEvent(point, gestures.get()); | 578 PrependTapCancelGestureEvent(point, gestures.get()); |
592 set_state(GS_SYNTHETIC_CLICK_ABORTED); | 579 set_state(GS_SYNTHETIC_CLICK_ABORTED); |
593 } else { | 580 } else { |
594 set_state(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL); | 581 set_state(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL); |
595 } | 582 } |
596 break; | 583 break; |
597 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED: | 584 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED: |
598 case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: | 585 case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: |
599 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED: | 586 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED: |
(...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1471 } | 1458 } |
1472 | 1459 |
1473 void GestureSequence::StartRailFreeScroll(const GesturePoint& point, | 1460 void GestureSequence::StartRailFreeScroll(const GesturePoint& point, |
1474 Gestures* gestures) { | 1461 Gestures* gestures) { |
1475 AppendScrollGestureBegin(point, point.first_touch_position(), gestures); | 1462 AppendScrollGestureBegin(point, point.first_touch_position(), gestures); |
1476 scroll_type_ = ST_FREE; | 1463 scroll_type_ = ST_FREE; |
1477 set_state(GS_SCROLL); | 1464 set_state(GS_SCROLL); |
1478 } | 1465 } |
1479 | 1466 |
1480 } // namespace ui | 1467 } // namespace ui |
OLD | NEW |