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

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

Issue 1358263002: [Android] Support double-tap selection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix contextual search Created 5 years, 3 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_provider.cc
diff --git a/ui/events/gesture_detection/gesture_provider.cc b/ui/events/gesture_detection/gesture_provider.cc
index ca66e788ac83bb1ffb967e84f9bae18daaa43c23..019c1194b631431fe6aad293988aa9683c332a4e 100644
--- a/ui/events/gesture_detection/gesture_provider.cc
+++ b/ui/events/gesture_detection/gesture_provider.cc
@@ -404,7 +404,7 @@ class GestureProvider::GestureListenerImpl : public ScaleGestureListener,
Send(CreateGesture(show_press_details, e));
}
- bool OnSingleTapUp(const MotionEvent& e) override {
+ bool OnSingleTapUp(const MotionEvent& e, int tap_count) override {
// This is a hack to address the issue where user hovers
// over a link for longer than double_tap_timeout_, then
// OnSingleTapConfirmed() is not triggered. But we still
@@ -414,15 +414,15 @@ class GestureProvider::GestureListenerImpl : public ScaleGestureListener,
if (!ignore_single_tap_) {
if (e.GetEventTime() - current_down_time_ >
config_.gesture_detector_config.double_tap_timeout) {
- return OnSingleTapConfirmed(e);
+ return OnSingleTapImpl(e, tap_count);
} else if (!IsDoubleTapEnabled()) {
// If double-tap has been disabled, there is no need to wait
// for the double-tap timeout.
- return OnSingleTapConfirmed(e);
+ return OnSingleTapImpl(e, tap_count);
} else {
// Notify Blink about this tapUp event anyway, when none of the above
// conditions applied.
- Send(CreateTapGesture(ET_GESTURE_TAP_UNCONFIRMED, e));
+ Send(CreateTapGesture(ET_GESTURE_TAP_UNCONFIRMED, e, 1));
}
}
@@ -439,17 +439,7 @@ class GestureProvider::GestureListenerImpl : public ScaleGestureListener,
// DoubleTapListener implementation.
bool OnSingleTapConfirmed(const MotionEvent& e) override {
- // Long taps in the edges of the screen have their events delayed by
- // ContentViewHolder for tab swipe operations. As a consequence of the delay
- // this method might be called after receiving the up event.
- // These corner cases should be ignored.
- if (ignore_single_tap_)
- return true;
-
- ignore_single_tap_ = true;
-
- Send(CreateTapGesture(ET_GESTURE_TAP, e));
- return true;
+ return OnSingleTapImpl(e, 1);
}
bool OnDoubleTap(const MotionEvent& e) override {
@@ -464,7 +454,7 @@ class GestureProvider::GestureListenerImpl : public ScaleGestureListener,
case MotionEvent::ACTION_UP:
if (!IsPinchInProgress() && !IsScrollInProgress()) {
- Send(CreateTapGesture(ET_GESTURE_DOUBLE_TAP, e));
+ Send(CreateTapGesture(ET_GESTURE_DOUBLE_TAP, e, 1));
return true;
}
break;
@@ -492,7 +482,7 @@ class GestureProvider::GestureListenerImpl : public ScaleGestureListener,
float raw_y,
size_t touch_point_count,
const gfx::RectF& bounding_box,
- int flags) {
+ int flags) const {
return GestureEventData(details,
motion_event_id,
primary_tool_type,
@@ -516,7 +506,7 @@ class GestureProvider::GestureListenerImpl : public ScaleGestureListener,
float raw_y,
size_t touch_point_count,
const gfx::RectF& bounding_box,
- int flags) {
+ int flags) const {
return GestureEventData(GestureEventDetails(type),
motion_event_id,
primary_tool_type,
@@ -531,7 +521,7 @@ class GestureProvider::GestureListenerImpl : public ScaleGestureListener,
}
GestureEventData CreateGesture(const GestureEventDetails& details,
- const MotionEvent& event) {
+ const MotionEvent& event) const {
return GestureEventData(details,
event.GetPointerId(),
event.GetToolType(),
@@ -545,20 +535,21 @@ class GestureProvider::GestureListenerImpl : public ScaleGestureListener,
event.GetFlags());
}
- GestureEventData CreateGesture(EventType type, const MotionEvent& event) {
+ GestureEventData CreateGesture(EventType type,
+ const MotionEvent& event) const {
return CreateGesture(GestureEventDetails(type), event);
}
- GestureEventData CreateTapGesture(EventType type, const MotionEvent& event) {
- // Set the tap count to 1 even for ET_GESTURE_DOUBLE_TAP, in order to be
- // consistent with double tap behavior on a mobile viewport. See
- // crbug.com/234986 for context.
+ GestureEventData CreateTapGesture(EventType type,
+ const MotionEvent& event,
+ int tap_count) const {
+ DCHECK_GE(tap_count, 0);
GestureEventDetails details(type);
- details.set_tap_count(1);
+ details.set_tap_count(tap_count);
return CreateGesture(details, event);
}
- gfx::RectF GetBoundingBox(const MotionEvent& event, EventType type) {
+ gfx::RectF GetBoundingBox(const MotionEvent& event, EventType type) const {
// Can't use gfx::RectF::Union, as it ignores touches with a radius of 0.
float left = std::numeric_limits<float>::max();
float top = std::numeric_limits<float>::max();
@@ -613,6 +604,20 @@ class GestureProvider::GestureListenerImpl : public ScaleGestureListener,
bool IsPinchInProgress() const { return pinch_event_sent_; }
private:
+ bool OnSingleTapImpl(const MotionEvent& e, int tap_count) {
+ // Long taps in the edges of the screen have their events delayed by
+ // ContentViewHolder for tab swipe operations. As a consequence of the delay
+ // this method might be called after receiving the up event.
+ // These corner cases should be ignored.
+ if (ignore_single_tap_)
+ return true;
+
+ ignore_single_tap_ = true;
+
+ Send(CreateTapGesture(ET_GESTURE_TAP, e, tap_count));
+ return true;
+ }
+
bool IsScaleGestureDetectionInProgress() const {
return scale_gesture_detector_.IsInProgress();
}
« no previous file with comments | « ui/events/gesture_detection/gesture_listeners.cc ('k') | ui/events/gesture_detection/gesture_provider_config_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698