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 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 | 122 |
123 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY = | 123 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY = |
124 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_STATIONARY, TSI_ALWAYS), | 124 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_STATIONARY, TSI_ALWAYS), |
125 | 125 |
126 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED = | 126 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED = |
127 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_CANCELLED, TSI_ALWAYS), | 127 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 0, TS_CANCELLED, TSI_ALWAYS), |
128 | 128 |
129 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED = | 129 GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED = |
130 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 1, TS_PRESSED, TSI_NOT_PROCESSED), | 130 G(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 1, TS_PRESSED, TSI_NOT_PROCESSED), |
131 | 131 |
| 132 GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED = |
| 133 G(GS_SYNTHETIC_CLICK_ABORTED, 0, TS_RELEASED, TSI_ALWAYS), |
| 134 |
| 135 GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED = |
| 136 G(GS_SYNTHETIC_CLICK_ABORTED, 1, TS_PRESSED, TSI_NOT_PROCESSED), |
| 137 |
132 GST_SCROLL_FIRST_RELEASED = | 138 GST_SCROLL_FIRST_RELEASED = |
133 G(GS_SCROLL, 0, TS_RELEASED, TSI_ALWAYS), | 139 G(GS_SCROLL, 0, TS_RELEASED, TSI_ALWAYS), |
134 | 140 |
135 // Once scroll has started, process all touch-move events. | 141 // Once scroll has started, process all touch-move events. |
136 GST_SCROLL_FIRST_MOVED = | 142 GST_SCROLL_FIRST_MOVED = |
137 G(GS_SCROLL, 0, TS_MOVED, TSI_ALWAYS), | 143 G(GS_SCROLL, 0, TS_MOVED, TSI_ALWAYS), |
138 | 144 |
139 GST_SCROLL_FIRST_CANCELLED = | 145 GST_SCROLL_FIRST_CANCELLED = |
140 G(GS_SCROLL, 0, TS_CANCELLED, TSI_ALWAYS), | 146 G(GS_SCROLL, 0, TS_CANCELLED, TSI_ALWAYS), |
141 | 147 |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED: | 341 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED: |
336 case GST_PENDING_SYNTHETIC_CLICK_FIRST_STATIONARY: | 342 case GST_PENDING_SYNTHETIC_CLICK_FIRST_STATIONARY: |
337 case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: | 343 case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: |
338 case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED: | 344 case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED: |
339 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED: | 345 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED: |
340 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED: | 346 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED: |
341 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED: | 347 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED: |
342 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY: | 348 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY: |
343 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED: | 349 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED: |
344 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED: | 350 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED: |
| 351 case GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED: |
| 352 case GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED: |
345 case GST_SCROLL_FIRST_RELEASED: | 353 case GST_SCROLL_FIRST_RELEASED: |
346 case GST_SCROLL_FIRST_MOVED: | 354 case GST_SCROLL_FIRST_MOVED: |
347 case GST_SCROLL_FIRST_CANCELLED: | 355 case GST_SCROLL_FIRST_CANCELLED: |
348 case GST_SCROLL_SECOND_PRESSED: | 356 case GST_SCROLL_SECOND_PRESSED: |
349 case GST_PENDING_TWO_FINGER_TAP_FIRST_RELEASED: | 357 case GST_PENDING_TWO_FINGER_TAP_FIRST_RELEASED: |
350 case GST_PENDING_TWO_FINGER_TAP_FIRST_RELEASED_HANDLED: | 358 case GST_PENDING_TWO_FINGER_TAP_FIRST_RELEASED_HANDLED: |
351 case GST_PENDING_TWO_FINGER_TAP_SECOND_RELEASED: | 359 case GST_PENDING_TWO_FINGER_TAP_SECOND_RELEASED: |
352 case GST_PENDING_TWO_FINGER_TAP_SECOND_RELEASED_HANDLED: | 360 case GST_PENDING_TWO_FINGER_TAP_SECOND_RELEASED_HANDLED: |
353 case GST_PENDING_TWO_FINGER_TAP_FIRST_MOVED: | 361 case GST_PENDING_TWO_FINGER_TAP_FIRST_MOVED: |
354 case GST_PENDING_TWO_FINGER_TAP_SECOND_MOVED: | 362 case GST_PENDING_TWO_FINGER_TAP_SECOND_MOVED: |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 ui::LatencyInfo* gesture_latency = (*it)->latency(); | 475 ui::LatencyInfo* gesture_latency = (*it)->latency(); |
468 *gesture_latency = *touch_latency; | 476 *gesture_latency = *touch_latency; |
469 gesture_latency->trace_id = -1; | 477 gesture_latency->trace_id = -1; |
470 gesture_latency->terminated = false; | 478 gesture_latency->terminated = false; |
471 gesture_latency->RemoveLatency( | 479 gesture_latency->RemoveLatency( |
472 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT); | 480 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT); |
473 } | 481 } |
474 } | 482 } |
475 } | 483 } |
476 | 484 |
| 485 bool GestureStateSupportsActiveTimer(GestureState state) { |
| 486 switch(state) { |
| 487 case GS_PENDING_SYNTHETIC_CLICK: |
| 488 case GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL: |
| 489 return true; |
| 490 default: |
| 491 return false; |
| 492 } |
| 493 } |
| 494 |
477 } // namespace | 495 } // namespace |
478 | 496 |
479 //////////////////////////////////////////////////////////////////////////////// | 497 //////////////////////////////////////////////////////////////////////////////// |
480 // GestureSequence Public: | 498 // GestureSequence Public: |
481 | 499 |
482 GestureSequence::GestureSequence(GestureSequenceDelegate* delegate) | 500 GestureSequence::GestureSequence(GestureSequenceDelegate* delegate) |
483 : state_(GS_NO_GESTURE), | 501 : state_(GS_NO_GESTURE), |
484 flags_(0), | 502 flags_(0), |
485 pinch_distance_start_(0.f), | 503 pinch_distance_start_(0.f), |
486 pinch_distance_current_(0.f), | 504 pinch_distance_current_(0.f), |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 | 568 |
551 switch (signature) { | 569 switch (signature) { |
552 case GST_INVALID: | 570 case GST_INVALID: |
553 break; | 571 break; |
554 | 572 |
555 case GST_NO_GESTURE_FIRST_PRESSED: | 573 case GST_NO_GESTURE_FIRST_PRESSED: |
556 TouchDown(event, point, gestures.get()); | 574 TouchDown(event, point, gestures.get()); |
557 set_state(GS_PENDING_SYNTHETIC_CLICK); | 575 set_state(GS_PENDING_SYNTHETIC_CLICK); |
558 break; | 576 break; |
559 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: | 577 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: |
| 578 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED: |
560 if (Click(event, point, gestures.get())) | 579 if (Click(event, point, gestures.get())) |
561 point.UpdateForTap(); | 580 point.UpdateForTap(); |
562 else | 581 else |
563 PrependTapCancelGestureEvent(point, gestures.get()); | 582 PrependTapCancelGestureEvent(point, gestures.get()); |
564 set_state(GS_NO_GESTURE); | 583 set_state(GS_NO_GESTURE); |
565 break; | 584 break; |
566 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED: | 585 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED: |
567 case GST_PENDING_SYNTHETIC_CLICK_FIRST_STATIONARY: | 586 case GST_PENDING_SYNTHETIC_CLICK_FIRST_STATIONARY: |
568 if (ScrollStart(event, point, gestures.get())) { | 587 if (ScrollStart(event, point, gestures.get())) { |
569 PrependTapCancelGestureEvent(point, gestures.get()); | 588 PrependTapCancelGestureEvent(point, gestures.get()); |
570 set_state(GS_SCROLL); | 589 set_state(GS_SCROLL); |
571 if (ScrollUpdate(event, point, gestures.get())) | 590 if (ScrollUpdate(event, point, gestures.get())) |
572 point.UpdateForScroll(); | 591 point.UpdateForScroll(); |
573 } | 592 } |
574 break; | 593 break; |
| 594 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED: |
575 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED: | 595 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_MOVED: |
576 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY: | 596 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_STATIONARY: |
577 // No scrolling allowed, so nothing happens. | |
578 break; | |
579 case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED_PROCESSED: | |
580 if (point.IsInScrollWindow(event)) { | 597 if (point.IsInScrollWindow(event)) { |
581 PrependTapCancelGestureEvent(point, gestures.get()); | 598 PrependTapCancelGestureEvent(point, gestures.get()); |
| 599 set_state(GS_SYNTHETIC_CLICK_ABORTED); |
| 600 } else { |
582 set_state(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL); | 601 set_state(GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL); |
583 } | 602 } |
584 break; | 603 break; |
585 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED: | 604 case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED: |
586 case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: | 605 case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: |
| 606 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED: |
| 607 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED: |
587 PrependTapCancelGestureEvent(point, gestures.get()); | 608 PrependTapCancelGestureEvent(point, gestures.get()); |
588 set_state(GS_NO_GESTURE); | 609 set_state(GS_NO_GESTURE); |
589 break; | 610 break; |
590 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED: | 611 case GST_SYNTHETIC_CLICK_ABORTED_FIRST_RELEASED: |
591 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_RELEASED_HANDLED: | |
592 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_FIRST_CANCELLED: | |
593 set_state(GS_NO_GESTURE); | 612 set_state(GS_NO_GESTURE); |
594 break; | 613 break; |
595 case GST_SCROLL_FIRST_MOVED: | 614 case GST_SCROLL_FIRST_MOVED: |
596 if (scroll_type_ == ST_VERTICAL || | 615 if (scroll_type_ == ST_VERTICAL || |
597 scroll_type_ == ST_HORIZONTAL) | 616 scroll_type_ == ST_HORIZONTAL) |
598 BreakRailScroll(event, point, gestures.get()); | 617 BreakRailScroll(event, point, gestures.get()); |
599 if (ScrollUpdate(event, point, gestures.get())) | 618 if (ScrollUpdate(event, point, gestures.get())) |
600 point.UpdateForScroll(); | 619 point.UpdateForScroll(); |
601 break; | 620 break; |
602 case GST_SCROLL_FIRST_RELEASED: | 621 case GST_SCROLL_FIRST_RELEASED: |
603 case GST_SCROLL_FIRST_CANCELLED: | 622 case GST_SCROLL_FIRST_CANCELLED: |
604 ScrollEnd(event, point, gestures.get()); | 623 ScrollEnd(event, point, gestures.get()); |
605 set_state(GS_NO_GESTURE); | 624 set_state(GS_NO_GESTURE); |
606 break; | 625 break; |
607 case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED: | 626 case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED: |
| 627 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED: |
608 PrependTapCancelGestureEvent(point, gestures.get()); | 628 PrependTapCancelGestureEvent(point, gestures.get()); |
609 TwoFingerTapOrPinch(event, point, gestures.get()); | 629 TwoFingerTapOrPinch(event, point, gestures.get()); |
610 break; | 630 break; |
611 case GST_PENDING_SYNTHETIC_CLICK_NO_SCROLL_SECOND_PRESSED: | 631 case GST_SYNTHETIC_CLICK_ABORTED_SECOND_PRESSED: |
612 TwoFingerTapOrPinch(event, point, gestures.get()); | 632 TwoFingerTapOrPinch(event, point, gestures.get()); |
613 break; | 633 break; |
614 case GST_SCROLL_SECOND_PRESSED: | 634 case GST_SCROLL_SECOND_PRESSED: |
615 PinchStart(event, point, gestures.get()); | 635 PinchStart(event, point, gestures.get()); |
616 set_state(GS_PINCH); | 636 set_state(GS_PINCH); |
617 break; | 637 break; |
618 case GST_PENDING_TWO_FINGER_TAP_FIRST_RELEASED: | 638 case GST_PENDING_TWO_FINGER_TAP_FIRST_RELEASED: |
619 case GST_PENDING_TWO_FINGER_TAP_SECOND_RELEASED: | 639 case GST_PENDING_TWO_FINGER_TAP_SECOND_RELEASED: |
620 TwoFingerTouchReleased(event, point, gestures.get()); | 640 TwoFingerTouchReleased(event, point, gestures.get()); |
621 set_state(GS_SCROLL); | 641 set_state(GS_SCROLL); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
744 | 764 |
745 if (event.type() == ui::ET_TOUCH_RELEASED || | 765 if (event.type() == ui::ET_TOUCH_RELEASED || |
746 event.type() == ui::ET_TOUCH_CANCELLED) | 766 event.type() == ui::ET_TOUCH_CANCELLED) |
747 AppendEndGestureEvent(point, gestures.get()); | 767 AppendEndGestureEvent(point, gestures.get()); |
748 | 768 |
749 if (state_ != last_state) | 769 if (state_ != last_state) |
750 DVLOG(4) << "Gesture Sequence" | 770 DVLOG(4) << "Gesture Sequence" |
751 << " State: " << state_ | 771 << " State: " << state_ |
752 << " touch id: " << event.touch_id(); | 772 << " touch id: " << event.touch_id(); |
753 | 773 |
754 if (last_state == GS_PENDING_SYNTHETIC_CLICK && state_ != last_state) { | 774 // If the state has changed from one in which a long/show press is possible to |
| 775 // one in which they are not possible, cancel the timers. |
| 776 if (GestureStateSupportsActiveTimer(last_state) && |
| 777 !GestureStateSupportsActiveTimer(state_)) { |
755 GetLongPressTimer()->Stop(); | 778 GetLongPressTimer()->Stop(); |
756 GetShowPressTimer()->Stop(); | 779 GetShowPressTimer()->Stop(); |
757 } | 780 } |
758 | 781 |
759 // The set of point_ids must be contiguous and include 0. | 782 // The set of point_ids must be contiguous and include 0. |
760 // When a touch point is released, all points with ids greater than the | 783 // When a touch point is released, all points with ids greater than the |
761 // released point must have their ids decremented, or the set of point_ids | 784 // released point must have their ids decremented, or the set of point_ids |
762 // could end up with gaps. | 785 // could end up with gaps. |
763 if (event.type() == ui::ET_TOUCH_RELEASED || | 786 if (event.type() == ui::ET_TOUCH_RELEASED || |
764 event.type() == ui::ET_TOUCH_CANCELLED) { | 787 event.type() == ui::ET_TOUCH_CANCELLED) { |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1095 rect.height()), | 1118 rect.height()), |
1096 point->enclosing_rectangle().CenterPoint(), | 1119 point->enclosing_rectangle().CenterPoint(), |
1097 flags_, | 1120 flags_, |
1098 base::Time::FromDoubleT(point->last_touch_time()), | 1121 base::Time::FromDoubleT(point->last_touch_time()), |
1099 1 << point->touch_id())); | 1122 1 << point->touch_id())); |
1100 } | 1123 } |
1101 | 1124 |
1102 bool GestureSequence::Click(const TouchEvent& event, | 1125 bool GestureSequence::Click(const TouchEvent& event, |
1103 const GesturePoint& point, | 1126 const GesturePoint& point, |
1104 Gestures* gestures) { | 1127 Gestures* gestures) { |
1105 DCHECK(state_ == GS_PENDING_SYNTHETIC_CLICK); | 1128 DCHECK(state_ == GS_PENDING_SYNTHETIC_CLICK || |
| 1129 state_ == GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL); |
1106 if (point.IsInClickWindow(event)) { | 1130 if (point.IsInClickWindow(event)) { |
1107 int tap_count = 1; | 1131 int tap_count = 1; |
1108 if (point.IsInTripleClickWindow(event)) | 1132 if (point.IsInTripleClickWindow(event)) |
1109 tap_count = 3; | 1133 tap_count = 3; |
1110 else if (point.IsInDoubleClickWindow(event)) | 1134 else if (point.IsInDoubleClickWindow(event)) |
1111 tap_count = 2; | 1135 tap_count = 2; |
1112 if (tap_count == 1 && GetShowPressTimer()->IsRunning()) { | 1136 if (tap_count == 1 && GetShowPressTimer()->IsRunning()) { |
1113 GetShowPressTimer()->Stop(); | 1137 GetShowPressTimer()->Stop(); |
1114 AppendShowPressGestureEvent(); | 1138 AppendShowPressGestureEvent(); |
1115 } | 1139 } |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1180 &GestureSequence::AppendShowPressGestureEvent); | 1204 &GestureSequence::AppendShowPressGestureEvent); |
1181 | 1205 |
1182 return true; | 1206 return true; |
1183 } | 1207 } |
1184 | 1208 |
1185 bool GestureSequence::TwoFingerTouchDown(const TouchEvent& event, | 1209 bool GestureSequence::TwoFingerTouchDown(const TouchEvent& event, |
1186 const GesturePoint& point, | 1210 const GesturePoint& point, |
1187 Gestures* gestures) { | 1211 Gestures* gestures) { |
1188 DCHECK(state_ == GS_PENDING_SYNTHETIC_CLICK || | 1212 DCHECK(state_ == GS_PENDING_SYNTHETIC_CLICK || |
1189 state_ == GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL || | 1213 state_ == GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL || |
| 1214 state_ == GS_SYNTHETIC_CLICK_ABORTED || |
1190 state_ == GS_SCROLL); | 1215 state_ == GS_SCROLL); |
1191 | 1216 |
1192 if (state_ == GS_SCROLL) { | 1217 if (state_ == GS_SCROLL) { |
1193 AppendScrollGestureEnd(point, point.last_touch_position(), gestures, | 1218 AppendScrollGestureEnd(point, point.last_touch_position(), gestures, |
1194 0.f, 0.f); | 1219 0.f, 0.f); |
1195 } | 1220 } |
1196 second_touch_time_ = event.time_stamp(); | 1221 second_touch_time_ = event.time_stamp(); |
1197 return true; | 1222 return true; |
1198 } | 1223 } |
1199 | 1224 |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1440 // Since a timer is running, there should be a non-NULL point. | 1465 // Since a timer is running, there should be a non-NULL point. |
1441 const GesturePoint* point = GetPointByPointId(0); | 1466 const GesturePoint* point = GetPointByPointId(0); |
1442 if (!ui::gestures::IsInsideManhattanSquare(point->first_touch_position(), | 1467 if (!ui::gestures::IsInsideManhattanSquare(point->first_touch_position(), |
1443 event.location())) { | 1468 event.location())) { |
1444 GetLongPressTimer()->Stop(); | 1469 GetLongPressTimer()->Stop(); |
1445 GetShowPressTimer()->Stop(); | 1470 GetShowPressTimer()->Stop(); |
1446 } | 1471 } |
1447 } | 1472 } |
1448 | 1473 |
1449 } // namespace ui | 1474 } // namespace ui |
OLD | NEW |