| 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 "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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |