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

Unified Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 1129693002: Make Mac pinch thresholding apply only to zoom (Chromium side) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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: content/browser/renderer_host/render_widget_host_view_mac.mm
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 22707f03bb721077c3e1e9261eaefbff4b6743a0..30aaf1c45c601a2d03c031692f34f65483dad9ac 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -1756,7 +1756,8 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
canBeKeyView_ = YES;
opaque_ = YES;
focusedPluginIdentifier_ = -1;
- lastUsedPinchEventTimestamp_ = 0;
+ pinchLastGestureTimestamp_ = 0;
+ pinchHasReachedZoomThreshold_ = false;
// OpenGL support:
if ([self respondsToSelector:
@@ -2288,7 +2289,15 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
[responderDelegate_ beginGestureWithEvent:event];
gestureBeginEvent_.reset(
new WebGestureEvent(WebInputEventFactory::gestureEvent(event, self)));
- unusedPinchAmount_ = 0;
+
+ // If more than 1 second has passed since the last pinch gesture ended, reset
aelias_OOO_until_Jul13 2015/05/06 23:20:24 I don't like timeouts as a rule. Why not reset th
ccameron 2015/05/07 17:09:05 If someone is doing several pinches in a row, to z
aelias_OOO_until_Jul13 2015/05/07 18:16:16 I see. How about checking if page_scale_factor ==
+ // the zoom threshold levels.
+ const NSTimeInterval kSecondsUntilZoomThresholdReEnabled = 1;
+ if ([event timestamp] - pinchLastGestureTimestamp_ >
+ kSecondsUntilZoomThresholdReEnabled) {
+ pinchHasReachedZoomThreshold_ = false;
+ pinchUnusedAmount_ = 0;
+ }
}
- (void)endGestureWithEvent:(NSEvent*)event {
@@ -2303,7 +2312,8 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
endEvent.type = WebInputEvent::GesturePinchEnd;
renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(endEvent);
gestureBeginPinchSent_ = NO;
- lastUsedPinchEventTimestamp_ = [event timestamp];
+ if (pinchHasReachedZoomThreshold_)
+ pinchLastGestureTimestamp_ = [event timestamp];
}
}
@@ -2416,22 +2426,14 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
if (!gestureBeginEvent_)
return;
+ if (!pinchHasReachedZoomThreshold_) {
+ pinchUnusedAmount_ += [event magnification];
aelias_OOO_until_Jul13 2015/05/06 23:20:24 Please make this multiplicative. Otherwise this w
ccameron 2015/05/07 17:09:06 Done. I had made it additive to match the earlier
+ if (pinchUnusedAmount_ < -0.4 || pinchUnusedAmount_ > 0.4)
+ pinchHasReachedZoomThreshold_ = true;
+ }
+
// Send a GesturePinchBegin event if none has been sent yet.
if (!gestureBeginPinchSent_) {
- // If less than 1 second has passed since an intentional pinch zoom
- // was done, don't threshold zooms, because subsequent zooms are likely
- // intentional.
- const NSTimeInterval kSecondsUntilZoomThresholdReEnabled = 1;
- if ([event timestamp] - lastUsedPinchEventTimestamp_ >
- kSecondsUntilZoomThresholdReEnabled) {
- // Require that a 40% zoom be hit before actually zooming the page,
- // to avoid accidental zooms.
- // http://crbug.com/478981
- unusedPinchAmount_ += [event magnification];
- if (unusedPinchAmount_ > -0.4 && unusedPinchAmount_ < 0.4)
- return;
- }
-
WebGestureEvent beginEvent(*gestureBeginEvent_);
beginEvent.type = WebInputEvent::GesturePinchBegin;
renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(beginEvent);
@@ -2439,8 +2441,9 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
}
// Send a GesturePinchUpdate event.
- const WebGestureEvent& updateEvent =
+ WebGestureEvent updateEvent =
WebInputEventFactory::gestureEvent(event, self);
+ updateEvent.data.pinchUpdate.zoomDisabled = !pinchHasReachedZoomThreshold_;
renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(updateEvent);
}

Powered by Google App Engine
This is Rietveld 408576698