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

Side by Side Diff: ui/events/gestures/gesture_recognizer_impl.cc

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.h ('k') | ui/events/gestures/gesture_sequence.h » ('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 #include "ui/events/gestures/gesture_recognizer_impl.h" 5 #include "ui/events/gestures/gesture_recognizer_impl.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "ui/events/event.h" 10 #include "ui/events/event.h"
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 if (i->second == consumer) 156 if (i->second == consumer)
157 ids.push_back(std::make_pair(i->first, i->second)); 157 ids.push_back(std::make_pair(i->first, i->second));
158 } 158 }
159 CancelTouches(&ids); 159 CancelTouches(&ids);
160 } 160 }
161 161
162 //////////////////////////////////////////////////////////////////////////////// 162 ////////////////////////////////////////////////////////////////////////////////
163 // GestureRecognizerImpl, protected: 163 // GestureRecognizerImpl, protected:
164 164
165 GestureSequence* GestureRecognizerImpl::CreateSequence( 165 GestureSequence* GestureRecognizerImpl::CreateSequence(
166 GestureSequenceDelegate* delegate) { 166 GestureEventQueueTimerInterface* geq_timers) {
167 return new GestureSequence(delegate); 167 return new GestureSequence(geq_timers);
168 } 168 }
169 169
170 //////////////////////////////////////////////////////////////////////////////// 170 ////////////////////////////////////////////////////////////////////////////////
171 // GestureRecognizerImpl, private: 171 // GestureRecognizerImpl, private:
172 172
173 GestureSequence* GestureRecognizerImpl::GetGestureSequenceForConsumer( 173 GestureSequence* GestureRecognizerImpl::GetGestureSequenceForConsumer(
174 GestureConsumer* consumer) { 174 GestureConsumer* consumer, GestureEventQueueTimerInterface* geq_timers) {
175 GestureSequence* gesture_sequence = consumer_sequence_[consumer]; 175 GestureSequence* gesture_sequence = consumer_sequence_[consumer];
176 if (!gesture_sequence) { 176 if (!gesture_sequence) {
177 gesture_sequence = CreateSequence(this); 177 gesture_sequence = CreateSequence(geq_timers);
178 consumer_sequence_[consumer] = gesture_sequence; 178 consumer_sequence_[consumer] = gesture_sequence;
179 } 179 }
180 return gesture_sequence; 180 return gesture_sequence;
181 } 181 }
182 182
183 void GestureRecognizerImpl::SetupTargets(const TouchEvent& event, 183 void GestureRecognizerImpl::SetupTargets(const TouchEvent& event,
184 GestureConsumer* target) { 184 GestureConsumer* target) {
185 if (event.type() == ui::ET_TOUCH_RELEASED || 185 if (event.type() == ui::ET_TOUCH_RELEASED ||
186 event.type() == ui::ET_TOUCH_CANCELLED) { 186 event.type() == ui::ET_TOUCH_CANCELLED) {
187 touch_id_target_.erase(event.touch_id()); 187 touch_id_target_.erase(event.touch_id());
(...skipping 14 matching lines...) Expand all
202 ui::EventTimeForNow(), 0.0f, 0.0f, 0.0f, 0.0f); 202 ui::EventTimeForNow(), 0.0f, 0.0f, 0.0f, 0.0f);
203 GestureEventHelper* helper = FindDispatchHelperForConsumer(target); 203 GestureEventHelper* helper = FindDispatchHelperForConsumer(target);
204 if (helper) 204 if (helper)
205 helper->DispatchCancelTouchEvent(&touch_event); 205 helper->DispatchCancelTouchEvent(&touch_event);
206 touches->erase(touches->begin()); 206 touches->erase(touches->begin());
207 } 207 }
208 } 208 }
209 209
210 GestureSequence::Gestures* GestureRecognizerImpl::ProcessTouchEventForGesture( 210 GestureSequence::Gestures* GestureRecognizerImpl::ProcessTouchEventForGesture(
211 const TouchEvent& event, 211 const TouchEvent& event,
212 ui::EventResult result, 212 GestureConsumer* target,
213 GestureConsumer* target) { 213 GestureEventQueueTimerInterface* geq_timers) {
214 SetupTargets(event, target); 214 SetupTargets(event, target);
215 GestureSequence* gesture_sequence = GetGestureSequenceForConsumer(target); 215 GestureSequence* gesture_sequence =
216 return gesture_sequence->ProcessTouchEventForGesture(event, result); 216 GetGestureSequenceForConsumer(target, geq_timers);
217 return gesture_sequence->ProcessTouchEventForGesture(event);
217 } 218 }
218 219
219 void GestureRecognizerImpl::CleanupStateForConsumer(GestureConsumer* consumer) { 220 void GestureRecognizerImpl::CleanupStateForConsumer(GestureConsumer* consumer) {
220 if (consumer_sequence_.count(consumer)) { 221 if (consumer_sequence_.count(consumer)) {
221 delete consumer_sequence_[consumer]; 222 delete consumer_sequence_[consumer];
222 consumer_sequence_.erase(consumer); 223 consumer_sequence_.erase(consumer);
223 } 224 }
224 225
225 RemoveConsumerFromMap(consumer, &touch_id_target_); 226 RemoveConsumerFromMap(consumer, &touch_id_target_);
226 RemoveConsumerFromMap(consumer, &touch_id_target_for_gestures_); 227 RemoveConsumerFromMap(consumer, &touch_id_target_for_gestures_);
227 } 228 }
228 229
229 void GestureRecognizerImpl::AddGestureEventHelper(GestureEventHelper* helper) { 230 void GestureRecognizerImpl::AddGestureEventHelper(GestureEventHelper* helper) {
230 helpers_.push_back(helper); 231 helpers_.push_back(helper);
231 } 232 }
232 233
233 void GestureRecognizerImpl::RemoveGestureEventHelper( 234 void GestureRecognizerImpl::RemoveGestureEventHelper(
234 GestureEventHelper* helper) { 235 GestureEventHelper* helper) {
235 std::vector<GestureEventHelper*>::iterator it = std::find(helpers_.begin(), 236 std::vector<GestureEventHelper*>::iterator it = std::find(helpers_.begin(),
236 helpers_.end(), helper); 237 helpers_.end(), helper);
237 if (it != helpers_.end()) 238 if (it != helpers_.end())
238 helpers_.erase(it); 239 helpers_.erase(it);
239 } 240 }
240 241
241 void GestureRecognizerImpl::DispatchPostponedGestureEvent(GestureEvent* event) {
242 GestureConsumer* consumer = GetTargetForGestureEvent(*event);
243 if (consumer) {
244 GestureEventHelper* helper = FindDispatchHelperForConsumer(consumer);
245 if (helper)
246 helper->DispatchPostponedGestureEvent(event);
247 }
248 }
249
250 GestureEventHelper* GestureRecognizerImpl::FindDispatchHelperForConsumer( 242 GestureEventHelper* GestureRecognizerImpl::FindDispatchHelperForConsumer(
251 GestureConsumer* consumer) { 243 GestureConsumer* consumer) {
252 std::vector<GestureEventHelper*>::iterator it; 244 std::vector<GestureEventHelper*>::iterator it;
253 for (it = helpers_.begin(); it != helpers_.end(); ++it) { 245 for (it = helpers_.begin(); it != helpers_.end(); ++it) {
254 if ((*it)->CanDispatchToConsumer(consumer)) 246 if ((*it)->CanDispatchToConsumer(consumer))
255 return (*it); 247 return (*it);
256 } 248 }
257 return NULL; 249 return NULL;
258 } 250 }
259 251
(...skipping 18 matching lines...) Expand all
278 std::vector<GestureEventHelper*>::iterator it; 270 std::vector<GestureEventHelper*>::iterator it;
279 for (it = helpers.begin(); it != helpers.end(); ++it) 271 for (it = helpers.begin(); it != helpers.end(); ++it)
280 gesture_recognizer->AddGestureEventHelper(*it); 272 gesture_recognizer->AddGestureEventHelper(*it);
281 273
282 helpers.clear(); 274 helpers.clear();
283 g_gesture_recognizer_instance = 275 g_gesture_recognizer_instance =
284 static_cast<GestureRecognizerImpl*>(gesture_recognizer); 276 static_cast<GestureRecognizerImpl*>(gesture_recognizer);
285 } 277 }
286 278
287 } // namespace ui 279 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/gestures/gesture_recognizer_impl.h ('k') | ui/events/gestures/gesture_sequence.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698