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

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: Fix compile 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 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);
}

Powered by Google App Engine
This is Rietveld 408576698