IntPoint VisualViewport::clampDocumentOffsetAtScale(const IntPoint& offset, float scale) { if (!mainFrame() || !mainFrame()->view()) return IntPoint(); FrameView* view = mainFrame()->view(); FloatSize scaledSize(m_size); scaledSize.scale(1 / scale); IntPoint visualViewportMax = flooredIntPoint(FloatSize(contentsSize()) - scaledSize); IntPoint max = view->maximumScrollPosition() + visualViewportMax; IntPoint min = view->minimumScrollPosition(); // VisualViewportMin should be (0, 0) IntPoint clamped = offset; clamped = clamped.shrunkTo(max); clamped = clamped.expandedTo(min); return clamped; }
IntPoint ScrollView::adjustScrollPositionWithinRange(const IntPoint& scrollPoint) const { IntPoint newScrollPosition = scrollPoint.shrunkTo(maximumScrollPosition()); newScrollPosition = newScrollPosition.expandedTo(minimumScrollPosition()); return newScrollPosition; }