| 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 ccb1ecfe7b477cbb8c26063724def0a10130e70c..984c66b645157d1f5e44367010e804ef9cd2c248 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_at_minimum_scale_(true),
|
| is_loading_(false),
|
| allow_pause_for_resize_or_repaint_(true),
|
| is_guest_view_hack_(is_guest_view_hack),
|
| @@ -1470,6 +1471,10 @@ void RenderWidgetHostViewMac::OnSwapCompositorFrame(
|
| TRACE_EVENT0("browser", "RenderWidgetHostViewMac::OnSwapCompositorFrame");
|
|
|
| last_scroll_offset_ = frame->metadata.root_scroll_offset;
|
| +
|
| + page_at_minimum_scale_ = frame->metadata.page_scale_factor ==
|
| + frame->metadata.min_page_scale_factor;
|
| +
|
| if (frame->delegated_frame_data) {
|
| float scale_factor = frame->metadata.device_scale_factor;
|
|
|
| @@ -1750,7 +1755,7 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
|
| canBeKeyView_ = YES;
|
| opaque_ = YES;
|
| focusedPluginIdentifier_ = -1;
|
| - lastUsedPinchEventTimestamp_ = 0;
|
| + pinchHasReachedZoomThreshold_ = false;
|
|
|
| // OpenGL support:
|
| if ([self respondsToSelector:
|
| @@ -2282,7 +2287,13 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
|
| [responderDelegate_ beginGestureWithEvent:event];
|
| gestureBeginEvent_.reset(
|
| new WebGestureEvent(WebInputEventFactory::gestureEvent(event, self)));
|
| - unusedPinchAmount_ = 0;
|
| +
|
| + // If the page is at the minimum zoom level, require a threshold be reached
|
| + // before the pinch has an effect.
|
| + if (renderWidgetHostView_->page_at_minimum_scale_) {
|
| + pinchHasReachedZoomThreshold_ = false;
|
| + pinchUnusedAmount_ = 1;
|
| + }
|
| }
|
|
|
| - (void)endGestureWithEvent:(NSEvent*)event {
|
| @@ -2297,7 +2308,6 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
|
| endEvent.type = WebInputEvent::GesturePinchEnd;
|
| renderWidgetHostView_->render_widget_host_->ForwardGestureEvent(endEvent);
|
| gestureBeginPinchSent_ = NO;
|
| - lastUsedPinchEventTimestamp_ = [event timestamp];
|
| }
|
| }
|
|
|
| @@ -2410,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);
|
| @@ -2433,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);
|
| }
|
|
|
|
|