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 |