Index: WebCore/platform/ScrollView.cpp |
=================================================================== |
--- WebCore/platform/ScrollView.cpp (revision 67003) |
+++ WebCore/platform/ScrollView.cpp (working copy) |
@@ -273,6 +273,20 @@ |
return IntPoint(maximumOffset.width(), maximumOffset.height()); |
} |
+int ScrollView::scrollSize(ScrollbarOrientation orientation) const |
+{ |
+ Scrollbar* scrollbar = ((orientation == HorizontalScrollbar) ? m_horizontalScrollbar : m_verticalScrollbar).get(); |
+ return scrollbar ? (scrollbar->totalSize() - scrollbar->visibleSize()) : 0; |
+} |
+ |
+void ScrollView::setScrollOffsetFromAnimation(const IntPoint& offset) |
+{ |
+ if (m_horizontalScrollbar) |
+ m_horizontalScrollbar->setValue(offset.x(), Scrollbar::FromScrollAnimator); |
+ if (m_verticalScrollbar) |
+ m_verticalScrollbar->setValue(offset.y(), Scrollbar::FromScrollAnimator); |
+} |
+ |
void ScrollView::valueChanged(Scrollbar* scrollbar) |
{ |
// Figure out if we really moved. |
@@ -441,7 +455,7 @@ |
m_horizontalScrollbar->setSuppressInvalidation(true); |
m_horizontalScrollbar->setSteps(Scrollbar::pixelsPerLineStep(), pageStep); |
m_horizontalScrollbar->setProportion(clientWidth, contentsWidth()); |
- m_horizontalScrollbar->setValue(scroll.width()); |
+ m_horizontalScrollbar->setValue(scroll.width(), Scrollbar::NotFromScrollAnimator); |
if (m_scrollbarsSuppressed) |
m_horizontalScrollbar->setSuppressInvalidation(false); |
} |
@@ -463,7 +477,7 @@ |
m_verticalScrollbar->setSuppressInvalidation(true); |
m_verticalScrollbar->setSteps(Scrollbar::pixelsPerLineStep(), pageStep); |
m_verticalScrollbar->setProportion(clientHeight, contentsHeight()); |
- m_verticalScrollbar->setValue(scroll.height()); |
+ m_verticalScrollbar->setValue(scroll.height(), Scrollbar::NotFromScrollAnimator); |
if (m_scrollbarsSuppressed) |
m_verticalScrollbar->setSuppressInvalidation(false); |
} |
@@ -673,7 +687,12 @@ |
if (negative) |
deltaY = -deltaY; |
} |
- scrollBy(IntSize(-deltaX, -deltaY)); |
+ |
+ // Should we fall back on scrollBy() if there is no scrollbar for a non-zero delta? |
+ if (deltaY && m_verticalScrollbar) |
+ m_verticalScrollbar->scroll(ScrollUp, ScrollByPixel, deltaY); |
+ if (deltaX && m_horizontalScrollbar) |
+ m_horizontalScrollbar->scroll(ScrollLeft, ScrollByPixel, deltaX); |
} |
} |