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); |
} |