Index: third_party/WebKit/Source/core/frame/VisualViewport.cpp |
diff --git a/third_party/WebKit/Source/core/frame/VisualViewport.cpp b/third_party/WebKit/Source/core/frame/VisualViewport.cpp |
index cccea94587708ebc12d88a5465241f4087c5c3ed..61572c8f2ff53a1aec04dea03dc4032b8cd09927 100644 |
--- a/third_party/WebKit/Source/core/frame/VisualViewport.cpp |
+++ b/third_party/WebKit/Source/core/frame/VisualViewport.cpp |
@@ -157,15 +157,15 @@ FloatSize VisualViewport::visibleSize() const { |
} |
FloatRect VisualViewport::visibleRect() const { |
- return FloatRect(location(), visibleSize()); |
+ return FloatRect(FloatPoint(scrollOffset()), visibleSize()); |
} |
FloatRect VisualViewport::visibleRectInDocument() const { |
if (!mainFrame() || !mainFrame()->view()) |
return FloatRect(); |
- FloatPoint viewLocation = FloatPoint( |
- mainFrame()->view()->getScrollableArea()->scrollPositionDouble()); |
+ FloatPoint viewLocation = |
+ FloatPoint(mainFrame()->view()->getScrollableArea()->scrollOffset()); |
return FloatRect(viewLocation, visibleSize()); |
} |
@@ -173,7 +173,7 @@ FloatRect VisualViewport::mainViewToViewportCSSPixels( |
const FloatRect& rect) const { |
// Note, this is in CSS Pixels so we don't apply scale. |
FloatRect rectInViewport = rect; |
- rectInViewport.moveBy(-location()); |
+ rectInViewport.move(-scrollOffset()); |
return rectInViewport; |
} |
@@ -181,7 +181,7 @@ FloatPoint VisualViewport::viewportCSSPixelsToRootFrame( |
const FloatPoint& point) const { |
// Note, this is in CSS Pixels so we don't apply scale. |
FloatPoint pointInRootFrame = point; |
- pointInRootFrame.moveBy(location()); |
+ pointInRootFrame.move(scrollOffset()); |
return pointInRootFrame; |
} |
@@ -189,16 +189,12 @@ void VisualViewport::setLocation(const FloatPoint& newLocation) { |
setScaleAndLocation(m_scale, newLocation); |
} |
-void VisualViewport::move(const FloatPoint& delta) { |
- setLocation(m_offset + delta); |
-} |
- |
-void VisualViewport::move(const FloatSize& delta) { |
- setLocation(m_offset + delta); |
+void VisualViewport::move(const ScrollOffset& delta) { |
+ setLocation(FloatPoint(m_offset + delta)); |
} |
void VisualViewport::setScale(float scale) { |
- setScaleAndLocation(scale, m_offset); |
+ setScaleAndLocation(scale, FloatPoint(m_offset)); |
} |
double VisualViewport::scrollLeft() { |
@@ -227,8 +223,8 @@ double VisualViewport::clientWidth() { |
updateStyleAndLayoutIgnorePendingStylesheets(); |
- double width = adjustScrollForAbsoluteZoom(visibleSize().width(), |
- mainFrame()->pageZoomFactor()); |
+ float width = adjustScrollForAbsoluteZoom(visibleSize().width(), |
+ mainFrame()->pageZoomFactor()); |
return width - mainFrame()->view()->verticalScrollbarWidth() / m_scale; |
} |
@@ -238,8 +234,8 @@ double VisualViewport::clientHeight() { |
updateStyleAndLayoutIgnorePendingStylesheets(); |
- double height = adjustScrollForAbsoluteZoom(visibleSize().height(), |
- mainFrame()->pageZoomFactor()); |
+ float height = adjustScrollForAbsoluteZoom(visibleSize().height(), |
+ mainFrame()->pageZoomFactor()); |
return height - mainFrame()->view()->horizontalScrollbarHeight() / m_scale; |
} |
@@ -269,11 +265,11 @@ bool VisualViewport::didSetScaleOrLocation(float scale, |
enqueueResizeEvent(); |
} |
- FloatPoint clampedOffset(clampOffsetToBoundaries(location)); |
+ ScrollOffset clampedOffset = clampScrollOffset(toScrollOffset(location)); |
if (clampedOffset != m_offset) { |
m_offset = clampedOffset; |
- scrollAnimator().setCurrentPosition(m_offset); |
+ scrollAnimator().setCurrentOffset(m_offset); |
// SVG runs with accelerated compositing disabled so no |
// ScrollingCoordinator. |
@@ -324,7 +320,8 @@ bool VisualViewport::magnifyScaleAroundAnchor(float magnifyDelta, |
FloatSize anchorDeltaUnusedByScroll = anchorDelta; |
// Manually bubble any remaining anchor delta up to the visual viewport. |
- FloatPoint newLocation(location() + anchorDeltaUnusedByScroll); |
+ FloatPoint newLocation(FloatPoint(scrollOffset()) + |
+ anchorDeltaUnusedByScroll); |
setScaleAndLocation(newPageScale, newLocation); |
return true; |
} |
@@ -507,16 +504,6 @@ HostWindow* VisualViewport::getHostWindow() const { |
return &frameHost().chromeClient(); |
} |
-DoubleRect VisualViewport::visibleContentRectDouble( |
- IncludeScrollbarsInRect) const { |
- return visibleRect(); |
-} |
- |
-IntRect VisualViewport::visibleContentRect( |
- IncludeScrollbarsInRect scrollbarInclusion) const { |
- return enclosingIntRect(visibleContentRectDouble(scrollbarInclusion)); |
-} |
- |
bool VisualViewport::shouldUseIntegerScrollOffset() const { |
LocalFrame* frame = mainFrame(); |
if (frame && frame->settings() && |
@@ -526,39 +513,39 @@ bool VisualViewport::shouldUseIntegerScrollOffset() const { |
return ScrollableArea::shouldUseIntegerScrollOffset(); |
} |
-void VisualViewport::setScrollPosition(const DoublePoint& scrollPoint, |
- ScrollType scrollType, |
- ScrollBehavior scrollBehavior) { |
- // We clamp the position here, because the ScrollAnimator may otherwise be |
- // set to a non-clamped position by ScrollableArea::setScrollPosition, |
+void VisualViewport::setScrollOffset(const ScrollOffset& offset, |
+ ScrollType scrollType, |
+ ScrollBehavior scrollBehavior) { |
+ // We clamp the offset here, because the ScrollAnimator may otherwise be |
+ // set to a non-clamped offset by ScrollableArea::setScrollOffset, |
// which may lead to incorrect scrolling behavior in RootFrameViewport down |
// the line. |
// TODO(eseckler): Solve this instead by ensuring that ScrollableArea and |
// ScrollAnimator are kept in sync. This requires that ScrollableArea always |
// stores fractional offsets and that truncation happens elsewhere, see |
// crbug.com/626315. |
- DoublePoint newScrollPosition = clampScrollPosition(scrollPoint); |
- ScrollableArea::setScrollPosition(newScrollPosition, scrollType, |
- scrollBehavior); |
+ ScrollOffset newScrollOffset = clampScrollOffset(offset); |
+ ScrollableArea::setScrollOffset(newScrollOffset, scrollType, scrollBehavior); |
} |
int VisualViewport::scrollSize(ScrollbarOrientation orientation) const { |
- IntSize scrollDimensions = maximumScrollPosition() - minimumScrollPosition(); |
+ IntSize scrollDimensions = |
+ maximumScrollOffsetInt() - minimumScrollOffsetInt(); |
return (orientation == HorizontalScrollbar) ? scrollDimensions.width() |
: scrollDimensions.height(); |
} |
-IntPoint VisualViewport::minimumScrollPosition() const { |
- return IntPoint(); |
+IntSize VisualViewport::minimumScrollOffsetInt() const { |
+ return IntSize(); |
} |
-IntPoint VisualViewport::maximumScrollPosition() const { |
- return flooredIntPoint(maximumScrollPositionDouble()); |
+IntSize VisualViewport::maximumScrollOffsetInt() const { |
+ return flooredIntSize(maximumScrollOffset()); |
} |
-DoublePoint VisualViewport::maximumScrollPositionDouble() const { |
+ScrollOffset VisualViewport::maximumScrollOffset() const { |
if (!mainFrame()) |
- return IntPoint(); |
+ return ScrollOffset(); |
// TODO(bokan): We probably shouldn't be storing the bounds in a float. |
// crbug.com/470718. |
@@ -578,7 +565,7 @@ DoublePoint VisualViewport::maximumScrollPositionDouble() const { |
FloatSize maxPosition = frameViewSize - viewportSize; |
maxPosition.scale(1 / m_scale); |
- return DoublePoint(maxPosition); |
+ return ScrollOffset(maxPosition); |
} |
IntPoint VisualViewport::clampDocumentOffsetAtScale(const IntPoint& offset, |
@@ -591,16 +578,16 @@ IntPoint VisualViewport::clampDocumentOffsetAtScale(const IntPoint& offset, |
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) |
+ IntSize visualViewportMax = |
+ flooredIntSize(FloatSize(contentsSize()) - scaledSize); |
+ IntSize max = view->maximumScrollOffsetInt() + visualViewportMax; |
+ IntSize min = |
+ view->minimumScrollOffsetInt(); // VisualViewportMin should be (0, 0) |
- IntPoint clamped = offset; |
+ IntSize clamped = toIntSize(offset); |
clamped = clamped.shrunkTo(max); |
clamped = clamped.expandedTo(min); |
- return clamped; |
+ return IntPoint(clamped); |
} |
void VisualViewport::setTopControlsAdjustment(float adjustment) { |
@@ -629,9 +616,9 @@ IntSize VisualViewport::contentsSize() const { |
return frame->view()->visibleContentRect(IncludeScrollbars).size(); |
} |
-void VisualViewport::setScrollOffset(const DoublePoint& offset, |
- ScrollType scrollType) { |
- if (didSetScaleOrLocation(m_scale, toFloatPoint(offset)) && |
+void VisualViewport::updateScrollOffset(const ScrollOffset& position, |
+ ScrollType scrollType) { |
+ if (didSetScaleOrLocation(m_scale, FloatPoint(position)) && |
scrollType != AnchoringScroll) |
notifyRootFrameViewport(); |
} |
@@ -673,24 +660,15 @@ Widget* VisualViewport::getWidget() { |
return mainFrame()->view(); |
} |
-FloatPoint VisualViewport::clampOffsetToBoundaries(const FloatPoint& offset) { |
- FloatPoint clampedOffset(offset); |
- clampedOffset = |
- clampedOffset.shrunkTo(FloatPoint(maximumScrollPositionDouble())); |
- clampedOffset = |
- clampedOffset.expandedTo(FloatPoint(minimumScrollPositionDouble())); |
- return clampedOffset; |
-} |
- |
void VisualViewport::clampToBoundaries() { |
- setLocation(m_offset); |
+ setLocation(FloatPoint(m_offset)); |
} |
FloatRect VisualViewport::viewportToRootFrame( |
const FloatRect& rectInViewport) const { |
FloatRect rectInRootFrame = rectInViewport; |
rectInRootFrame.scale(1 / scale()); |
- rectInRootFrame.moveBy(location()); |
+ rectInRootFrame.move(scrollOffset()); |
return rectInRootFrame; |
} |
@@ -703,7 +681,7 @@ IntRect VisualViewport::viewportToRootFrame( |
FloatRect VisualViewport::rootFrameToViewport( |
const FloatRect& rectInRootFrame) const { |
FloatRect rectInViewport = rectInRootFrame; |
- rectInViewport.moveBy(-location()); |
+ rectInViewport.move(-scrollOffset()); |
rectInViewport.scale(scale()); |
return rectInViewport; |
} |
@@ -718,14 +696,14 @@ FloatPoint VisualViewport::viewportToRootFrame( |
const FloatPoint& pointInViewport) const { |
FloatPoint pointInRootFrame = pointInViewport; |
pointInRootFrame.scale(1 / scale(), 1 / scale()); |
- pointInRootFrame.moveBy(location()); |
+ pointInRootFrame.move(scrollOffset()); |
return pointInRootFrame; |
} |
FloatPoint VisualViewport::rootFrameToViewport( |
const FloatPoint& pointInRootFrame) const { |
FloatPoint pointInViewport = pointInRootFrame; |
- pointInViewport.moveBy(-location()); |
+ pointInViewport.move(-scrollOffset()); |
pointInViewport.scale(scale(), scale()); |
return pointInViewport; |
} |