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

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

Issue 340343013: Provide max gesture bounds and option to ignore touch size during pinch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review Created 6 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 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 ca68e3cf917d10775cc4fc1fffa3f1c7969b8422..8271b53a603ad5bf1841119a4f625306dcf8c9b0 100644
--- a/ui/events/gesture_detection/gesture_provider.cc
+++ b/ui/events/gesture_detection/gesture_provider.cc
@@ -107,6 +107,24 @@ GestureEventDetails CreateTapGestureDetails(EventType type) {
return tap_details;
}
+gfx::RectF ClampBoundingBox(const gfx::RectF& bounds,
+ float min_length,
+ float max_length) {
+ float width = bounds.width();
+ float height = bounds.height();
+ if (min_length) {
+ width = std::max(min_length, width);
+ height = std::max(min_length, height);
+ }
+ if (max_length) {
+ width = std::min(max_length, width);
+ height = std::min(max_length, height);
+ }
+ const gfx::PointF center = bounds.CenterPoint();
+ return gfx::RectF(
+ center.x() - width / 2.f, center.y() - height / 2.f, width, height);
+}
+
} // namespace
// GestureProvider:::Config
@@ -115,7 +133,8 @@ GestureProvider::Config::Config()
: display(gfx::Display::kInvalidDisplayID, gfx::Rect(1, 1)),
disable_click_delay(false),
gesture_begin_end_types_enabled(false),
- min_gesture_bounds_length(0) {}
+ min_gesture_bounds_length(0),
+ max_gesture_bounds_length(0) {}
GestureProvider::Config::~Config() {}
@@ -550,8 +569,11 @@ GestureProvider::GestureProvider(const Config& config,
double_tap_support_for_page_(true),
double_tap_support_for_platform_(true),
gesture_begin_end_types_enabled_(config.gesture_begin_end_types_enabled),
- min_gesture_bounds_length_(config.min_gesture_bounds_length) {
+ min_gesture_bounds_length_(config.min_gesture_bounds_length),
+ max_gesture_bounds_length_(config.max_gesture_bounds_length) {
DCHECK(client);
+ DCHECK(!min_gesture_bounds_length_ || !max_gesture_bounds_length_ ||
+ min_gesture_bounds_length_ <= max_gesture_bounds_length_);
InitGestureDetectors(config);
}
@@ -659,12 +681,10 @@ void GestureProvider::Send(GestureEventData gesture) {
// TODO(jdduke): Provide a way of skipping this clamping for stylus and/or
// mouse-based input, perhaps by exposing the source type on MotionEvent.
- const gfx::RectF& gesture_bounds = gesture.details.bounding_box_f();
- gesture.details.set_bounding_box(gfx::RectF(
- gesture_bounds.x(),
- gesture_bounds.y(),
- std::max(min_gesture_bounds_length_, gesture_bounds.width()),
- std::max(min_gesture_bounds_length_, gesture_bounds.height())));
+ gesture.details.set_bounding_box(
+ ClampBoundingBox(gesture.details.bounding_box_f(),
+ min_gesture_bounds_length_,
+ max_gesture_bounds_length_));
switch (gesture.type()) {
case ET_GESTURE_LONG_PRESS:
« no previous file with comments | « ui/events/gesture_detection/gesture_provider.h ('k') | ui/events/gesture_detection/gesture_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698