bool VisualViewport::didSetScaleOrLocation(float scale, const FloatPoint& location) { if (!mainFrame()) return false; bool valuesChanged = false; if (scale != m_scale) { m_scale = scale; valuesChanged = true; frameHost().chromeClient().pageScaleFactorChanged(); enqueueResizeEvent(); } ScrollOffset clampedOffset = clampScrollOffset(toScrollOffset(location)); if (clampedOffset != m_offset) { m_offset = clampedOffset; scrollAnimator().setCurrentOffset(m_offset); // SVG runs with accelerated compositing disabled so no // ScrollingCoordinator. if (ScrollingCoordinator* coordinator = frameHost().page().scrollingCoordinator()) coordinator->scrollableAreaScrollLayerDidChange(this); if (!frameHost().settings().inertVisualViewport()) { if (Document* document = mainFrame()->document()) document->enqueueScrollEventForNode(document); } enqueueScrollEvent(); mainFrame()->view()->didChangeScrollOffset(); valuesChanged = true; } if (!valuesChanged) return false; InspectorInstrumentation::didUpdateLayout(mainFrame()); mainFrame()->loader().saveScrollState(); clampToBoundaries(); return true; }
void RotationViewportAnchor::restoreToAnchor() { float newPageScaleFactor = m_oldPageScaleFactor / m_oldMinimumPageScaleFactor * m_pageScaleConstraintsSet.finalConstraints().minimumScale; newPageScaleFactor = m_pageScaleConstraintsSet.finalConstraints().clampToConstraints( newPageScaleFactor); FloatSize visualViewportSize(m_visualViewport->size()); visualViewportSize.scale(1 / newPageScaleFactor); IntPoint mainFrameOrigin; FloatPoint visualViewportOrigin; computeOrigins(visualViewportSize, mainFrameOrigin, visualViewportOrigin); layoutViewport().setScrollOffset(toScrollOffset(mainFrameOrigin), ProgrammaticScroll); // Set scale before location, since location can be clamped on setting scale. m_visualViewport->setScale(newPageScaleFactor); m_visualViewport->setLocation(visualViewportOrigin); }
void WebHistoryItem::setVisualViewportScrollOffset( const WebFloatPoint& scrollOffset) { m_private->setVisualViewportScrollOffset(toScrollOffset(scrollOffset)); }