Chromium Code Reviews| Index: Source/web/WebViewImpl.cpp |
| diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp |
| index a6c28a74e72c4c6e712e2d07c185f1504890f323..64ba632205eca7573aff4d51029a6918687e1b41 100644 |
| --- a/Source/web/WebViewImpl.cpp |
| +++ b/Source/web/WebViewImpl.cpp |
| @@ -1689,8 +1689,10 @@ void WebViewImpl::resize(const WebSize& newSize) |
| ViewportAnchor viewportAnchor(&localFrameRootTemporary()->frame()->eventHandler()); |
| if (shouldAnchorAndRescaleViewport) { |
| - viewportAnchor.setAnchor(view->visibleContentRect(), |
| - FloatSize(viewportAnchorXCoord, viewportAnchorYCoord)); |
| + viewportAnchor.setAnchor( |
| + view->visibleContentRect(), |
| + visibleRectInDocument(), |
| + FloatSize(viewportAnchorXCoord, viewportAnchorYCoord)); |
| } |
| // FIXME: TextAutosizer does not yet support out-of-process frames. |
| @@ -1710,15 +1712,33 @@ void WebViewImpl::resize(const WebSize& newSize) |
| if (shouldAnchorAndRescaleViewport) { |
| float newPageScaleFactor = oldPageScaleFactor / oldMinimumPageScaleFactor * minimumPageScaleFactor(); |
| - IntSize scaledViewportSize = newSize; |
| - scaledViewportSize.scale(1 / newPageScaleFactor); |
| - setPageScaleFactor(newPageScaleFactor, viewportAnchor.computeOrigin(scaledViewportSize)); |
| + newPageScaleFactor = clampPageScaleFactorToLimits(newPageScaleFactor); |
| + |
| + FloatSize pinchViewportSize = FloatSize(newSize); |
|
aelias_OOO_until_Jul13
2014/09/17 05:16:36
nit: second FloatSize() shouldn't be necessary, pl
timav
2014/09/17 17:54:45
The cast is required to convert WebSize -> IntSize
|
| + pinchViewportSize.scale(1 / newPageScaleFactor); |
| + |
| + IntPoint mainFrameOrigin; |
| + FloatPoint pinchViewportOrigin; |
| + viewportAnchor.computeOrigins(*view, pinchViewportSize, |
| + &mainFrameOrigin, &pinchViewportOrigin); |
| + scrollAndRescaleViewports(newPageScaleFactor, mainFrameOrigin, pinchViewportOrigin); |
| } |
| } |
| sendResizeEventAndRepaint(); |
| } |
| +IntRect WebViewImpl::visibleRectInDocument() const |
| +{ |
| + if (pinchVirtualViewportEnabled()) { |
| + // Inner viewport in the document coordinates |
| + return enclosedIntRect(page()->frameHost().pinchViewport().visibleRectInDocument()); |
| + } |
| + |
| + // Outer viewport in the document coordinates |
| + return localFrameRootTemporary()->frameView()->visibleContentRect(); |
| +} |
| + |
| void WebViewImpl::willEndLiveResize() |
| { |
| if (mainFrameImpl() && mainFrameImpl()->frameView()) |
| @@ -2918,6 +2938,39 @@ WebFloatPoint WebViewImpl::pinchViewportOffset() const |
| return page()->frameHost().pinchViewport().visibleRect().location(); |
| } |
| +void WebViewImpl::scrollAndRescaleViewports(float scaleFactor, |
| + const IntPoint & mainFrameOrigin, |
|
aelias_OOO_until_Jul13
2014/09/17 05:16:36
nit: "IntPoint& mainFrameOrigin" (no space before)
timav
2014/09/17 17:54:45
Done.
|
| + const FloatPoint & pinchViewportOrigin) |
| +{ |
| + // Old way |
| + if (!pinchVirtualViewportEnabled()) { |
| + setPageScaleFactor(scaleFactor, mainFrameOrigin); |
| + return; |
| + } |
| + |
| + if (!page()) |
| + return; |
| + |
| + if (!mainFrameImpl()) |
| + return; |
| + |
| + FrameView * view = mainFrameImpl()->frameView(); |
| + if (!view) |
| + return; |
| + |
| + // Order is important: pinch viewport location is clamped based on |
| + // main frame scroll position and pinch viewport scale. |
| + |
| + // Set outer viewport position. |
|
aelias_OOO_until_Jul13
2014/09/17 05:16:36
Please delete the three comments starting here. B
timav
2014/09/17 17:54:45
Done.
|
| + view->setScrollOffset(mainFrameOrigin); |
| + |
| + // Set the scale. |
| + setPageScaleFactor(scaleFactor); |
| + |
| + // Set inner viewport position. |
| + page()->frameHost().pinchViewport().setLocation(pinchViewportOrigin); |
| +} |
| + |
| void WebViewImpl::setPageScaleFactor(float scaleFactor) |
| { |
| ASSERT(page()); |
| @@ -2960,7 +3013,6 @@ void WebViewImpl::setPageScaleFactor(float scaleFactor, const WebPoint& origin) |
| page()->setPageScaleFactor(scaleFactor, newScrollOffset); |
| } |
| - |
|
aelias_OOO_until_Jul13
2014/09/17 05:16:36
nit: unnecessary newline
timav
2014/09/17 17:54:45
Newline removed in the new version.
|
| float WebViewImpl::deviceScaleFactor() const |
| { |
| if (!page()) |