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

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

Issue 2474163003: Remove stl_util's deletion function use from ui/. (Closed)
Patch Set: fix Created 4 years, 1 month 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
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <memory> 10 #include <memory>
11 11
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/memory/ptr_util.h"
14 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
15 #include "base/time/time.h" 16 #include "base/time/time.h"
16 #include "ui/events/event.h" 17 #include "ui/events/event.h"
17 #include "ui/events/event_constants.h" 18 #include "ui/events/event_constants.h"
18 #include "ui/events/event_switches.h" 19 #include "ui/events/event_switches.h"
19 #include "ui/events/event_utils.h" 20 #include "ui/events/event_utils.h"
20 #include "ui/events/gesture_detection/gesture_configuration.h" 21 #include "ui/events/gesture_detection/gesture_configuration.h"
21 #include "ui/events/gestures/gesture_types.h" 22 #include "ui/events/gestures/gesture_types.h"
22 23
23 namespace ui { 24 namespace ui {
24 25
25 namespace { 26 namespace {
26 27
27 template <typename T> 28 void TransferConsumer(
28 void TransferConsumer(GestureConsumer* current_consumer, 29 GestureConsumer* current_consumer,
29 GestureConsumer* new_consumer, 30 GestureConsumer* new_consumer,
30 std::map<GestureConsumer*, T>* map) { 31 std::map<GestureConsumer*, std::unique_ptr<GestureProviderAura>>* map) {
31 if (map->count(current_consumer)) { 32 if (map->count(current_consumer)) {
32 (*map)[new_consumer] = (*map)[current_consumer]; 33 (*map)[new_consumer] = std::move((*map)[current_consumer]);
33 (*map)[new_consumer]->set_gesture_consumer(new_consumer); 34 (*map)[new_consumer]->set_gesture_consumer(new_consumer);
34 map->erase(current_consumer); 35 map->erase(current_consumer);
35 } 36 }
36 } 37 }
37 38
38 bool RemoveConsumerFromMap(GestureConsumer* consumer, 39 bool RemoveConsumerFromMap(GestureConsumer* consumer,
39 GestureRecognizerImpl::TouchIdToConsumerMap* map) { 40 GestureRecognizerImpl::TouchIdToConsumerMap* map) {
40 bool consumer_removed = false; 41 bool consumer_removed = false;
41 for (GestureRecognizerImpl::TouchIdToConsumerMap::iterator i = map->begin(); 42 for (auto i = map->begin(); i != map->end();) {
42 i != map->end();) {
43 if (i->second == consumer) { 43 if (i->second == consumer) {
44 map->erase(i++); 44 map->erase(i++);
45 consumer_removed = true; 45 consumer_removed = true;
46 } else { 46 } else {
47 ++i; 47 ++i;
48 } 48 }
49 } 49 }
50 return consumer_removed; 50 return consumer_removed;
51 } 51 }
52 52
53 GestureProviderAura* CreateGestureProvider(GestureConsumer* consumer,
54 GestureProviderAuraClient* client) {
55 return new GestureProviderAura(consumer, client);
56 }
57
58 } // namespace 53 } // namespace
59 54
60 //////////////////////////////////////////////////////////////////////////////// 55 ////////////////////////////////////////////////////////////////////////////////
61 // GestureRecognizerImpl, public: 56 // GestureRecognizerImpl, public:
62 57
63 GestureRecognizerImpl::GestureRecognizerImpl() { 58 GestureRecognizerImpl::GestureRecognizerImpl() {
64 } 59 }
65 60
66 GestureRecognizerImpl::~GestureRecognizerImpl() { 61 GestureRecognizerImpl::~GestureRecognizerImpl() {
67 base::STLDeleteValues(&consumer_gesture_provider_);
68 } 62 }
69 63
70 // Checks if this finger is already down, if so, returns the current target. 64 // Checks if this finger is already down, if so, returns the current target.
71 // Otherwise, returns NULL. 65 // Otherwise, returns NULL.
72 GestureConsumer* GestureRecognizerImpl::GetTouchLockedTarget( 66 GestureConsumer* GestureRecognizerImpl::GetTouchLockedTarget(
73 const TouchEvent& event) { 67 const TouchEvent& event) {
74 return touch_id_target_[event.touch_id()]; 68 return touch_id_target_[event.touch_id()];
75 } 69 }
76 70
77 GestureConsumer* GestureRecognizerImpl::GetTargetForLocation( 71 GestureConsumer* GestureRecognizerImpl::GetTargetForLocation(
78 const gfx::PointF& location, int source_device_id) { 72 const gfx::PointF& location, int source_device_id) {
79 const float max_distance = 73 const float max_distance =
80 GestureConfiguration::GetInstance() 74 GestureConfiguration::GetInstance()
81 ->max_separation_for_gesture_touches_in_pixels(); 75 ->max_separation_for_gesture_touches_in_pixels();
82 76
83 gfx::PointF closest_point; 77 gfx::PointF closest_point;
84 int closest_touch_id = 0; 78 int closest_touch_id = 0;
85 double closest_distance_squared = std::numeric_limits<double>::infinity(); 79 double closest_distance_squared = std::numeric_limits<double>::infinity();
86 80
87 std::map<GestureConsumer*, GestureProviderAura*>::iterator i; 81 for (const auto& provider_pair : consumer_gesture_provider_) {
88 for (i = consumer_gesture_provider_.begin(); 82 const MotionEventAura& pointer_state =
89 i != consumer_gesture_provider_.end(); 83 provider_pair.second->pointer_state();
90 ++i) {
91 const MotionEventAura& pointer_state = i->second->pointer_state();
92 for (size_t j = 0; j < pointer_state.GetPointerCount(); ++j) { 84 for (size_t j = 0; j < pointer_state.GetPointerCount(); ++j) {
93 if (source_device_id != pointer_state.GetSourceDeviceId(j)) 85 if (source_device_id != pointer_state.GetSourceDeviceId(j))
94 continue; 86 continue;
95 gfx::PointF point(pointer_state.GetX(j), pointer_state.GetY(j)); 87 gfx::PointF point(pointer_state.GetX(j), pointer_state.GetY(j));
96 // Relative distance is all we need here, so LengthSquared() is 88 // Relative distance is all we need here, so LengthSquared() is
97 // appropriate, and cheaper than Length(). 89 // appropriate, and cheaper than Length().
98 double distance_squared = (point - location).LengthSquared(); 90 double distance_squared = (point - location).LengthSquared();
99 if (distance_squared < closest_distance_squared) { 91 if (distance_squared < closest_distance_squared) {
100 closest_point = point; 92 closest_point = point;
101 closest_touch_id = pointer_state.GetPointerId(j); 93 closest_touch_id = pointer_state.GetPointerId(j);
102 closest_distance_squared = distance_squared; 94 closest_distance_squared = distance_squared;
103 } 95 }
104 } 96 }
105 } 97 }
106 98
107 if (closest_distance_squared < max_distance * max_distance) 99 if (closest_distance_squared < max_distance * max_distance)
108 return touch_id_target_[closest_touch_id]; 100 return touch_id_target_[closest_touch_id];
109 return NULL; 101 return NULL;
110 } 102 }
111 103
112 void GestureRecognizerImpl::CancelActiveTouchesExcept( 104 void GestureRecognizerImpl::CancelActiveTouchesExcept(
113 GestureConsumer* not_cancelled) { 105 GestureConsumer* not_cancelled) {
114 // Do not iterate directly over |consumer_gesture_provider_| because canceling 106 // Do not iterate directly over |consumer_gesture_provider_| because canceling
115 // active touches may cause the consumer to be removed from 107 // active touches may cause the consumer to be removed from
116 // |consumer_gesture_provider_|. See crbug.com/651258 for more info. 108 // |consumer_gesture_provider_|. See crbug.com/651258 for more info.
117 std::vector<GestureConsumer*> consumers(consumer_gesture_provider_.size()); 109 std::vector<GestureConsumer*> consumers(consumer_gesture_provider_.size());
118 for (auto entry : consumer_gesture_provider_) { 110 for (const auto& entry : consumer_gesture_provider_) {
119 if (entry.first == not_cancelled) 111 if (entry.first == not_cancelled)
120 continue; 112 continue;
121 113
122 consumers.push_back(entry.first); 114 consumers.push_back(entry.first);
123 } 115 }
124 116
125 for (auto consumer : consumers) 117 for (auto consumer : consumers)
126 CancelActiveTouches(consumer); 118 CancelActiveTouches(consumer);
127 } 119 }
128 120
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 for (const std::unique_ptr<TouchEvent>& cancelling_touch : cancelling_touches) 223 for (const std::unique_ptr<TouchEvent>& cancelling_touch : cancelling_touches)
232 helper->DispatchSyntheticTouchEvent(cancelling_touch.get()); 224 helper->DispatchSyntheticTouchEvent(cancelling_touch.get());
233 return cancelling_touches.size() > 0U; 225 return cancelling_touches.size() > 0U;
234 } 226 }
235 227
236 //////////////////////////////////////////////////////////////////////////////// 228 ////////////////////////////////////////////////////////////////////////////////
237 // GestureRecognizerImpl, private: 229 // GestureRecognizerImpl, private:
238 230
239 GestureProviderAura* GestureRecognizerImpl::GetGestureProviderForConsumer( 231 GestureProviderAura* GestureRecognizerImpl::GetGestureProviderForConsumer(
240 GestureConsumer* consumer) { 232 GestureConsumer* consumer) {
241 GestureProviderAura* gesture_provider = consumer_gesture_provider_[consumer]; 233 GestureProviderAura* gesture_provider =
234 consumer_gesture_provider_[consumer].get();
242 if (!gesture_provider) { 235 if (!gesture_provider) {
243 gesture_provider = CreateGestureProvider(consumer, this); 236 gesture_provider = new GestureProviderAura(consumer, this);
244 consumer_gesture_provider_[consumer] = gesture_provider; 237 consumer_gesture_provider_[consumer] = base::WrapUnique(gesture_provider);
245 } 238 }
246 return gesture_provider; 239 return gesture_provider;
247 } 240 }
248 241
249 void GestureRecognizerImpl::SetupTargets(const TouchEvent& event, 242 void GestureRecognizerImpl::SetupTargets(const TouchEvent& event,
250 GestureConsumer* target) { 243 GestureConsumer* target) {
251 if (event.type() == ui::ET_TOUCH_RELEASED || 244 if (event.type() == ui::ET_TOUCH_RELEASED ||
252 event.type() == ui::ET_TOUCH_CANCELLED) { 245 event.type() == ui::ET_TOUCH_CANCELLED) {
253 touch_id_target_.erase(event.touch_id()); 246 touch_id_target_.erase(event.touch_id());
254 } else if (event.type() == ui::ET_TOUCH_PRESSED) { 247 } else if (event.type() == ui::ET_TOUCH_PRESSED) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 gesture_provider->OnTouchEventAck(unique_event_id, result != ER_UNHANDLED); 282 gesture_provider->OnTouchEventAck(unique_event_id, result != ER_UNHANDLED);
290 return gesture_provider->GetAndResetPendingGestures(); 283 return gesture_provider->GetAndResetPendingGestures();
291 } 284 }
292 285
293 bool GestureRecognizerImpl::CleanupStateForConsumer( 286 bool GestureRecognizerImpl::CleanupStateForConsumer(
294 GestureConsumer* consumer) { 287 GestureConsumer* consumer) {
295 bool state_cleaned_up = false; 288 bool state_cleaned_up = false;
296 289
297 if (consumer_gesture_provider_.count(consumer)) { 290 if (consumer_gesture_provider_.count(consumer)) {
298 state_cleaned_up = true; 291 state_cleaned_up = true;
299 delete consumer_gesture_provider_[consumer];
300 consumer_gesture_provider_.erase(consumer); 292 consumer_gesture_provider_.erase(consumer);
301 } 293 }
302 294
303 state_cleaned_up |= RemoveConsumerFromMap(consumer, &touch_id_target_); 295 state_cleaned_up |= RemoveConsumerFromMap(consumer, &touch_id_target_);
304 return state_cleaned_up; 296 return state_cleaned_up;
305 } 297 }
306 298
307 void GestureRecognizerImpl::AddGestureEventHelper(GestureEventHelper* helper) { 299 void GestureRecognizerImpl::AddGestureEventHelper(GestureEventHelper* helper) {
308 helpers_.push_back(helper); 300 helpers_.push_back(helper);
309 } 301 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 std::vector<GestureEventHelper*>::iterator it; 350 std::vector<GestureEventHelper*>::iterator it;
359 for (it = helpers.begin(); it != helpers.end(); ++it) 351 for (it = helpers.begin(); it != helpers.end(); ++it)
360 gesture_recognizer->AddGestureEventHelper(*it); 352 gesture_recognizer->AddGestureEventHelper(*it);
361 353
362 helpers.clear(); 354 helpers.clear();
363 g_gesture_recognizer_instance = 355 g_gesture_recognizer_instance =
364 static_cast<GestureRecognizerImpl*>(gesture_recognizer); 356 static_cast<GestureRecognizerImpl*>(gesture_recognizer);
365 } 357 }
366 358
367 } // namespace ui 359 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698