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

Side by Side Diff: ui/events/gesture_detection/gesture_provider.cc

Issue 220063002: [Android] Use DIP coordinates with MotionEventAndroid (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More fixes Created 6 years, 8 months 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/gesture_detection/gesture_provider.h" 5 #include "ui/events/gesture_detection/gesture_provider.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 tap_details.set_bounding_box( 73 tap_details.set_bounding_box(
74 gfx::RectF(event.GetTouchMajor(), event.GetTouchMajor())); 74 gfx::RectF(event.GetTouchMajor(), event.GetTouchMajor()));
75 return tap_details; 75 return tap_details;
76 } 76 }
77 77
78 } // namespace 78 } // namespace
79 79
80 // GestureProvider:::Config 80 // GestureProvider:::Config
81 81
82 GestureProvider::Config::Config() 82 GestureProvider::Config::Config()
83 : disable_click_delay(false), gesture_begin_end_types_enabled(false) {} 83 : display(gfx::Display::kInvalidDisplayID, gfx::Rect(1, 1)),
84 disable_click_delay(false),
85 gesture_begin_end_types_enabled(false) {}
84 86
85 GestureProvider::Config::~Config() {} 87 GestureProvider::Config::~Config() {}
86 88
87 // GestureProvider::ScaleGestureListener 89 // GestureProvider::ScaleGestureListener
88 90
89 class GestureProvider::ScaleGestureListenerImpl 91 class GestureProvider::ScaleGestureListenerImpl
90 : public ScaleGestureDetector::ScaleGestureListener { 92 : public ScaleGestureDetector::ScaleGestureListener {
91 public: 93 public:
92 ScaleGestureListenerImpl(const ScaleGestureDetector::Config& config, 94 ScaleGestureListenerImpl(const ScaleGestureDetector::Config& config,
93 float device_scale_factor,
94 GestureProvider* provider) 95 GestureProvider* provider)
95 : scale_gesture_detector_(config, this), 96 : scale_gesture_detector_(config, this),
96 provider_(provider), 97 provider_(provider),
97 px_to_dp_(1.0f / device_scale_factor),
98 ignore_multitouch_events_(false), 98 ignore_multitouch_events_(false),
99 pinch_event_sent_(false) {} 99 pinch_event_sent_(false) {}
100 100
101 bool OnTouchEvent(const MotionEvent& event) { 101 bool OnTouchEvent(const MotionEvent& event) {
102 // TODO: Need to deal with multi-touch transition. 102 // TODO: Need to deal with multi-touch transition.
103 const bool in_scale_gesture = IsScaleGestureDetectionInProgress(); 103 const bool in_scale_gesture = IsScaleGestureDetectionInProgress();
104 bool handled = scale_gesture_detector_.OnTouchEvent(event); 104 bool handled = scale_gesture_detector_.OnTouchEvent(event);
105 if (!in_scale_gesture && 105 if (!in_scale_gesture &&
106 (event.GetAction() == MotionEvent::ACTION_UP || 106 (event.GetAction() == MotionEvent::ACTION_UP ||
107 event.GetAction() == MotionEvent::ACTION_CANCEL)) { 107 event.GetAction() == MotionEvent::ACTION_CANCEL)) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 if (detector.InDoubleTapMode()) { 148 if (detector.InDoubleTapMode()) {
149 // Relative changes in the double-tap scale factor computed by |detector| 149 // Relative changes in the double-tap scale factor computed by |detector|
150 // diminish as the touch moves away from the original double-tap focus. 150 // diminish as the touch moves away from the original double-tap focus.
151 // For historical reasons, Chrome has instead adopted a scale factor 151 // For historical reasons, Chrome has instead adopted a scale factor
152 // computation that is invariant to the focal distance, where 152 // computation that is invariant to the focal distance, where
153 // the scale delta remains constant if the touch velocity is constant. 153 // the scale delta remains constant if the touch velocity is constant.
154 float dy = 154 float dy =
155 (detector.GetCurrentSpanY() - detector.GetPreviousSpanY()) * 0.5f; 155 (detector.GetCurrentSpanY() - detector.GetPreviousSpanY()) * 0.5f;
156 scale = std::pow(scale > 1 ? 1.0f + kDoubleTapDragZoomSpeed 156 scale = std::pow(scale > 1 ? 1.0f + kDoubleTapDragZoomSpeed
157 : 1.0f - kDoubleTapDragZoomSpeed, 157 : 1.0f - kDoubleTapDragZoomSpeed,
158 std::abs(dy * px_to_dp_)); 158 std::abs(dy));
159 } 159 }
160 GestureEventDetails pinch_details(ET_GESTURE_PINCH_UPDATE, scale, 0); 160 GestureEventDetails pinch_details(ET_GESTURE_PINCH_UPDATE, scale, 0);
161 provider_->Send(CreateGesture(ET_GESTURE_PINCH_UPDATE, 161 provider_->Send(CreateGesture(ET_GESTURE_PINCH_UPDATE,
162 e.GetId(), 162 e.GetId(),
163 detector.GetEventTime(), 163 detector.GetEventTime(),
164 detector.GetFocusX(), 164 detector.GetFocusX(),
165 detector.GetFocusY(), 165 detector.GetFocusY(),
166 pinch_details)); 166 pinch_details));
167 return true; 167 return true;
168 } 168 }
(...skipping 21 matching lines...) Expand all
190 190
191 private: 191 private:
192 bool InDoubleTapMode() const { 192 bool InDoubleTapMode() const {
193 return scale_gesture_detector_.InDoubleTapMode(); 193 return scale_gesture_detector_.InDoubleTapMode();
194 } 194 }
195 195
196 ScaleGestureDetector scale_gesture_detector_; 196 ScaleGestureDetector scale_gesture_detector_;
197 197
198 GestureProvider* const provider_; 198 GestureProvider* const provider_;
199 199
200 // TODO(jdduke): Remove this when all MotionEvent's use DIPs.
201 const float px_to_dp_;
202
203 // Completely silence multi-touch (pinch) scaling events. Used in WebView when 200 // Completely silence multi-touch (pinch) scaling events. Used in WebView when
204 // zoom support is turned off. 201 // zoom support is turned off.
205 bool ignore_multitouch_events_; 202 bool ignore_multitouch_events_;
206 203
207 // Whether any pinch zoom event has been sent to native. 204 // Whether any pinch zoom event has been sent to native.
208 bool pinch_event_sent_; 205 bool pinch_event_sent_;
209 206
210 DISALLOW_COPY_AND_ASSIGN(ScaleGestureListenerImpl); 207 DISALLOW_COPY_AND_ASSIGN(ScaleGestureListenerImpl);
211 }; 208 };
212 209
213 // GestureProvider::GestureListener 210 // GestureProvider::GestureListener
214 211
215 class GestureProvider::GestureListenerImpl 212 class GestureProvider::GestureListenerImpl
216 : public GestureDetector::GestureListener, 213 : public GestureDetector::GestureListener,
217 public GestureDetector::DoubleTapListener { 214 public GestureDetector::DoubleTapListener {
218 public: 215 public:
219 GestureListenerImpl( 216 GestureListenerImpl(
217 const gfx::Display& display,
220 const GestureDetector::Config& gesture_detector_config, 218 const GestureDetector::Config& gesture_detector_config,
221 const SnapScrollController::Config& snap_scroll_controller_config,
222 bool disable_click_delay, 219 bool disable_click_delay,
223 GestureProvider* provider) 220 GestureProvider* provider)
224 : gesture_detector_(gesture_detector_config, this, this), 221 : gesture_detector_(gesture_detector_config, this, this),
225 snap_scroll_controller_(snap_scroll_controller_config), 222 snap_scroll_controller_(display),
226 provider_(provider), 223 provider_(provider),
227 disable_click_delay_(disable_click_delay), 224 disable_click_delay_(disable_click_delay),
228 scaled_touch_slop_(gesture_detector_config.scaled_touch_slop), 225 touch_slop_(gesture_detector_config.touch_slop),
229 scaled_touch_slop_square_(scaled_touch_slop_ * scaled_touch_slop_),
230 double_tap_timeout_(gesture_detector_config.double_tap_timeout), 226 double_tap_timeout_(gesture_detector_config.double_tap_timeout),
231 ignore_single_tap_(false), 227 ignore_single_tap_(false),
232 seen_first_scroll_event_(false), 228 seen_first_scroll_event_(false) {}
233 last_raw_x_(0),
234 last_raw_y_(0),
235 accumulated_scroll_error_x_(0),
236 accumulated_scroll_error_y_(0) {}
237 229
238 virtual ~GestureListenerImpl() {} 230 virtual ~GestureListenerImpl() {}
239 231
240 bool OnTouchEvent(const MotionEvent& e, 232 bool OnTouchEvent(const MotionEvent& e,
241 bool is_scale_gesture_detection_in_progress) { 233 bool is_scale_gesture_detection_in_progress) {
242 snap_scroll_controller_.SetSnapScrollingMode( 234 snap_scroll_controller_.SetSnapScrollingMode(
243 e, is_scale_gesture_detection_in_progress); 235 e, is_scale_gesture_detection_in_progress);
244 236
245 if (is_scale_gesture_detection_in_progress) 237 if (is_scale_gesture_detection_in_progress)
246 SetIgnoreSingleTap(true); 238 SetIgnoreSingleTap(true);
247 239
248 if (e.GetAction() == MotionEvent::ACTION_DOWN) 240 if (e.GetAction() == MotionEvent::ACTION_DOWN)
249 gesture_detector_.set_is_longpress_enabled(true); 241 gesture_detector_.set_is_longpress_enabled(true);
250 242
251 return gesture_detector_.OnTouchEvent(e); 243 return gesture_detector_.OnTouchEvent(e);
252 } 244 }
253 245
254 // GestureDetector::GestureListener implementation. 246 // GestureDetector::GestureListener implementation.
255 virtual bool OnDown(const MotionEvent& e) OVERRIDE { 247 virtual bool OnDown(const MotionEvent& e) OVERRIDE {
256 current_down_time_ = e.GetEventTime(); 248 current_down_time_ = e.GetEventTime();
257 ignore_single_tap_ = false; 249 ignore_single_tap_ = false;
258 seen_first_scroll_event_ = false; 250 seen_first_scroll_event_ = false;
259 last_raw_x_ = e.GetRawX();
260 last_raw_y_ = e.GetRawY();
261 accumulated_scroll_error_x_ = 0;
262 accumulated_scroll_error_y_ = 0;
263 251
264 GestureEventDetails tap_details(ET_GESTURE_TAP_DOWN, 0, 0); 252 GestureEventDetails tap_details(ET_GESTURE_TAP_DOWN, 0, 0);
265 tap_details.set_bounding_box( 253 tap_details.set_bounding_box(
266 gfx::RectF(e.GetTouchMajor(), e.GetTouchMajor())); 254 gfx::RectF(e.GetTouchMajor(), e.GetTouchMajor()));
267 provider_->Send(CreateGesture(ET_GESTURE_TAP_DOWN, e, tap_details)); 255 provider_->Send(CreateGesture(ET_GESTURE_TAP_DOWN, e, tap_details));
268 256
269 // Return true to indicate that we want to handle touch. 257 // Return true to indicate that we want to handle touch.
270 return true; 258 return true;
271 } 259 }
272 260
273 virtual bool OnScroll(const MotionEvent& e1, 261 virtual bool OnScroll(const MotionEvent& e1,
274 const MotionEvent& e2, 262 const MotionEvent& e2,
275 float raw_distance_x, 263 float raw_distance_x,
276 float raw_distance_y) OVERRIDE { 264 float raw_distance_y) OVERRIDE {
277 float distance_x = raw_distance_x; 265 float distance_x = raw_distance_x;
278 float distance_y = raw_distance_y; 266 float distance_y = raw_distance_y;
279 if (!seen_first_scroll_event_) { 267 if (!seen_first_scroll_event_) {
280 // Remove the touch slop region from the first scroll event to avoid a 268 // Remove the touch slop region from the first scroll event to avoid a
281 // jump. 269 // jump.
282 seen_first_scroll_event_ = true; 270 seen_first_scroll_event_ = true;
283 double distance = 271 double distance =
284 std::sqrt(distance_x * distance_x + distance_y * distance_y); 272 std::sqrt(distance_x * distance_x + distance_y * distance_y);
285 double epsilon = 1e-3; 273 double epsilon = 1e-3;
286 if (distance > epsilon) { 274 if (distance > epsilon) {
287 double ratio = std::max(0., distance - scaled_touch_slop_) / distance; 275 double ratio = std::max(0., distance - touch_slop_) / distance;
288 distance_x *= ratio; 276 distance_x *= ratio;
289 distance_y *= ratio; 277 distance_y *= ratio;
290 } 278 }
291 } 279 }
292 snap_scroll_controller_.UpdateSnapScrollMode(distance_x, distance_y); 280 snap_scroll_controller_.UpdateSnapScrollMode(distance_x, distance_y);
293 if (snap_scroll_controller_.IsSnappingScrolls()) { 281 if (snap_scroll_controller_.IsSnappingScrolls()) {
294 if (snap_scroll_controller_.IsSnapHorizontal()) { 282 if (snap_scroll_controller_.IsSnapHorizontal()) {
295 distance_y = 0; 283 distance_y = 0;
296 } else { 284 } else {
297 distance_x = 0; 285 distance_x = 0;
298 } 286 }
299 } 287 }
300 288
301 last_raw_x_ = e2.GetRawX();
302 last_raw_y_ = e2.GetRawY();
303 if (!provider_->IsScrollInProgress()) { 289 if (!provider_->IsScrollInProgress()) {
304 // Note that scroll start hints are in distance traveled, where 290 // Note that scroll start hints are in distance traveled, where
305 // scroll deltas are in the opposite direction. 291 // scroll deltas are in the opposite direction.
306 GestureEventDetails scroll_details( 292 GestureEventDetails scroll_details(
307 ET_GESTURE_SCROLL_BEGIN, -raw_distance_x, -raw_distance_y); 293 ET_GESTURE_SCROLL_BEGIN, -raw_distance_x, -raw_distance_y);
308 provider_->Send(CreateGesture(ET_GESTURE_SCROLL_BEGIN, 294 provider_->Send(CreateGesture(ET_GESTURE_SCROLL_BEGIN,
309 e2.GetId(), 295 e2.GetId(),
310 e2.GetEventTime(), 296 e2.GetEventTime(),
311 e1.GetX(), 297 e1.GetX(),
312 e1.GetY(), 298 e1.GetY(),
313 scroll_details)); 299 scroll_details));
314 } 300 }
315 301
316 // distance_x and distance_y is the scrolling offset since last OnScroll. 302 if (distance_x || distance_y) {
317 // Because we are passing integers to Blink, this could introduce 303 GestureEventDetails scroll_details(
318 // rounding errors. The rounding errors will accumulate overtime. 304 ET_GESTURE_SCROLL_UPDATE, -distance_x, -distance_y);
319 // To solve this, we should be adding back the rounding errors each time
320 // when we calculate the new offset.
321 // TODO(jdduke): Determine if we can simpy use floating point deltas, as
322 // WebGestureEvent also takes floating point deltas for GestureScrollUpdate.
323 int dx = (int)(distance_x + accumulated_scroll_error_x_);
324 int dy = (int)(distance_y + accumulated_scroll_error_y_);
325 accumulated_scroll_error_x_ += (distance_x - dx);
326 accumulated_scroll_error_y_ += (distance_y - dy);
327
328 if (dx || dy) {
329 GestureEventDetails scroll_details(ET_GESTURE_SCROLL_UPDATE, -dx, -dy);
330 provider_->Send( 305 provider_->Send(
331 CreateGesture(ET_GESTURE_SCROLL_UPDATE, e2, scroll_details)); 306 CreateGesture(ET_GESTURE_SCROLL_UPDATE, e2, scroll_details));
332 } 307 }
333 308
334 return true; 309 return true;
335 } 310 }
336 311
337 virtual bool OnFling(const MotionEvent& e1, 312 virtual bool OnFling(const MotionEvent& e1,
338 const MotionEvent& e2, 313 const MotionEvent& e2,
339 float velocity_x, 314 float velocity_x,
(...skipping 13 matching lines...) Expand all
353 virtual void OnShowPress(const MotionEvent& e) OVERRIDE { 328 virtual void OnShowPress(const MotionEvent& e) OVERRIDE {
354 GestureEventDetails show_press_details(ET_GESTURE_SHOW_PRESS, 0, 0); 329 GestureEventDetails show_press_details(ET_GESTURE_SHOW_PRESS, 0, 0);
355 // TODO(jdduke): Expose minor axis length and rotation in |MotionEvent|. 330 // TODO(jdduke): Expose minor axis length and rotation in |MotionEvent|.
356 show_press_details.set_bounding_box( 331 show_press_details.set_bounding_box(
357 gfx::RectF(e.GetTouchMajor(), e.GetTouchMajor())); 332 gfx::RectF(e.GetTouchMajor(), e.GetTouchMajor()));
358 provider_->Send( 333 provider_->Send(
359 CreateGesture(ET_GESTURE_SHOW_PRESS, e, show_press_details)); 334 CreateGesture(ET_GESTURE_SHOW_PRESS, e, show_press_details));
360 } 335 }
361 336
362 virtual bool OnSingleTapUp(const MotionEvent& e) OVERRIDE { 337 virtual bool OnSingleTapUp(const MotionEvent& e) OVERRIDE {
363 if (IsPointOutsideCurrentSlopRegion(e.GetRawX(), e.GetRawY())) {
364 provider_->SendTapCancelIfNecessary(e);
365 ignore_single_tap_ = true;
366 return true;
367 }
368 // This is a hack to address the issue where user hovers 338 // This is a hack to address the issue where user hovers
369 // over a link for longer than double_tap_timeout_, then 339 // over a link for longer than double_tap_timeout_, then
370 // OnSingleTapConfirmed() is not triggered. But we still 340 // OnSingleTapConfirmed() is not triggered. But we still
371 // want to trigger the tap event at UP. So we override 341 // want to trigger the tap event at UP. So we override
372 // OnSingleTapUp() in this case. This assumes singleTapUp 342 // OnSingleTapUp() in this case. This assumes singleTapUp
373 // gets always called before singleTapConfirmed. 343 // gets always called before singleTapConfirmed.
374 if (!ignore_single_tap_) { 344 if (!ignore_single_tap_) {
375 if (e.GetEventTime() - current_down_time_ > double_tap_timeout_) { 345 if (e.GetEventTime() - current_down_time_ > double_tap_timeout_) {
376 return OnSingleTapConfirmed(e); 346 return OnSingleTapConfirmed(e);
377 } else if (!IsDoubleTapEnabled() || disable_click_delay_) { 347 } else if (!IsDoubleTapEnabled() || disable_click_delay_) {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 } 427 }
458 } 428 }
459 429
460 bool IsClickDelayDisabled() const { return disable_click_delay_; } 430 bool IsClickDelayDisabled() const { return disable_click_delay_; }
461 431
462 bool IsDoubleTapInProgress() const { 432 bool IsDoubleTapInProgress() const {
463 return gesture_detector_.is_double_tapping(); 433 return gesture_detector_.is_double_tapping();
464 } 434 }
465 435
466 private: 436 private:
467 bool IsPointOutsideCurrentSlopRegion(float x, float y) const {
468 return IsDistanceGreaterThanTouchSlop(last_raw_x_ - x, last_raw_y_ - y);
469 }
470
471 bool IsDistanceGreaterThanTouchSlop(float distance_x,
472 float distance_y) const {
473 return distance_x * distance_x + distance_y * distance_y >
474 scaled_touch_slop_square_;
475 }
476
477 void SetIgnoreSingleTap(bool value) { ignore_single_tap_ = value; } 437 void SetIgnoreSingleTap(bool value) { ignore_single_tap_ = value; }
478 438
479 bool IsDoubleTapEnabled() const { 439 bool IsDoubleTapEnabled() const {
480 return gesture_detector_.has_doubletap_listener(); 440 return gesture_detector_.has_doubletap_listener();
481 } 441 }
482 442
483 GestureDetector gesture_detector_; 443 GestureDetector gesture_detector_;
484 SnapScrollController snap_scroll_controller_; 444 SnapScrollController snap_scroll_controller_;
485 445
486 GestureProvider* const provider_; 446 GestureProvider* const provider_;
487 447
488 // Whether the click delay should always be disabled by sending clicks for 448 // Whether the click delay should always be disabled by sending clicks for
489 // double-tap gestures. 449 // double-tap gestures.
490 const bool disable_click_delay_; 450 const bool disable_click_delay_;
491 451
492 const int scaled_touch_slop_; 452 const float touch_slop_;
493
494 // Cache of square of the scaled touch slop so we don't have to calculate it
495 // on every touch.
496 const int scaled_touch_slop_square_;
497 453
498 const base::TimeDelta double_tap_timeout_; 454 const base::TimeDelta double_tap_timeout_;
499 455
500 base::TimeTicks current_down_time_; 456 base::TimeTicks current_down_time_;
501 457
502 // TODO(klobag): This is to avoid a bug in GestureDetector. With multi-touch, 458 // TODO(klobag): This is to avoid a bug in GestureDetector. With multi-touch,
503 // always_in_tap_region_ is not reset. So when the last finger is up, 459 // always_in_tap_region_ is not reset. So when the last finger is up,
504 // OnSingleTapUp() will be mistakenly fired. 460 // OnSingleTapUp() will be mistakenly fired.
505 bool ignore_single_tap_; 461 bool ignore_single_tap_;
506 462
507 // Used to remove the touch slop from the initial scroll event in a scroll 463 // Used to remove the touch slop from the initial scroll event in a scroll
508 // gesture. 464 // gesture.
509 bool seen_first_scroll_event_; 465 bool seen_first_scroll_event_;
510 466
511 // Used to track the last rawX/Y coordinates for moves. This gives absolute
512 // scroll distance.
513 // Useful for full screen tracking.
514 float last_raw_x_;
515 float last_raw_y_;
516
517 // Used to track the accumulated scroll error over time. This is used to
518 // remove the
519 // rounding error we introduced by passing integers to webkit.
520 float accumulated_scroll_error_x_;
521 float accumulated_scroll_error_y_;
522
523 DISALLOW_COPY_AND_ASSIGN(GestureListenerImpl); 467 DISALLOW_COPY_AND_ASSIGN(GestureListenerImpl);
524 }; 468 };
525 469
526 // GestureProvider 470 // GestureProvider
527 471
528 GestureProvider::GestureProvider(const Config& config, 472 GestureProvider::GestureProvider(const Config& config,
529 GestureProviderClient* client) 473 GestureProviderClient* client)
530 : client_(client), 474 : client_(client),
531 needs_show_press_event_(false), 475 needs_show_press_event_(false),
532 needs_tap_ending_event_(false), 476 needs_tap_ending_event_(false),
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 return double_tap_support_for_page_ && double_tap_support_for_platform_; 540 return double_tap_support_for_page_ && double_tap_support_for_platform_;
597 } 541 }
598 542
599 bool GestureProvider::IsClickDelayDisabled() const { 543 bool GestureProvider::IsClickDelayDisabled() const {
600 return gesture_listener_->IsClickDelayDisabled(); 544 return gesture_listener_->IsClickDelayDisabled();
601 } 545 }
602 546
603 void GestureProvider::InitGestureDetectors(const Config& config) { 547 void GestureProvider::InitGestureDetectors(const Config& config) {
604 TRACE_EVENT0("input", "GestureProvider::InitGestureDetectors"); 548 TRACE_EVENT0("input", "GestureProvider::InitGestureDetectors");
605 gesture_listener_.reset( 549 gesture_listener_.reset(
606 new GestureListenerImpl(config.gesture_detector_config, 550 new GestureListenerImpl(config.display,
607 config.snap_scroll_controller_config, 551 config.gesture_detector_config,
608 config.disable_click_delay, 552 config.disable_click_delay,
609 this)); 553 this));
610 554
611 scale_gesture_listener_.reset(new ScaleGestureListenerImpl( 555 scale_gesture_listener_.reset(
612 config.scale_gesture_detector_config, 556 new ScaleGestureListenerImpl(config.scale_gesture_detector_config, this));
613 config.snap_scroll_controller_config.device_scale_factor,
614 this));
615 557
616 UpdateDoubleTapDetectionSupport(); 558 UpdateDoubleTapDetectionSupport();
617 } 559 }
618 560
619 bool GestureProvider::CanHandle(const MotionEvent& event) const { 561 bool GestureProvider::CanHandle(const MotionEvent& event) const {
620 return event.GetAction() == MotionEvent::ACTION_DOWN || current_down_event_; 562 return event.GetAction() == MotionEvent::ACTION_DOWN || current_down_event_;
621 } 563 }
622 564
623 void GestureProvider::Fling(const MotionEvent& event, 565 void GestureProvider::Fling(const MotionEvent& event,
624 float velocity_x, 566 float velocity_x,
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 Send(CreateGesture(ET_GESTURE_END, event)); 756 Send(CreateGesture(ET_GESTURE_END, event));
815 break; 757 break;
816 case MotionEvent::ACTION_DOWN: 758 case MotionEvent::ACTION_DOWN:
817 case MotionEvent::ACTION_POINTER_DOWN: 759 case MotionEvent::ACTION_POINTER_DOWN:
818 case MotionEvent::ACTION_MOVE: 760 case MotionEvent::ACTION_MOVE:
819 break; 761 break;
820 } 762 }
821 } 763 }
822 764
823 } // namespace ui 765 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698