Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Side by Side Diff: ui/events/gestures/gesture_sequence.h

Issue 101933004: Eager Gesture Recognizer (WIP) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Starting work on Android. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/events/gestures/gesture_recognizer_impl.cc ('k') | ui/events/gestures/gesture_sequence.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef UI_EVENTS_GESTURES_GESTURE_SEQUENCE_H_ 5 #ifndef UI_EVENTS_GESTURES_GESTURE_SEQUENCE_H_
6 #define UI_EVENTS_GESTURES_GESTURE_SEQUENCE_H_ 6 #define UI_EVENTS_GESTURES_GESTURE_SEQUENCE_H_
7 7
8 #include "base/timer/timer.h" 8 #include "base/timer/timer.h"
9 #include "ui/events/event_constants.h" 9 #include "ui/events/event_constants.h"
10 #include "ui/events/gestures/gesture_event_queue.h"
10 #include "ui/events/gestures/gesture_point.h" 11 #include "ui/events/gestures/gesture_point.h"
11 #include "ui/events/gestures/gesture_recognizer.h" 12 #include "ui/events/gestures/gesture_recognizer.h"
12 #include "ui/gfx/rect.h" 13 #include "ui/gfx/rect.h"
13 14
14 namespace ui { 15 namespace ui {
15 class TouchEvent; 16 class TouchEvent;
16 class GestureEvent; 17 class GestureEvent;
17 18
18 // Gesture state. 19 // Gesture state.
19 enum GestureState { 20 enum GestureState {
20 GS_NO_GESTURE, 21 GS_NO_GESTURE,
21 GS_PENDING_SYNTHETIC_CLICK, 22 GS_PENDING_SYNTHETIC_CLICK,
22 GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL, 23 GS_PENDING_SYNTHETIC_CLICK_NO_SCROLL,
23 GS_SCROLL, 24 GS_SCROLL,
24 GS_PINCH, 25 GS_PINCH,
25 GS_PENDING_TWO_FINGER_TAP, 26 GS_PENDING_TWO_FINGER_TAP,
26 GS_PENDING_TWO_FINGER_TAP_NO_PINCH, 27 GS_PENDING_TWO_FINGER_TAP_NO_PINCH,
27 GS_PENDING_PINCH, 28 GS_PENDING_PINCH,
28 GS_PENDING_PINCH_NO_PINCH, 29 GS_PENDING_PINCH_NO_PINCH,
29 }; 30 };
30 31
31 enum ScrollType { 32 enum ScrollType {
32 ST_FREE, 33 ST_FREE,
33 ST_HORIZONTAL, 34 ST_HORIZONTAL,
34 ST_VERTICAL, 35 ST_VERTICAL,
35 }; 36 };
36 37
37 // Delegates dispatch of gesture events for which the GestureSequence does not
38 // have enough context to dispatch itself.
39 class EVENTS_EXPORT GestureSequenceDelegate {
40 public:
41 virtual void DispatchPostponedGestureEvent(GestureEvent* event) = 0;
42
43 protected:
44 virtual ~GestureSequenceDelegate() {}
45 };
46
47 // A GestureSequence recognizes gestures from touch sequences. 38 // A GestureSequence recognizes gestures from touch sequences.
48 class EVENTS_EXPORT GestureSequence { 39 class EVENTS_EXPORT GestureSequence {
49 public: 40 public:
50 // Maximum number of points in a single gesture. 41 // Maximum number of points in a single gesture.
51 static const int kMaxGesturePoints = 12; 42 static const int kMaxGesturePoints = 12;
52 43
53 explicit GestureSequence(GestureSequenceDelegate* delegate); 44 explicit GestureSequence(GestureEventQueueTimerInterface* geq_timers);
54 virtual ~GestureSequence(); 45 virtual ~GestureSequence();
55 46
56 typedef GestureRecognizer::Gestures Gestures; 47 typedef GestureRecognizer::Gestures Gestures;
57 48
58 // Invoked for each touch event that could contribute to the current gesture. 49 // Invoked for each touch event that could contribute to the current gesture.
59 // Returns list of zero or more GestureEvents identified after processing 50 // Returns list of zero or more GestureEvents identified after processing
60 // TouchEvent. 51 // TouchEvent.
61 // Caller would be responsible for freeing up Gestures. 52 // Caller would be responsible for freeing up Gestures.
62 virtual Gestures* ProcessTouchEventForGesture(const TouchEvent& event, 53 virtual Gestures* ProcessTouchEventForGesture(const TouchEvent& event);
63 EventResult status);
64 const GesturePoint* points() const { return points_; } 54 const GesturePoint* points() const { return points_; }
65 int point_count() const { return point_count_; } 55 int point_count() const { return point_count_; }
66 56
67 const gfx::Point& last_touch_location() const { return last_touch_location_; } 57 const gfx::Point& last_touch_location() const { return last_touch_location_; }
68 58
69 protected: 59 protected:
70 virtual base::OneShotTimer<GestureSequence>* CreateTimer(); 60 virtual base::OneShotTimer<GestureEventQueueTimerInterface>* CreateTimer();
71 base::OneShotTimer<GestureSequence>* GetLongPressTimer(); 61 base::OneShotTimer<GestureEventQueueTimerInterface>* GetLongPressTimer();
72 base::OneShotTimer<GestureSequence>* GetShowPressTimer(); 62 base::OneShotTimer<GestureEventQueueTimerInterface>* GetShowPressTimer();
73 63
74 private: 64 private:
75 // Recreates the axis-aligned bounding box that contains all the touch-points 65 // Recreates the axis-aligned bounding box that contains all the touch-points
76 // at their most recent position. 66 // at their most recent position.
77 void RecreateBoundingBox(); 67 void RecreateBoundingBox();
78 68
79 void ResetVelocities(); 69 void ResetVelocities();
80 70
81 GesturePoint& GesturePointForEvent(const TouchEvent& event); 71 GesturePoint& GesturePointForEvent(const TouchEvent& event);
82 72
(...skipping 18 matching lines...) Expand all
101 void AppendTapDownGestureEvent(const GesturePoint& point, Gestures* gestures); 91 void AppendTapDownGestureEvent(const GesturePoint& point, Gestures* gestures);
102 void PrependTapCancelGestureEvent(const GesturePoint& point, 92 void PrependTapCancelGestureEvent(const GesturePoint& point,
103 Gestures* gestures); 93 Gestures* gestures);
104 void AppendBeginGestureEvent(const GesturePoint& point, Gestures* gestures); 94 void AppendBeginGestureEvent(const GesturePoint& point, Gestures* gestures);
105 void AppendEndGestureEvent(const GesturePoint& point, Gestures* gestures); 95 void AppendEndGestureEvent(const GesturePoint& point, Gestures* gestures);
106 void AppendClickGestureEvent(const GesturePoint& point, 96 void AppendClickGestureEvent(const GesturePoint& point,
107 int tap_count, 97 int tap_count,
108 Gestures* gestures); 98 Gestures* gestures);
109 void AppendDoubleClickGestureEvent(const GesturePoint& point, 99 void AppendDoubleClickGestureEvent(const GesturePoint& point,
110 Gestures* gestures); 100 Gestures* gestures);
111 void AppendLongPressGestureEvent(); 101 void AppendLongPressGestureEvent(const GesturePoint& point,
112 void AppendShowPressGestureEvent(); 102 Gestures* gestures);
103 void AppendShowPressGestureEvent(const GesturePoint& point,
104 Gestures* gestures);
113 void AppendLongTapGestureEvent(const GesturePoint& point, 105 void AppendLongTapGestureEvent(const GesturePoint& point,
114 Gestures* gestures); 106 Gestures* gestures);
115 107
116 // Scroll gestures. 108 // Scroll gestures.
117 void AppendScrollGestureBegin(const GesturePoint& point, 109 void AppendScrollGestureBegin(const GesturePoint& point,
118 const gfx::Point& location, 110 const gfx::Point& location,
119 Gestures* gestures); 111 Gestures* gestures);
120 void AppendScrollGestureEnd(const GesturePoint& point, 112 void AppendScrollGestureEnd(const GesturePoint& point,
121 const gfx::Point& location, 113 const gfx::Point& location,
122 Gestures* gestures, 114 Gestures* gestures,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 float pinch_distance_start_; 211 float pinch_distance_start_;
220 212
221 // This distance is updated after each PINCH_UPDATE. 213 // This distance is updated after each PINCH_UPDATE.
222 float pinch_distance_current_; 214 float pinch_distance_current_;
223 215
224 // This is the time when second touch down was received. Used for determining 216 // This is the time when second touch down was received. Used for determining
225 // if a two finger double tap has happened. 217 // if a two finger double tap has happened.
226 base::TimeDelta second_touch_time_; 218 base::TimeDelta second_touch_time_;
227 219
228 ScrollType scroll_type_; 220 ScrollType scroll_type_;
229 scoped_ptr<base::OneShotTimer<GestureSequence> > long_press_timer_; 221 scoped_ptr<base::OneShotTimer<GestureEventQueueTimerInterface> >
230 scoped_ptr<base::OneShotTimer<GestureSequence> > show_press_timer_; 222 long_press_timer_;
223 scoped_ptr<base::OneShotTimer<GestureEventQueueTimerInterface> >
224 show_press_timer_;
231 225
232 GesturePoint points_[kMaxGesturePoints]; 226 GesturePoint points_[kMaxGesturePoints];
233 int point_count_; 227 int point_count_;
234 228
235 // Location of the last touch event. 229 // Location of the last touch event.
236 gfx::Point last_touch_location_; 230 gfx::Point last_touch_location_;
237 231
238 GestureSequenceDelegate* delegate_; 232 GestureEventQueueTimerInterface* geq_timers_;
239 233
240 DISALLOW_COPY_AND_ASSIGN(GestureSequence); 234 DISALLOW_COPY_AND_ASSIGN(GestureSequence);
241 }; 235 };
242 236
243 } // namespace ui 237 } // namespace ui
244 238
245 #endif // UI_EVENTS_GESTURES_GESTURE_SEQUENCE_H_ 239 #endif // UI_EVENTS_GESTURES_GESTURE_SEQUENCE_H_
OLDNEW
« no previous file with comments | « ui/events/gestures/gesture_recognizer_impl.cc ('k') | ui/events/gestures/gesture_sequence.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698