diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-08 19:52:32 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-08 19:52:32 +0000 |
commit | 79d24dd705cdce66d756efb684d6ff4446d312f6 (patch) | |
tree | 323ba37465e5bfbb759f68501090691c514a2d4d /ui/aura | |
parent | 4ed935b305063de262d57e525eccf821615db205 (diff) | |
download | chromium_src-79d24dd705cdce66d756efb684d6ff4446d312f6.zip chromium_src-79d24dd705cdce66d756efb684d6ff4446d312f6.tar.gz chromium_src-79d24dd705cdce66d756efb684d6ff4446d312f6.tar.bz2 |
Cleanup state-transition related code in the gesture-recognizer.
BUG=113146
TEST=covered by existing tests.
Review URL: https://chromiumcodereview.appspot.com/9359015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121029 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/aura')
-rw-r--r-- | ui/aura/gestures/gesture_point.h | 8 | ||||
-rw-r--r-- | ui/aura/gestures/gesture_sequence.cc | 34 | ||||
-rw-r--r-- | ui/aura/gestures/gesture_sequence.h | 8 |
3 files changed, 22 insertions, 28 deletions
diff --git a/ui/aura/gestures/gesture_point.h b/ui/aura/gestures/gesture_point.h index f4b589d..868cc06 100644 --- a/ui/aura/gestures/gesture_point.h +++ b/ui/aura/gestures/gesture_point.h @@ -12,14 +12,6 @@ namespace aura { class TouchEvent; -// Gesture state. -enum GestureState { - GS_NO_GESTURE, - GS_PENDING_SYNTHETIC_CLICK, - GS_SCROLL, - GS_PINCH, -}; - // A GesturePoint represents a single touch-point/finger during a gesture // recognition process. class GesturePoint { diff --git a/ui/aura/gestures/gesture_sequence.cc b/ui/aura/gestures/gesture_sequence.cc index c14c686..bd274a8 100644 --- a/ui/aura/gestures/gesture_sequence.cc +++ b/ui/aura/gestures/gesture_sequence.cc @@ -166,8 +166,6 @@ GestureSequence::~GestureSequence() { GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture( const TouchEvent& event, ui::TouchStatus status) { - // TODO(sad): All the state transitions should happen in this function. - // http://crbug.com/113146 if (status != ui::TOUCH_STATUS_UNKNOWN) return NULL; // The event was consumed by a touch sequence. @@ -188,15 +186,19 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture( switch (Signature(state_, event.touch_id(), event.type(), false)) { case GST_NO_GESTURE_FIRST_PRESSED: TouchDown(event, point, gestures.get()); + set_state(GS_PENDING_SYNTHETIC_CLICK); break; case GST_PENDING_SYNTHETIC_CLICK_FIRST_RELEASED: if (Click(event, point, gestures.get())) point.UpdateForTap(); + set_state(GS_NO_GESTURE); break; case GST_PENDING_SYNTHETIC_CLICK_FIRST_MOVED: case GST_PENDING_SYNTHETIC_CLICK_FIRST_STATIONARY: - if (InClickOrScroll(event, point, gestures.get())) + if (InClickOrScroll(event, point, gestures.get())) { point.UpdateForScroll(); + set_state(GS_SCROLL); + } break; case GST_PENDING_SYNTHETIC_CLICK_FIRST_CANCELLED: NoGesture(event, point, gestures.get()); @@ -211,12 +213,14 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture( case GST_SCROLL_SECOND_RELEASED: case GST_SCROLL_SECOND_CANCELLED: ScrollEnd(event, point, gestures.get()); + set_state(GS_NO_GESTURE); break; case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED: case GST_SCROLL_FIRST_PRESSED: case GST_SCROLL_SECOND_PRESSED: PinchStart(event, point, gestures.get()); + set_state(GS_PINCH); break; case GST_PINCH_FIRST_MOVED: case GST_PINCH_SECOND_MOVED: @@ -230,6 +234,10 @@ GestureSequence::Gestures* GestureSequence::ProcessTouchEventForGesture( case GST_PINCH_FIRST_CANCELLED: case GST_PINCH_SECOND_CANCELLED: PinchEnd(event, point, gestures.get()); + + // Once pinch ends, it should still be possible to scroll with the + // remaining finger on the screen. + set_state(GS_SCROLL); break; } @@ -373,23 +381,16 @@ bool GestureSequence::Click(const TouchEvent& event, AppendClickGestureEvent(point, gestures); if (point.IsInDoubleClickWindow(event)) AppendDoubleClickGestureEvent(point, gestures); - set_state(GS_NO_GESTURE); return true; } - set_state(GS_NO_GESTURE); return false; } bool GestureSequence::InClickOrScroll(const TouchEvent& event, const GesturePoint& point, Gestures* gestures) { - if (point.IsInClickWindow(event)) { - set_state(GS_PENDING_SYNTHETIC_CLICK); - return false; - } if (point.IsInScrollWindow(event)) { AppendScrollGestureBegin(point, point.last_touch_position(), gestures); AppendScrollGestureUpdate(point, point.last_touch_position(), gestures); - set_state(GS_SCROLL); return true; } return false; @@ -412,8 +413,7 @@ bool GestureSequence::NoGesture(const TouchEvent&, bool GestureSequence::TouchDown(const TouchEvent& event, const GesturePoint& point, Gestures* gestures) { AppendTapDownGestureEvent(point, gestures); - set_state(GS_PENDING_SYNTHETIC_CLICK); - return false; + return true; } bool GestureSequence::ScrollEnd(const TouchEvent& event, @@ -425,8 +425,7 @@ bool GestureSequence::ScrollEnd(const TouchEvent& event, AppendScrollGestureEnd(point, point.last_touch_position(), gestures, 0.f, 0.f); } - Reset(); - return false; + return true; } bool GestureSequence::PinchStart(const TouchEvent& event, @@ -443,7 +442,6 @@ bool GestureSequence::PinchStart(const TouchEvent& event, AppendScrollGestureBegin(point, center, gestures); } - set_state(GS_PINCH); return true; } @@ -475,13 +473,9 @@ bool GestureSequence::PinchEnd(const TouchEvent& event, AppendPinchGestureEnd(points_[0], points_[1], distance / pinch_distance_start_, gestures); - // Once pinch ends, it should still be possible to scroll with the remaining - // finger on the screen. - set_state(GS_SCROLL); - pinch_distance_start_ = 0; pinch_distance_current_ = 0; - return false; + return true; } } // namespace aura diff --git a/ui/aura/gestures/gesture_sequence.h b/ui/aura/gestures/gesture_sequence.h index 0ef0419..d43fa70 100644 --- a/ui/aura/gestures/gesture_sequence.h +++ b/ui/aura/gestures/gesture_sequence.h @@ -14,6 +14,14 @@ namespace aura { class TouchEvent; class GestureEvent; +// Gesture state. +enum GestureState { + GS_NO_GESTURE, + GS_PENDING_SYNTHETIC_CLICK, + GS_SCROLL, + GS_PINCH, +}; + // A GestureSequence recognizes gestures from touch sequences. class GestureSequence { public: |