| 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 |