OLD | NEW |
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 <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 | 301 |
302 void GestureRecognizerImpl::DispatchGestureEvent(GestureEvent* event) { | 302 void GestureRecognizerImpl::DispatchGestureEvent(GestureEvent* event) { |
303 GestureConsumer* consumer = GetTargetForGestureEvent(*event); | 303 GestureConsumer* consumer = GetTargetForGestureEvent(*event); |
304 if (consumer) { | 304 if (consumer) { |
305 GestureEventHelper* helper = FindDispatchHelperForConsumer(consumer); | 305 GestureEventHelper* helper = FindDispatchHelperForConsumer(consumer); |
306 if (helper) | 306 if (helper) |
307 helper->DispatchGestureEvent(event); | 307 helper->DispatchGestureEvent(event); |
308 } | 308 } |
309 } | 309 } |
310 | 310 |
311 GestureSequence::Gestures* GestureRecognizerImpl::ProcessTouchEventForGesture( | 311 ScopedVector<GestureEvent>* GestureRecognizerImpl::ProcessTouchEventForGesture( |
312 const TouchEvent& event, | 312 const TouchEvent& event, |
313 ui::EventResult result, | 313 ui::EventResult result, |
314 GestureConsumer* target) { | 314 GestureConsumer* target) { |
315 SetupTargets(event, target); | 315 SetupTargets(event, target); |
316 | 316 |
317 if (!use_unified_gesture_detector_) { | 317 if (!use_unified_gesture_detector_) { |
318 GestureSequence* gesture_sequence = GetGestureSequenceForConsumer(target); | 318 GestureSequence* gesture_sequence = GetGestureSequenceForConsumer(target); |
319 return gesture_sequence->ProcessTouchEventForGesture(event, result); | 319 return gesture_sequence->ProcessTouchEventForGesture(event, result); |
320 } else { | 320 } else { |
321 GestureProviderAura* gesture_provider = | 321 GestureProviderAura* gesture_provider = |
322 GetGestureProviderForConsumer(target); | 322 GetGestureProviderForConsumer(target); |
323 // TODO(tdresser) - detect gestures eagerly. | 323 // TODO(tdresser) - detect gestures eagerly. |
324 if (!(result & ER_CONSUMED)) { | 324 if (!(result & ER_CONSUMED)) { |
325 if (gesture_provider->OnTouchEvent(event)) | 325 if (gesture_provider->OnTouchEvent(event)) { |
326 gesture_provider->OnTouchEventAck(result != ER_UNHANDLED); | 326 gesture_provider->OnTouchEventAck(result != ER_UNHANDLED); |
| 327 return gesture_provider->GetAndResetPendingGestures(); |
| 328 } |
327 } | 329 } |
328 return NULL; | 330 return NULL; |
329 } | 331 } |
330 } | 332 } |
331 | 333 |
332 bool GestureRecognizerImpl::CleanupStateForConsumer( | 334 bool GestureRecognizerImpl::CleanupStateForConsumer( |
333 GestureConsumer* consumer) { | 335 GestureConsumer* consumer) { |
334 bool state_cleaned_up = false; | 336 bool state_cleaned_up = false; |
335 | 337 |
336 if (!use_unified_gesture_detector_) { | 338 if (!use_unified_gesture_detector_) { |
337 if (consumer_sequence_.count(consumer)) { | 339 if (consumer_sequence_.count(consumer)) { |
338 state_cleaned_up = true; | 340 state_cleaned_up = true; |
339 delete consumer_sequence_[consumer]; | 341 delete consumer_sequence_[consumer]; |
340 consumer_sequence_.erase(consumer); | 342 consumer_sequence_.erase(consumer); |
341 } | 343 } |
342 } else { | 344 } else { |
343 if (consumer_gesture_provider_.count(consumer)) { | 345 if (consumer_gesture_provider_.count(consumer)) { |
344 state_cleaned_up = true; | 346 state_cleaned_up = true; |
345 // Don't immediately delete the GestureProvider, as we could be in the | 347 delete consumer_gesture_provider_[consumer]; |
346 // middle of dispatching a set of gestures. | |
347 base::MessageLoop::current()->DeleteSoon( | |
348 FROM_HERE, consumer_gesture_provider_[consumer]); | |
349 consumer_gesture_provider_.erase(consumer); | 348 consumer_gesture_provider_.erase(consumer); |
350 } | 349 } |
351 } | 350 } |
352 | 351 |
353 state_cleaned_up |= RemoveConsumerFromMap(consumer, &touch_id_target_); | 352 state_cleaned_up |= RemoveConsumerFromMap(consumer, &touch_id_target_); |
354 state_cleaned_up |= | 353 state_cleaned_up |= |
355 RemoveConsumerFromMap(consumer, &touch_id_target_for_gestures_); | 354 RemoveConsumerFromMap(consumer, &touch_id_target_for_gestures_); |
356 return state_cleaned_up; | 355 return state_cleaned_up; |
357 } | 356 } |
358 | 357 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 std::vector<GestureEventHelper*>::iterator it; | 412 std::vector<GestureEventHelper*>::iterator it; |
414 for (it = helpers.begin(); it != helpers.end(); ++it) | 413 for (it = helpers.begin(); it != helpers.end(); ++it) |
415 gesture_recognizer->AddGestureEventHelper(*it); | 414 gesture_recognizer->AddGestureEventHelper(*it); |
416 | 415 |
417 helpers.clear(); | 416 helpers.clear(); |
418 g_gesture_recognizer_instance = | 417 g_gesture_recognizer_instance = |
419 static_cast<GestureRecognizerImpl*>(gesture_recognizer); | 418 static_cast<GestureRecognizerImpl*>(gesture_recognizer); |
420 } | 419 } |
421 | 420 |
422 } // namespace ui | 421 } // namespace ui |
OLD | NEW |