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 <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 #include <memory> | 10 #include <memory> |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 consumer_gesture_provider_[consumer].get(); | 237 consumer_gesture_provider_[consumer].get(); |
238 if (!gesture_provider) { | 238 if (!gesture_provider) { |
239 gesture_provider = new GestureProviderAura(consumer, this); | 239 gesture_provider = new GestureProviderAura(consumer, this); |
240 consumer_gesture_provider_[consumer] = base::WrapUnique(gesture_provider); | 240 consumer_gesture_provider_[consumer] = base::WrapUnique(gesture_provider); |
241 } | 241 } |
242 return gesture_provider; | 242 return gesture_provider; |
243 } | 243 } |
244 | 244 |
245 void GestureRecognizerImpl::SetupTargets(const TouchEvent& event, | 245 void GestureRecognizerImpl::SetupTargets(const TouchEvent& event, |
246 GestureConsumer* target) { | 246 GestureConsumer* target) { |
| 247 event_to_gesture_provider_[event.unique_event_id()] = |
| 248 GetGestureProviderForConsumer(target); |
247 if (event.type() == ui::ET_TOUCH_RELEASED || | 249 if (event.type() == ui::ET_TOUCH_RELEASED || |
248 event.type() == ui::ET_TOUCH_CANCELLED) { | 250 event.type() == ui::ET_TOUCH_CANCELLED) { |
249 touch_id_target_.erase(event.pointer_details().id); | 251 touch_id_target_.erase(event.pointer_details().id); |
250 } else if (event.type() == ui::ET_TOUCH_PRESSED) { | 252 } else if (event.type() == ui::ET_TOUCH_PRESSED) { |
251 touch_id_target_[event.pointer_details().id] = target; | 253 touch_id_target_[event.pointer_details().id] = target; |
252 } | 254 } |
253 } | 255 } |
254 | 256 |
255 void GestureRecognizerImpl::DispatchGestureEvent( | 257 void GestureRecognizerImpl::DispatchGestureEvent( |
256 GestureConsumer* raw_input_consumer, | 258 GestureConsumer* raw_input_consumer, |
(...skipping 16 matching lines...) Expand all Loading... |
273 | 275 |
274 GestureProviderAura* gesture_provider = | 276 GestureProviderAura* gesture_provider = |
275 GetGestureProviderForConsumer(consumer); | 277 GetGestureProviderForConsumer(consumer); |
276 return gesture_provider->OnTouchEvent(event); | 278 return gesture_provider->OnTouchEvent(event); |
277 } | 279 } |
278 | 280 |
279 GestureRecognizer::Gestures GestureRecognizerImpl::AckTouchEvent( | 281 GestureRecognizer::Gestures GestureRecognizerImpl::AckTouchEvent( |
280 uint32_t unique_event_id, | 282 uint32_t unique_event_id, |
281 ui::EventResult result, | 283 ui::EventResult result, |
282 GestureConsumer* consumer) { | 284 GestureConsumer* consumer) { |
283 GestureProviderAura* gesture_provider = | 285 GestureProviderAura* gesture_provider = nullptr; |
284 GetGestureProviderForConsumer(consumer); | 286 |
| 287 // Check if we have already processed this event before dispatch and have a |
| 288 // consumer associated with it. |
| 289 auto event_to_gesture_provider_iterator = |
| 290 event_to_gesture_provider_.find(unique_event_id); |
| 291 if (event_to_gesture_provider_iterator != event_to_gesture_provider_.end()) { |
| 292 gesture_provider = event_to_gesture_provider_iterator->second; |
| 293 event_to_gesture_provider_.erase(event_to_gesture_provider_iterator); |
| 294 } else { |
| 295 gesture_provider = GetGestureProviderForConsumer(consumer); |
| 296 } |
285 gesture_provider->OnTouchEventAck(unique_event_id, result != ER_UNHANDLED); | 297 gesture_provider->OnTouchEventAck(unique_event_id, result != ER_UNHANDLED); |
286 return gesture_provider->GetAndResetPendingGestures(); | 298 return gesture_provider->GetAndResetPendingGestures(); |
287 } | 299 } |
288 | 300 |
289 bool GestureRecognizerImpl::CleanupStateForConsumer( | 301 bool GestureRecognizerImpl::CleanupStateForConsumer( |
290 GestureConsumer* consumer) { | 302 GestureConsumer* consumer) { |
291 bool state_cleaned_up = false; | 303 bool state_cleaned_up = false; |
292 | 304 |
293 if (consumer_gesture_provider_.count(consumer)) { | 305 if (consumer_gesture_provider_.count(consumer)) { |
294 state_cleaned_up = true; | 306 state_cleaned_up = true; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 std::vector<GestureEventHelper*>::iterator it; | 365 std::vector<GestureEventHelper*>::iterator it; |
354 for (it = helpers.begin(); it != helpers.end(); ++it) | 366 for (it = helpers.begin(); it != helpers.end(); ++it) |
355 gesture_recognizer->AddGestureEventHelper(*it); | 367 gesture_recognizer->AddGestureEventHelper(*it); |
356 | 368 |
357 helpers.clear(); | 369 helpers.clear(); |
358 g_gesture_recognizer_instance = | 370 g_gesture_recognizer_instance = |
359 static_cast<GestureRecognizerImpl*>(gesture_recognizer); | 371 static_cast<GestureRecognizerImpl*>(gesture_recognizer); |
360 } | 372 } |
361 | 373 |
362 } // namespace ui | 374 } // namespace ui |
OLD | NEW |