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

Unified Diff: Source/web/WebViewImpl.cpp

Issue 1025543002: Remove old pinch-zoom paths from Blink (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebase Created 5 years, 9 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
« no previous file with comments | « Source/web/WebViewImpl.h ('k') | Source/web/tests/PinchViewportTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/WebViewImpl.cpp
diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp
index 3b7c864e3da11d40649c5e1530495820ea38d7af..e7a26ca9b7a2cd97427e36ee1ba2a1dd4084cb6c 100644
--- a/Source/web/WebViewImpl.cpp
+++ b/Source/web/WebViewImpl.cpp
@@ -949,11 +949,13 @@ bool WebViewImpl::endActiveFlingAnimation()
bool WebViewImpl::startPageScaleAnimation(const IntPoint& targetPosition, bool useAnchor, float newScale, double durationInSeconds)
{
+ PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
WebPoint clampedPoint = targetPosition;
if (!useAnchor) {
- clampedPoint = clampOffsetAtScale(targetPosition, newScale);
+ clampedPoint = pinchViewport.clampDocumentOffsetAtScale(targetPosition, newScale);
if (!durationInSeconds) {
- setPageScaleFactor(newScale, clampedPoint);
+ setPageScaleFactor(newScale);
+ pinchViewport.setLocationInDocument(DoublePoint(clampedPoint.x, clampedPoint.y));
return false;
}
}
@@ -1289,7 +1291,7 @@ void WebViewImpl::computeScaleAndScrollForBlockRect(const WebPoint& hitPointInRo
scale = clampPageScaleFactorToLimits(scale);
scroll = mainFrameImpl()->frameView()->rootFrameToContents(scroll);
- scroll = clampOffsetAtScale(scroll, scale);
+ scroll = page()->frameHost().pinchViewport().clampDocumentOffsetAtScale(scroll, scale);
}
static Node* findCursorDefiningAncestor(Node* node, LocalFrame* frame)
@@ -1761,9 +1763,6 @@ WebSize WebViewImpl::size()
void WebViewImpl::resizePinchViewport(const WebSize& newSize)
{
- if (!pinchVirtualViewportEnabled())
- return;
-
page()->frameHost().pinchViewport().setSize(newSize);
page()->frameHost().pinchViewport().clampToBoundaries();
}
@@ -1775,13 +1774,7 @@ void WebViewImpl::performResize()
updatePageDefinedViewportConstraints(mainFrameImpl()->frame()->document()->viewportDescription());
updateMainFrameLayoutSize();
- // If the virtual viewport pinch mode is enabled, the main frame will be resized
- // after layout so it can be sized to the contentsSize.
- if (!pinchVirtualViewportEnabled() && mainFrameImpl()->frameView())
- mainFrameImpl()->frameView()->resize(m_size);
-
- if (pinchVirtualViewportEnabled())
- page()->frameHost().pinchViewport().setSize(m_size);
+ page()->frameHost().pinchViewport().setSize(m_size);
if (mainFrameImpl()->frameView()) {
if (!mainFrameImpl()->frameView()->needsLayout())
@@ -1830,28 +1823,21 @@ void WebViewImpl::didUpdateTopControls()
float topControlsViewportAdjustment = topControls().layoutHeight() - topControls().contentOffset();
- if (!pinchVirtualViewportEnabled()) {
- // The viewport bounds were adjusted on the compositor by this much due to top controls. Tell
- // the FrameView about it so it can make correct scroll offset clamping decisions during compositor
- // commits.
- view->setTopControlsViewportAdjustment(topControlsViewportAdjustment);
- } else {
- PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
+ PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
- if (pinchViewport.visibleRect().isEmpty())
- return;
+ if (pinchViewport.visibleRect().isEmpty())
+ return;
- pinchViewport.setTopControlsAdjustment(topControlsViewportAdjustment);
+ pinchViewport.setTopControlsAdjustment(topControlsViewportAdjustment);
- // On ChromeOS the pinch viewport can change size independent of the layout viewport due to the
- // on screen keyboard so we should only set the FrameView adjustment on Android.
- if (settings() && settings()->mainFrameResizesAreOrientationChanges()) {
- // Shrink the FrameView by the amount that will maintain the aspect-ratio with the PinchViewport.
- float aspectRatio = pinchViewport.visibleRect().width() / pinchViewport.visibleRect().height();
- float newHeight = view->unscaledVisibleContentSize(ExcludeScrollbars).width() / aspectRatio;
- float adjustment = newHeight - view->unscaledVisibleContentSize(ExcludeScrollbars).height();
- view->setTopControlsViewportAdjustment(adjustment);
- }
+ // On ChromeOS the pinch viewport can change size independent of the layout viewport due to the
+ // on screen keyboard so we should only set the FrameView adjustment on Android.
+ if (settings() && settings()->mainFrameResizesAreOrientationChanges()) {
+ // Shrink the FrameView by the amount that will maintain the aspect-ratio with the PinchViewport.
+ float aspectRatio = pinchViewport.visibleRect().width() / pinchViewport.visibleRect().height();
+ float newHeight = view->unscaledVisibleContentSize(ExcludeScrollbars).width() / aspectRatio;
+ float adjustment = newHeight - view->unscaledVisibleContentSize(ExcludeScrollbars).height();
+ view->setTopControlsViewportAdjustment(adjustment);
}
}
@@ -1907,20 +1893,6 @@ void WebViewImpl::resize(const WebSize& newSize)
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
- if (page()->mainFrame()->isLocalFrame())
- return page()->deprecatedLocalMainFrame()->view()->visibleContentRect();
-
- return IntRect();
-}
-
void WebViewImpl::willEndLiveResize()
{
if (mainFrameImpl() && mainFrameImpl()->frameView())
@@ -2228,8 +2200,7 @@ bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent)
if (handleSyntheticWheelFromTouchpadPinchEvent(pinchEvent))
return true;
- if (pinchVirtualViewportEnabled()
- && page()->frameHost().pinchViewport().magnifyScaleAroundAnchor(pinchEvent.data.pinchUpdate.scale, FloatPoint(pinchEvent.x, pinchEvent.y)))
+ if (page()->frameHost().pinchViewport().magnifyScaleAroundAnchor(pinchEvent.data.pinchUpdate.scale, FloatPoint(pinchEvent.x, pinchEvent.y)))
return true;
}
@@ -3130,9 +3101,6 @@ float WebViewImpl::pageScaleFactor() const
if (!page())
return 1;
- if (!pinchVirtualViewportEnabled())
- return page()->pageScaleFactor();
-
return page()->frameHost().pinchViewport().scale();
}
@@ -3141,41 +3109,15 @@ float WebViewImpl::clampPageScaleFactorToLimits(float scaleFactor) const
return m_pageScaleConstraintsSet.finalConstraints().clampToConstraints(scaleFactor);
}
-IntPoint WebViewImpl::clampOffsetAtScale(const IntPoint& offset, float scale)
-{
- FrameView* view = mainFrameImpl()->frameView();
- if (!view)
- return offset;
-
- if (!pinchVirtualViewportEnabled())
- return view->clampOffsetAtScale(offset, scale);
-
- return page()->frameHost().pinchViewport().clampDocumentOffsetAtScale(offset, scale);
-}
-
-bool WebViewImpl::pinchVirtualViewportEnabled() const
-{
- ASSERT(page());
- return page()->settings().pinchVirtualViewportEnabled();
-}
-
void WebViewImpl::setPinchViewportOffset(const WebFloatPoint& offset)
{
ASSERT(page());
-
- if (!pinchVirtualViewportEnabled())
- return;
-
page()->frameHost().pinchViewport().setLocation(offset);
}
WebFloatPoint WebViewImpl::pinchViewportOffset() const
{
ASSERT(page());
-
- if (!pinchVirtualViewportEnabled())
- return WebFloatPoint();
-
return page()->frameHost().pinchViewport().visibleRect().location();
}
@@ -3183,12 +3125,6 @@ void WebViewImpl::scrollAndRescaleViewports(float scaleFactor,
const IntPoint& mainFrameOrigin,
const FloatPoint& pinchViewportOrigin)
{
- // Old way
- if (!pinchVirtualViewportEnabled()) {
- setPageScaleFactor(scaleFactor, mainFrameOrigin);
- return;
- }
-
if (!page())
return;
@@ -3211,7 +3147,6 @@ void WebViewImpl::scrollAndRescaleViewports(float scaleFactor,
void WebViewImpl::setPageScaleFactorAndLocation(float scaleFactor, const FloatPoint& location)
{
- ASSERT(pinchVirtualViewportEnabled());
ASSERT(page());
page()->frameHost().pinchViewport().setScaleAndLocation(
@@ -3227,14 +3162,6 @@ void WebViewImpl::setPageScaleFactor(float scaleFactor)
if (scaleFactor == pageScaleFactor())
return;
- // 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);
- setPageScaleFactor(scaleFactor, scrollOffset);
- return;
- }
-
page()->frameHost().pinchViewport().setScale(scaleFactor);
}
@@ -3243,23 +3170,6 @@ void WebViewImpl::setMainFrameScrollOffset(const WebPoint& origin)
updateMainFrameScrollPosition(DoublePoint(origin.x, origin.y), false);
}
-void WebViewImpl::setPageScaleFactor(float scaleFactor, const WebPoint& origin)
-{
- if (!page())
- return;
-
- IntPoint newScrollOffset = origin;
- scaleFactor = clampPageScaleFactorToLimits(scaleFactor);
- newScrollOffset = clampOffsetAtScale(newScrollOffset, scaleFactor);
-
- if (pinchVirtualViewportEnabled())
- setPageScaleFactor(scaleFactor);
- // Note, we don't set the offset in the new path. This method is going
- // away for the new pinch model so that's ok.
- else
- page()->setPageScaleFactor(scaleFactor, newScrollOffset);
-}
-
float WebViewImpl::deviceScaleFactor() const
{
if (!page())
@@ -3376,9 +3286,6 @@ void WebViewImpl::setIgnoreViewportTagScaleLimits(bool ignore)
IntSize WebViewImpl::mainFrameSize()
{
- if (!pinchVirtualViewportEnabled())
- return m_size;
-
return m_pageScaleConstraintsSet.mainFrameSize();
}
@@ -3537,9 +3444,6 @@ float WebViewImpl::maximumPageScaleFactor() const
void WebViewImpl::resetScrollAndScaleState()
{
- // 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();
@@ -4096,13 +4000,10 @@ void WebViewImpl::resumeTreeViewCommits()
void WebViewImpl::postLayoutResize(WebLocalFrameImpl* webframe)
{
FrameView* view = webframe->frame()->view();
- if (pinchVirtualViewportEnabled()) {
- if (webframe == mainFrame()) {
- view->resize(mainFrameSize());
- } else {
- view->resize(webframe->frameView()->layoutSize());
- }
- }
+ if (webframe == mainFrame())
+ view->resize(mainFrameSize());
+ else
+ view->resize(webframe->frameView()->layoutSize());
}
void WebViewImpl::layoutUpdated(WebLocalFrameImpl* webframe)
@@ -4218,19 +4119,7 @@ void WebViewImpl::setOverlayLayer(GraphicsLayer* layer)
if (!m_page->mainFrame()->isLocalFrame())
return;
- if (pinchVirtualViewportEnabled()) {
- m_page->deprecatedLocalMainFrame()->view()->layoutView()->compositor()->setOverlayLayer(layer);
- return;
- }
-
- // FIXME(bokan): This path goes away after virtual viewport pinch is enabled everywhere.
- if (!m_rootTransformLayer)
- m_rootTransformLayer = m_page->deprecatedLocalMainFrame()->view()->layoutView()->compositor()->ensureRootTransformLayer();
-
- if (m_rootTransformLayer) {
- if (layer->parent() != m_rootTransformLayer)
- m_rootTransformLayer->addChild(layer);
- }
+ m_page->deprecatedLocalMainFrame()->view()->layoutView()->compositor()->setOverlayLayer(layer);
}
Element* WebViewImpl::focusedElement() const
@@ -4303,21 +4192,15 @@ void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer)
{
suppressInvalidations(true);
- if (pinchVirtualViewportEnabled()) {
- PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
- pinchViewport.attachToLayerTree(layer, graphicsLayerFactory());
- if (layer) {
- m_rootGraphicsLayer = pinchViewport.rootGraphicsLayer();
- m_rootLayer = pinchViewport.rootGraphicsLayer()->platformLayer();
- m_rootTransformLayer = pinchViewport.rootGraphicsLayer();
- } else {
- m_rootGraphicsLayer = nullptr;
- m_rootLayer = nullptr;
- m_rootTransformLayer = nullptr;
- }
+ PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
+ pinchViewport.attachToLayerTree(layer, graphicsLayerFactory());
+ if (layer) {
+ m_rootGraphicsLayer = pinchViewport.rootGraphicsLayer();
+ m_rootLayer = pinchViewport.rootGraphicsLayer()->platformLayer();
+ m_rootTransformLayer = pinchViewport.rootGraphicsLayer();
} else {
- m_rootGraphicsLayer = layer;
- m_rootLayer = layer ? layer->platformLayer() : 0;
+ m_rootGraphicsLayer = nullptr;
+ m_rootLayer = nullptr;
m_rootTransformLayer = nullptr;
}
@@ -4330,21 +4213,10 @@ void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer)
m_layerTreeView->setRootLayer(*m_rootLayer);
// We register viewport layers here since there may not be a layer
// tree view prior to this point.
- if (pinchVirtualViewportEnabled()) {
- page()->frameHost().pinchViewport().registerLayersWithTreeView(m_layerTreeView);
- } else {
- GraphicsLayer* rootScrollLayer = compositor()->scrollLayer();
- ASSERT(rootScrollLayer);
- WebLayer* pageScaleLayer = rootScrollLayer->parent() ? rootScrollLayer->parent()->platformLayer() : nullptr;
- // Note that it is invalid to have 0 as a scroll elasticity layer when using pinch virtual viewport.
- m_layerTreeView->registerViewportLayers(0, pageScaleLayer, rootScrollLayer->platformLayer(), 0);
- }
+ page()->frameHost().pinchViewport().registerLayersWithTreeView(m_layerTreeView);
} else {
m_layerTreeView->clearRootLayer();
- if (pinchVirtualViewportEnabled())
- page()->frameHost().pinchViewport().clearLayersForTreeView(m_layerTreeView);
- else
- m_layerTreeView->clearViewportLayers();
+ page()->frameHost().pinchViewport().clearLayersForTreeView(m_layerTreeView);
}
}
@@ -4495,8 +4367,6 @@ void WebViewImpl::applyViewportDeltas(
float pageScaleDelta,
float topControlsShownRatioDelta)
{
- ASSERT(pinchVirtualViewportEnabled());
-
if (!mainFrameImpl())
return;
FrameView* frameView = mainFrameImpl()->frameView();
@@ -4518,31 +4388,6 @@ void WebViewImpl::applyViewportDeltas(
DoubleSize(outerViewportDelta.width, outerViewportDelta.height), /* programmaticScroll */ false);
}
-void WebViewImpl::applyViewportDeltas(const WebSize& scrollDelta, float pageScaleDelta, float topControlsShownRatioDelta)
-{
- if (!mainFrameImpl() || !mainFrameImpl()->frameView())
- return;
-
- topControls().setShownRatio(topControls().shownRatio() + topControlsShownRatioDelta);
-
- if (pageScaleDelta == 1) {
- TRACE_EVENT_INSTANT2("blink", "WebViewImpl::applyScrollAndScale::scrollBy", "x", scrollDelta.width, "y", scrollDelta.height);
- WebSize webScrollOffset = mainFrame()->scrollOffset();
- IntPoint scrollOffset(webScrollOffset.width + scrollDelta.width, webScrollOffset.height + scrollDelta.height);
- updateMainFrameScrollPosition(scrollOffset, false);
- } else {
- // The page scale changed, so apply a scale and scroll in a single
- // operation.
- WebSize scrollOffset = mainFrame()->scrollOffset();
- scrollOffset.width += scrollDelta.width;
- scrollOffset.height += scrollDelta.height;
-
- WebPoint scrollPoint(scrollOffset.width, scrollOffset.height);
- setPageScaleFactor(pageScaleFactor() * pageScaleDelta, scrollPoint);
- m_doubleTapZoomPending = false;
- }
-}
-
void WebViewImpl::updateLayerTreeViewport()
{
if (!page() || !m_layerTreeView)
@@ -4575,11 +4420,6 @@ void WebViewImpl::updateRootLayerTransform()
if (!m_rootGraphicsLayer)
return;
- // FIXME(bokan): m_rootTransformLayer is always set here in pinch virtual viewport. This can go away once
- // that's default everywhere.
- if (!m_rootTransformLayer && m_page->mainFrame()->isLocalFrame())
- m_rootTransformLayer = m_page->deprecatedLocalMainFrame()->view()->layoutView()->compositor()->ensureRootTransformLayer();
-
if (m_rootTransformLayer) {
TransformationMatrix transform;
transform.translate(m_rootLayerOffset.width, m_rootLayerOffset.height);
« no previous file with comments | « Source/web/WebViewImpl.h ('k') | Source/web/tests/PinchViewportTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698