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 fdc524bef2cf8e861fde0022dcf604db9fbf354f..f3b3bed5ad8369b9738a177a773c8ad3de98ef2c 100644 |
--- a/ui/events/gesture_detection/gesture_detector.cc |
+++ b/ui/events/gesture_detection/gesture_detector.cc |
@@ -64,7 +64,7 @@ void GestureDetector::SimpleGestureListener::OnShowPress(const MotionEvent& e) { |
} |
bool GestureDetector::SimpleGestureListener::OnSingleTapUp( |
- const MotionEvent& e) { |
+ const MotionEvent& e, int tap_count) { |
jdduke (slow)
2014/05/21 15:07:14
Maybe tap_repeat_count? Hmm, but that's slightly a
tdresser
2014/05/21 16:39:15
We use tap_count throughout (GestureEventDetails,
|
return false; |
} |
@@ -100,7 +100,7 @@ bool GestureDetector::SimpleGestureListener::OnTwoFingerTap( |
} |
bool GestureDetector::SimpleGestureListener::OnSingleTapConfirmed( |
- const MotionEvent& e) { |
+ const MotionEvent& e, int tap_count) { |
return false; |
} |
@@ -187,9 +187,10 @@ GestureDetector::GestureDetector( |
last_focus_y_(0), |
down_focus_x_(0), |
down_focus_y_(0), |
- longpress_enabled_(true), |
- swipe_enabled_(false), |
- two_finger_tap_enabled_(false) { |
+ longpress_enabled_(true), |
+ swipe_enabled_(false), |
+ two_finger_tap_enabled_(false), |
+ tap_count_(0) { |
DCHECK(listener_); |
Init(config); |
} |
@@ -327,6 +328,7 @@ bool GestureDetector::OnTouchEvent(const MotionEvent& ev) { |
down_focus_x_ = last_focus_x_ = focus_x; |
down_focus_y_ = last_focus_y_ = focus_y; |
+ previous_down_event_ = current_down_event_.Pass(); |
current_down_event_ = ev.Clone(); |
secondary_pointer_down_event_.reset(); |
@@ -416,9 +418,27 @@ bool GestureDetector::OnTouchEvent(const MotionEvent& ev) { |
timeout_handler_->StopTimeout(TAP); |
in_longpress_ = false; |
} else if (always_in_tap_region_) { |
- handled = listener_->OnSingleTapUp(ev); |
+ if (double_tap_listener_) { |
+ tap_count_ = 1; |
+ } else { |
+ if (previous_down_event_ && previous_up_event_ && |
+ current_down_event_ && |
+ IsConsideredDoubleTap(*previous_down_event_, |
+ *previous_up_event_, |
+ *current_down_event_)) { |
+ ++tap_count_; |
+ // We only support up to triple tap. Further taps are also treated |
+ // as triple taps. |
+ tap_count_ = std::min(tap_count_, 3); |
jdduke (slow)
2014/05/21 15:07:14
I'd prefer the GestureDetector not have any awaren
tdresser
2014/05/21 16:39:15
Done.
|
+ } else { |
+ // As we're outside of the double tap range, reset the |
+ // |tap_count_|. |
+ tap_count_ = 1; |
+ } |
+ } |
+ handled = listener_->OnSingleTapUp(ev, tap_count_); |
if (defer_confirm_single_tap_ && double_tap_listener_ != NULL) { |
- double_tap_listener_->OnSingleTapConfirmed(ev); |
+ double_tap_listener_->OnSingleTapConfirmed(ev, 1); |
jdduke (slow)
2014/05/21 15:07:14
Might as well just use |tap_count_| here instead o
tdresser
2014/05/21 16:39:15
Done.
|
} |
} else { |
@@ -513,7 +533,7 @@ void GestureDetector::OnTapTimeout() { |
if (!double_tap_listener_) |
return; |
if (!still_down_) |
- double_tap_listener_->OnSingleTapConfirmed(*current_down_event_); |
+ double_tap_listener_->OnSingleTapConfirmed(*current_down_event_, 1); |
else |
defer_confirm_single_tap_ = true; |
} |