| Index: Source/web/WebViewImpl.cpp
|
| diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp
|
| index c9ca40a569f60048688a9fd98dd7e5f6944bcb0d..98b91e32b3178fba30e4268cf835564db8a63901 100644
|
| --- a/Source/web/WebViewImpl.cpp
|
| +++ b/Source/web/WebViewImpl.cpp
|
| @@ -2967,7 +2967,10 @@ IntPoint WebViewImpl::clampOffsetAtScale(const IntPoint& offset, float scale)
|
| if (!view)
|
| return offset;
|
|
|
| - return view->clampOffsetAtScale(offset, scale);
|
| + if (!pinchVirtualViewportEnabled())
|
| + return view->clampOffsetAtScale(offset, scale);
|
| +
|
| + return page()->frameHost().pinchViewport().clampDocumentOffsetAtScale(offset, scale);
|
| }
|
|
|
| bool WebViewImpl::pinchVirtualViewportEnabled() const
|
| @@ -3026,6 +3029,17 @@ void WebViewImpl::scrollAndRescaleViewports(float scaleFactor,
|
| page()->frameHost().pinchViewport().setLocation(pinchViewportOrigin);
|
| }
|
|
|
| +void WebViewImpl::setPageScaleFactorAndLocation(float scaleFactor, const FloatPoint& location)
|
| +{
|
| + ASSERT(pinchVirtualViewportEnabled());
|
| + ASSERT(page());
|
| +
|
| + page()->frameHost().pinchViewport().setScaleAndLocation(
|
| + clampPageScaleFactorToLimits(scaleFactor),
|
| + location);
|
| + deviceOrPageScaleFactorChanged();
|
| +}
|
| +
|
| void WebViewImpl::setPageScaleFactor(float scaleFactor)
|
| {
|
| ASSERT(page());
|
| @@ -3034,7 +3048,7 @@ void WebViewImpl::setPageScaleFactor(float scaleFactor)
|
| if (scaleFactor == pageScaleFactor())
|
| return;
|
|
|
| - // TODO(bokan): Old-style pinch path. Remove when we're migrated to
|
| + // FIXME(bokan): Old-style pinch path. Remove when we're migrated to
|
| // virtual viewport pinch.
|
| if (!pinchVirtualViewportEnabled()) {
|
| IntPoint scrollOffset(mainFrame()->scrollOffset().width, mainFrame()->scrollOffset().height);
|
| @@ -3310,8 +3324,8 @@ float WebViewImpl::maximumPageScaleFactor() const
|
|
|
| void WebViewImpl::resetScrollAndScaleState()
|
| {
|
| - // TODO: This is done by the pinchViewport().reset() call below and can be removed when
|
| - // the new pinch path is the only one.
|
| + // FIXME(bokan): This is done by the pinchViewport().reset() call below and
|
| + // can be removed when the new pinch path is the only one.
|
| setPageScaleFactor(1);
|
| updateMainFrameScrollPosition(IntPoint(), true);
|
| page()->frameHost().pinchViewport().reset();
|
| @@ -4230,29 +4244,32 @@ void WebViewImpl::applyViewportDeltas(
|
| float pageScaleDelta,
|
| float topControlsDelta)
|
| {
|
| - // FIXME(bokan): Will be replaced in 3-sided patch once Chromium side is landed.
|
| - applyViewportDeltas(pinchViewportDelta + mainFrameDelta, pageScaleDelta, topControlsDelta);
|
| -}
|
| + ASSERT(pinchVirtualViewportEnabled());
|
|
|
| -void WebViewImpl::applyViewportDeltas(const WebSize& scrollDelta, float pageScaleDelta, float topControlsDelta)
|
| -{
|
| if (!mainFrameImpl() || !mainFrameImpl()->frameView())
|
| return;
|
|
|
| setTopControlsContentOffset(m_topControlsContentOffset + topControlsDelta);
|
|
|
| - if (pinchVirtualViewportEnabled()) {
|
| - if (pageScaleDelta != 1) {
|
| - // When the virtual viewport is enabled, offsets are already set for us.
|
| - setPageScaleFactor(pageScaleFactor() * pageScaleDelta);
|
| - m_doubleTapZoomPending = false;
|
| - }
|
| + FloatPoint pinchViewportOffset = page()->frameHost().pinchViewport().visibleRect().location();
|
| + pinchViewportOffset.move(pinchViewportDelta.width, pinchViewportDelta.height);
|
| + setPageScaleFactorAndLocation(pageScaleFactor() * pageScaleDelta, pinchViewportOffset);
|
| +
|
| + if (pageScaleDelta != 1)
|
| + m_doubleTapZoomPending = false;
|
|
|
| + IntPoint mainFrameScrollOffset = IntPoint(mainFrame()->scrollOffset());
|
| + mainFrameScrollOffset.move(mainFrameDelta.width, mainFrameDelta.height);
|
| + updateMainFrameScrollPosition(mainFrameScrollOffset, false);
|
| +}
|
| +
|
| +void WebViewImpl::applyViewportDeltas(const WebSize& scrollDelta, float pageScaleDelta, float topControlsDelta)
|
| +{
|
| + if (!mainFrameImpl() || !mainFrameImpl()->frameView())
|
| return;
|
| - }
|
|
|
| - // TODO(bokan): Old pinch path only - virtual viewport pinch scrolls are automatically updated via GraphicsLayer::DidScroll.
|
| - // this should be removed once old pinch is removed.
|
| + setTopControlsContentOffset(m_topControlsContentOffset + topControlsDelta);
|
| +
|
| if (pageScaleDelta == 1) {
|
| TRACE_EVENT_INSTANT2("blink", "WebViewImpl::applyScrollAndScale::scrollBy", "x", scrollDelta.width, "y", scrollDelta.height);
|
| WebSize webScrollOffset = mainFrame()->scrollOffset();
|
|
|