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

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
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..a6920d308f8e6a118cec45abc0e4423b9d53b6bc 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,23 @@ 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;
-
- // 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;
-
- 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);
+ for (size_t i = 0; i < ev.GetPointerCount(); i++) {
+ const int pid = ev.GetPointerId(i);
tdresser 2016/07/22 15:57:45 Throughout, let's use pointer_id instead of pid, f
sahel 2016/07/22 19:46:42 Done.
+ const MotionEvent* source_pointer_down_event = GetSourcePointerDownEvent(
+ *current_down_event_,
+ maximum_pointer_count_ > 1 ? *secondary_pointer_down_event_
+ : *current_down_event_,
+ pid);
+ DCHECK(source_pointer_down_event);
tdresser 2016/07/22 15:57:45 Return if source_pointer_down_event is nullptr.
sahel 2016/07/22 19:46:42 Done.
+ int source_index = getPointerIndex(*source_pointer_down_event, pid);
+ DCHECK_GE(source_index, 0);
+ float dx = source_pointer_down_event->GetX(source_index) - ev.GetX(i);
tdresser 2016/07/22 15:57:45 What happens if source_index is 0? Should we retur
sahel 2016/07/22 19:46:42 I changed the code, an early return will happen if
+ float dy = source_pointer_down_event->GetY(source_index) - ev.GetY(i);
if (dx * dx + dy * dy > touch_slop_square_)
return false;
}
@@ -565,4 +563,27 @@ 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 pid) {
+ if (current_down_event.GetPointerId(0) == pid)
+ return &current_down_event;
+
+ for (size_t i = 0; i < secondary_pointer_down_event.GetPointerCount(); i++) {
+ if (secondary_pointer_down_event.GetPointerId(i) == pid)
+ return &secondary_pointer_down_event;
+ }
+
+ return NULL;
tdresser 2016/07/22 15:57:45 Should this ever happen? If not, maybe we should h
sahel 2016/07/22 19:46:42 Done.
+}
+
+int GestureDetector::getPointerIndex(const MotionEvent& event, const int pid) {
+ for (size_t i = 0; i < event.GetPointerCount(); i++) {
+ if (event.GetPointerId(i) == pid)
+ return i;
+ }
+ return -1;
tdresser 2016/07/22 15:57:45 Should this case ever happen? Should we have a DCH
sahel 2016/07/22 19:46:42 Done.
+}
+
} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698