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

Unified Diff: ui/events/gesture_detection/gesture_detector.cc

Issue 2175803002: The helper functions for slop region check and subtraction are modified. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/gesture_detection/gesture_detector.h ('k') | ui/events/gesture_detection/gesture_provider.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/gesture_detection/gesture_detector.cc
diff --git a/ui/events/gesture_detection/gesture_detector.cc b/ui/events/gesture_detection/gesture_detector.cc
index f0c3cb1c4206f0093933de764b52609c603e6489..79e5ffffd1c58df0a9bdb44853e2790bf746d9de 100644
--- a/ui/events/gesture_detection/gesture_detector.cc
+++ b/ui/events/gesture_detection/gesture_detector.cc
@@ -306,8 +306,8 @@ bool GestureDetector::OnTouchEvent(const MotionEvent& ev) {
if (!IsWithinTouchSlop(ev)) {
handled = listener_->OnScroll(
*current_down_event_, ev,
- (ev.GetPointerCount() > 1 ? *secondary_pointer_down_event_
- : ev),
+ (maximum_pointer_count_ > 1 ? *secondary_pointer_down_event_
+ : ev),
scroll_x, scroll_y);
last_focus_x_ = focus_x;
last_focus_y_ = focus_y;
@@ -324,7 +324,8 @@ bool GestureDetector::OnTouchEvent(const MotionEvent& ev) {
std::abs(scroll_y) > kScrollEpsilon) {
handled = listener_->OnScroll(
*current_down_event_, ev,
- (ev.GetPointerCount() > 1 ? *secondary_pointer_down_event_ : ev),
+ (maximum_pointer_count_ > 1 ? *secondary_pointer_down_event_
+ : ev),
scroll_x, scroll_y);
last_focus_x_ = focus_x;
last_focus_y_ = focus_y;
@@ -538,26 +539,30 @@ bool GestureDetector::HandleSwipeIfNeeded(const MotionEvent& up,
}
bool GestureDetector::IsWithinTouchSlop(const MotionEvent& ev) {
- // If there are more than two down pointers, tapping is not possible.
- // Slop region check is not needed.
- if (ev.GetPointerCount() > 2)
+ // If there have been more than two down pointers in the touch sequence,
+ // tapping is not possible. Slop region check is not needed.
+ if (maximum_pointer_count_ > 2)
return false;
- const int id0 = current_down_event_->GetPointerId(0);
- const int ev_idx0 = ev.GetPointerId(0) == id0 ? 0 : 1;
+ for (size_t i = 0; i < ev.GetPointerCount(); i++) {
+ const int pointer_id = ev.GetPointerId(i);
+ const MotionEvent* source_pointer_down_event = GetSourcePointerDownEvent(
+ *current_down_event_,
+ maximum_pointer_count_ > 1 ? *secondary_pointer_down_event_
+ : *current_down_event_,
+ pointer_id);
+ DCHECK(source_pointer_down_event);
+ if (!source_pointer_down_event)
+ return false;
- // Check if the primary pointer exceeded the slop region.
- float dx = current_down_event_->GetX() - ev.GetX(ev_idx0);
- float dy = current_down_event_->GetY() - ev.GetY(ev_idx0);
- if (dx * dx + dy * dy > touch_slop_square_)
- return false;
+ int source_index =
+ source_pointer_down_event->FindPointerIndexOfId(pointer_id);
+ DCHECK_GE(source_index, 0);
+ if (source_index < 0)
+ return false;
- if (ev.GetPointerCount() == 2) {
- // Check if the secondary pointer exceeded the slop region.
- const int ev_idx1 = ev_idx0 == 0 ? 1 : 0;
- const int idx1 = secondary_pointer_down_event_->GetActionIndex();
- dx = secondary_pointer_down_event_->GetX(idx1) - ev.GetX(ev_idx1);
- dy = secondary_pointer_down_event_->GetY(idx1) - ev.GetY(ev_idx1);
+ float dx = source_pointer_down_event->GetX(source_index) - ev.GetX(i);
+ float dy = source_pointer_down_event->GetY(source_index) - ev.GetY(i);
if (dx * dx + dy * dy > touch_slop_square_)
return false;
}
@@ -565,4 +570,20 @@ bool GestureDetector::IsWithinTouchSlop(const MotionEvent& ev) {
return true;
}
+const MotionEvent* GestureDetector::GetSourcePointerDownEvent(
+ const MotionEvent& current_down_event,
+ const MotionEvent& secondary_pointer_down_event,
+ const int pointer_id) {
+ if (current_down_event.GetPointerId(0) == pointer_id)
+ return &current_down_event;
+
+ for (size_t i = 0; i < secondary_pointer_down_event.GetPointerCount(); i++) {
+ if (secondary_pointer_down_event.GetPointerId(i) == pointer_id)
+ return &secondary_pointer_down_event;
+ }
+
+ NOTREACHED();
+ return nullptr;
+}
+
} // namespace ui
« no previous file with comments | « ui/events/gesture_detection/gesture_detector.h ('k') | ui/events/gesture_detection/gesture_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698