summaryrefslogtreecommitdiffstats
path: root/ui/base/gestures/gesture_sequence.cc
diff options
context:
space:
mode:
authorrbyers@chromium.org <rbyers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-11 16:37:59 +0000
committerrbyers@chromium.org <rbyers@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-11 16:37:59 +0000
commit7696c408db7500ec57f04e51bd17a4b6d25e1d17 (patch)
treebd18ffa0f95e1034d926a69b5fda241dfef5eea3 /ui/base/gestures/gesture_sequence.cc
parentdc3defaa1ab97f4345e03d7088fc7779e8cb0b2d (diff)
downloadchromium_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.cc18
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(