diff options
Diffstat (limited to 'WebCore/platform/ScrollView.cpp')
-rw-r--r-- | WebCore/platform/ScrollView.cpp | 60 |
1 files changed, 12 insertions, 48 deletions
diff --git a/WebCore/platform/ScrollView.cpp b/WebCore/platform/ScrollView.cpp index d6184e9..57fbaa1 100644 --- a/WebCore/platform/ScrollView.cpp +++ b/WebCore/platform/ScrollView.cpp @@ -308,21 +308,9 @@ int ScrollView::actualScrollY() const IntPoint ScrollView::maximumScrollPosition() const { - IntPoint maximumOffset(contentsWidth() - visibleWidth() - m_scrollOrigin.x(), contentsHeight() - visibleHeight() - m_scrollOrigin.y()); + IntSize maximumOffset = contentsSize() - visibleContentRect().size(); maximumOffset.clampNegativeToZero(); - return maximumOffset; -} - -IntPoint ScrollView::minimumScrollPosition() const -{ - return IntPoint(-m_scrollOrigin.x(), -m_scrollOrigin.y()); -} - -IntPoint ScrollView::adjustScrollPositionWithinRange(const IntPoint& scrollPoint) const -{ - IntPoint newScrollPosition = scrollPoint.shrunkTo(maximumScrollPosition()); - newScrollPosition = newScrollPosition.expandedTo(minimumScrollPosition()); - return newScrollPosition; + return IntPoint(maximumOffset.width(), maximumOffset.height()); } int ScrollView::scrollSize(ScrollbarOrientation orientation) const @@ -345,9 +333,9 @@ void ScrollView::valueChanged(Scrollbar* scrollbar) IntSize newOffset = m_scrollOffset; if (scrollbar) { if (scrollbar->orientation() == HorizontalScrollbar) - newOffset.setWidth(scrollbar->value() - m_scrollOrigin.x()); + newOffset.setWidth(scrollbar->value()); else if (scrollbar->orientation() == VerticalScrollbar) - newOffset.setHeight(scrollbar->value() - m_scrollOrigin.y()); + newOffset.setHeight(scrollbar->value()); } IntSize scrollDelta = newOffset - m_scrollOffset; @@ -390,7 +378,8 @@ void ScrollView::setScrollPosition(const IntPoint& scrollPoint) } #endif - IntPoint newScrollPosition = adjustScrollPositionWithinRange(scrollPoint); + IntPoint newScrollPosition = scrollPoint.shrunkTo(maximumScrollPosition()); + newScrollPosition.clampNegativeToZero(); if (newScrollPosition == scrollPosition()) return; @@ -481,15 +470,11 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset) newHasHorizontalScrollbar = false; if (hasHorizontalScrollbar != newHasHorizontalScrollbar) { - if (m_scrollOrigin.y() && !newHasHorizontalScrollbar) - m_scrollOrigin.setY(m_scrollOrigin.y() - m_horizontalScrollbar->height()); setHasHorizontalScrollbar(newHasHorizontalScrollbar); sendContentResizedNotification = true; } if (hasVerticalScrollbar != newHasVerticalScrollbar) { - if (m_scrollOrigin.x() && !newHasVerticalScrollbar) - m_scrollOrigin.setX(m_scrollOrigin.x() - m_verticalScrollbar->width()); setHasVerticalScrollbar(newHasVerticalScrollbar); sendContentResizedNotification = true; } @@ -515,10 +500,10 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset) return; m_inUpdateScrollbars = true; - - IntPoint scrollPoint = adjustScrollPositionWithinRange(IntPoint(desiredOffset.width(), desiredOffset.height())); - IntSize scroll(scrollPoint.x(), scrollPoint.y()); - + IntSize maxScrollPosition(contentsWidth() - visibleWidth(), contentsHeight() - visibleHeight()); + IntSize scroll = desiredOffset.shrunkTo(maxScrollPosition); + scroll.clampNegativeToZero(); + if (m_horizontalScrollbar) { int clientWidth = visibleWidth(); m_horizontalScrollbar->setEnabled(contentsWidth() > clientWidth); @@ -536,7 +521,7 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset) m_horizontalScrollbar->setSuppressInvalidation(true); m_horizontalScrollbar->setSteps(Scrollbar::pixelsPerLineStep(), pageStep); m_horizontalScrollbar->setProportion(clientWidth, contentsWidth()); - m_horizontalScrollbar->setValue(scroll.width() + m_scrollOrigin.x(), Scrollbar::NotFromScrollAnimator); + m_horizontalScrollbar->setValue(scroll.width(), Scrollbar::NotFromScrollAnimator); if (m_scrollbarsSuppressed) m_horizontalScrollbar->setSuppressInvalidation(false); } @@ -558,7 +543,7 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset) m_verticalScrollbar->setSuppressInvalidation(true); m_verticalScrollbar->setSteps(Scrollbar::pixelsPerLineStep(), pageStep); m_verticalScrollbar->setProportion(clientHeight, contentsHeight()); - m_verticalScrollbar->setValue(scroll.height() + m_scrollOrigin.y(), Scrollbar::NotFromScrollAnimator); + m_verticalScrollbar->setValue(scroll.height(), Scrollbar::NotFromScrollAnimator); if (m_scrollbarsSuppressed) m_verticalScrollbar->setSuppressInvalidation(false); } @@ -1063,23 +1048,6 @@ void ScrollView::removePanScrollIcon() hostWindow()->invalidateContentsAndWindow(IntRect(m_panScrollIconPoint, IntSize(panIconSizeLength, panIconSizeLength)), true /*immediate*/); } -void ScrollView::setScrollOrigin(const IntPoint& origin, bool updatePosition) -{ - if (m_scrollOrigin == origin) - return; - - m_scrollOrigin = origin; - - if (platformWidget()) { - platformSetScrollOrigin(origin, updatePosition); - return; - } - - // Update if the scroll origin changes, since our position will be different if the content size did not change. - if (updatePosition) - updateScrollbars(scrollOffset()); -} - #if !PLATFORM(WX) && !PLATFORM(GTK) && !PLATFORM(EFL) void ScrollView::platformInit() @@ -1110,10 +1078,6 @@ void ScrollView::platformSetScrollbarsSuppressed(bool) { } -void ScrollView::platformSetScrollOrigin(const IntPoint&, bool updatePosition) -{ -} - #endif #if !PLATFORM(MAC) && !PLATFORM(WX) |