diff options
author | rbyers@chromium.org <rbyers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-11 16:37:59 +0000 |
---|---|---|
committer | rbyers@chromium.org <rbyers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-11 16:37:59 +0000 |
commit | 7696c408db7500ec57f04e51bd17a4b6d25e1d17 (patch) | |
tree | bd18ffa0f95e1034d926a69b5fda241dfef5eea3 /ui/base/gestures/gesture_sequence.cc | |
parent | dc3defaa1ab97f4345e03d7088fc7779e8cb0b2d (diff) | |
download | chromium_src-7696c408db7500ec57f04e51bd17a4b6d25e1d17.zip chromium_src-7696c408db7500ec57f04e51bd17a4b6d25e1d17.tar.gz chromium_src-7696c408db7500ec57f04e51bd17a4b6d25e1d17.tar.bz2 |
Add GestureTapCancel gesture type
GestureTapCancel fires whenever a TapDown will not result in a Tap. This can be used, for example, to cancel a pressed state triggered by TapDown.
BUG=146364
Review URL: https://chromiumcodereview.appspot.com/10928066
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@156026 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base/gestures/gesture_sequence.cc')
-rw-r--r-- | ui/base/gestures/gesture_sequence.cc | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/ui/base/gestures/gesture_sequence.cc b/ui/base/gestures/gesture_sequence.cc index d668a1e..2c3b599 100644 --- a/ui/base/gestures/gesture_sequence.cc +++ b/ui/base/gestures/gesture_sequence.cc @@ -368,11 +368,14 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture( case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: if (Click(event, point, gestures.get())) point.UpdateForTap(); + else + PrependTapCancelGestureEvent(point, gestures.get()); set_state(GS_NO_GESTURE); break; case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED: case GST_PENDING_SYNTHETIC_CLICK_FIRST_STATIONARY: if (ScrollStart(event, point, gestures.get())) { + PrependTapCancelGestureEvent(point, gestures.get()); set_state(GS_SCROLL); if (ScrollUpdate(event, point, gestures.get())) point.UpdateForScroll(); @@ -380,6 +383,7 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture( break; case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED_HANDLED: case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: + PrependTapCancelGestureEvent(point, gestures.get()); set_state(GS_NO_GESTURE); break; case GST_SCROLL_FIRST_MOVED: @@ -394,8 +398,10 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture( ScrollEnd(event, point, gestures.get()); set_state(GS_NO_GESTURE); break; - case GST_SCROLL_SECOND_PRESSED: case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED: + PrependTapCancelGestureEvent(point, gestures.get()); + // fall through + case GST_SCROLL_SECOND_PRESSED: if (IsSecondTouchDownCloseEnoughForTwoFingerTap()) { TwoFingerTouchDown(event, point, gestures.get()); set_state(GS_PENDING_TWO_FINGER_TAP); @@ -597,6 +603,16 @@ void GestureSequence::AppendTapDownGestureEvent(const GesturePoint& point, 1 << point.touch_id())); } +void GestureSequence::PrependTapCancelGestureEvent(const GesturePoint& point, + Gestures* gestures) { + gestures->insert(gestures->begin(), CreateGestureEvent( + GestureEventDetails(ui::ET_GESTURE_TAP_CANCEL, 0, 0), + point.first_touch_position(), + flags_, + base::Time::FromDoubleT(point.last_touch_time()), + 1 << point.touch_id())); +} + void GestureSequence::AppendBeginGestureEvent(const GesturePoint& point, Gestures* gestures) { gestures->push_back(CreateGestureEvent( |