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

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

Issue 2058723003: Slop region check for multi-finger scroll (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <cmath> 9 #include <cmath>
10 10
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 current_down_time_ = event.GetEventTime(); 111 current_down_time_ = event.GetEventTime();
112 current_longpress_time_ = base::TimeTicks(); 112 current_longpress_time_ = base::TimeTicks();
113 ignore_single_tap_ = false; 113 ignore_single_tap_ = false;
114 scroll_event_sent_ = false; 114 scroll_event_sent_ = false;
115 pinch_event_sent_ = false; 115 pinch_event_sent_ = false;
116 show_press_event_sent_ = false; 116 show_press_event_sent_ = false;
117 gesture_detector_.set_longpress_enabled(true); 117 gesture_detector_.set_longpress_enabled(true);
118 tap_down_point_ = gfx::PointF(event.GetX(), event.GetY()); 118 tap_down_point_ = gfx::PointF(event.GetX(), event.GetY());
119 max_diameter_before_show_press_ = event.GetTouchMajor(); 119 max_diameter_before_show_press_ = event.GetTouchMajor();
120 } 120 }
121
122 gesture_detector_.OnTouchEvent(event); 121 gesture_detector_.OnTouchEvent(event);
123 scale_gesture_detector_.OnTouchEvent(event); 122 scale_gesture_detector_.OnTouchEvent(event);
124 123
125 if (action == MotionEvent::ACTION_UP || 124 if (action == MotionEvent::ACTION_UP ||
126 action == MotionEvent::ACTION_CANCEL) { 125 action == MotionEvent::ACTION_CANCEL) {
127 // Note: This call will have no effect if a fling was just generated, as 126 // Note: This call will have no effect if a fling was just generated, as
128 // |Fling()| will have already signalled an end to touch-scrolling. 127 // |Fling()| will have already signalled an end to touch-scrolling.
129 if (scroll_event_sent_) 128 if (scroll_event_sent_)
130 Send(CreateGesture(ET_GESTURE_SCROLL_END, event)); 129 Send(CreateGesture(ET_GESTURE_SCROLL_END, event));
131 current_down_time_ = base::TimeTicks(); 130 current_down_time_ = base::TimeTicks();
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 // Return true to indicate that we want to handle touch. 280 // Return true to indicate that we want to handle touch.
282 return true; 281 return true;
283 } 282 }
284 283
285 bool OnScroll(const MotionEvent& e1, 284 bool OnScroll(const MotionEvent& e1,
286 const MotionEvent& e2, 285 const MotionEvent& e2,
287 float raw_distance_x, 286 float raw_distance_x,
288 float raw_distance_y) override { 287 float raw_distance_y) override {
289 float distance_x = raw_distance_x; 288 float distance_x = raw_distance_x;
290 float distance_y = raw_distance_y; 289 float distance_y = raw_distance_y;
291 if (!scroll_event_sent_ && e2.GetPointerCount() == 1) { 290 if (!scroll_event_sent_ && e2.GetPointerCount() < 3) {
292 // Remove the touch slop region from the first scroll event to 291 // Remove the touch slop region from the first scroll event to avoid a
293 // avoid a jump. Touch slop isn't used for multi-finger 292 // jump. Touch slop isn't used for scroll gestures with greater than 2
294 // gestures, so in those cases we don't subtract the slop. 293 // pointers down, in those cases we don't subtract the slop.
295 float distance = 294 float distance =
296 std::sqrt(distance_x * distance_x + distance_y * distance_y); 295 std::sqrt(distance_x * distance_x + distance_y * distance_y);
297 float epsilon = 1e-3f; 296 float epsilon = 1e-3f;
298 if (distance > epsilon) { 297 if (distance > epsilon) {
299 float ratio = 298 float subtraction_value = config_.gesture_detector_config.touch_slop /
300 std::max(0.f, 299 e2.GetPointerCount();
301 distance - config_.gesture_detector_config.touch_slop) / 300 float ratio = std::max(0.f, distance - subtraction_value ) / distance;
tdresser 2016/06/10 19:34:57 Is this logic correct? If the two pointers move in
sahel 2016/06/23 22:34:44 Done.
302 distance;
303 distance_x *= ratio; 301 distance_x *= ratio;
304 distance_y *= ratio; 302 distance_y *= ratio;
305 } 303 }
306 } 304 }
307 305
308 snap_scroll_controller_.UpdateSnapScrollMode(distance_x, distance_y); 306 snap_scroll_controller_.UpdateSnapScrollMode(distance_x, distance_y);
309 if (snap_scroll_controller_.IsSnappingScrolls()) { 307 if (snap_scroll_controller_.IsSnappingScrolls()) {
310 if (snap_scroll_controller_.IsSnapHorizontal()) 308 if (snap_scroll_controller_.IsSnapHorizontal())
311 distance_y = 0; 309 distance_y = 0;
312 else 310 else
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 // null'ing of the listener until the sequence has ended. 836 // null'ing of the listener until the sequence has ended.
839 if (current_down_event_) 837 if (current_down_event_)
840 return; 838 return;
841 839
842 const bool double_tap_enabled = 840 const bool double_tap_enabled =
843 double_tap_support_for_page_ && double_tap_support_for_platform_; 841 double_tap_support_for_page_ && double_tap_support_for_platform_;
844 gesture_listener_->SetDoubleTapEnabled(double_tap_enabled); 842 gesture_listener_->SetDoubleTapEnabled(double_tap_enabled);
845 } 843 }
846 844
847 } // namespace ui 845 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698