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

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: Threshold at zoom level one 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 549f48a0de41929505e9911eb9d8626a3f36283e..1d801b4aaffbf10d96db2f0bd6c19fd39aaf9c2d 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -553,6 +553,7 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget,
can_compose_inline_(true),
browser_compositor_state_(BrowserCompositorDestroyed),
browser_compositor_placeholder_(new BrowserCompositorMacPlaceholder),
+ page_is_at_scale_one_(true),
is_loading_(false),
allow_pause_for_resize_or_repaint_(true),
is_guest_view_hack_(is_guest_view_hack),
@@ -1467,6 +1468,9 @@ void RenderWidgetHostViewMac::OnSwapCompositorFrame(
TRACE_EVENT0("browser", "RenderWidgetHostViewMac::OnSwapCompositorFrame");
last_scroll_offset_ = frame->metadata.root_scroll_offset;
+
+ page_is_at_scale_one_ = (frame->metadata.page_scale_factor == 1);
aelias_OOO_until_Jul13 2015/05/11 18:32:32 Please check for "== min_page_scale_factor" instea
ccameron 2015/05/11 19:21:43 If we end up doing the rubber-band bounce for pinc
aelias_OOO_until_Jul13 2015/05/11 21:22:34 If we do, I would probably favor storing the "over
+
if (frame->delegated_frame_data) {
float scale_factor = frame->metadata.device_scale_factor;
@@ -1751,7 +1755,7 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
canBeKeyView_ = YES;
opaque_ = YES;
focusedPluginIdentifier_ = -1;
- lastUsedPinchEventTimestamp_ = 0;
+ pinchHasReachedZoomThreshold_ = false;
// OpenGL support:
if ([self respondsToSelector:
@@ -2283,7 +2287,13 @@ 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/11 18:32:32 This comment is out of date.
ccameron 2015/05/11 19:21:43 Done.
+ // the zoom threshold levels.
+ if (renderWidgetHostView_->page_is_at_scale_one_) {
+ pinchHasReachedZoomThreshold_ = false;
+ pinchUnusedAmount_ = 1;
+ }
}
- (void)endGestureWithEvent:(NSEvent*)event {
@@ -2298,7 +2308,6 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
endEvent.type = WebInputEvent::GesturePinchEnd;
renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(endEvent);
gestureBeginPinchSent_ = NO;
- lastUsedPinchEventTimestamp_ = [event timestamp];
}
}
@@ -2411,22 +2420,14 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
if (!gestureBeginEvent_)
return;
+ if (!pinchHasReachedZoomThreshold_) {
+ pinchUnusedAmount_ *= (1 + [event magnification]);
+ if (pinchUnusedAmount_ < 0.667 || pinchUnusedAmount_ > 1.5)
+ 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);
@@ -2434,8 +2435,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