Chromium Code Reviews| 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); |
| } |