Index: Source/core/platform/Scrollbar.cpp |
diff --git a/Source/core/platform/Scrollbar.cpp b/Source/core/platform/Scrollbar.cpp |
index 1811023455171fb5b196ef4d5d7a59d51cbf57a2..9c4c104157c1d10134717db2916fdbba43c27c00 100644 |
--- a/Source/core/platform/Scrollbar.cpp |
+++ b/Source/core/platform/Scrollbar.cpp |
@@ -295,11 +295,8 @@ void Scrollbar::moveThumb(int pos, bool draggingDocument) |
delta = pos - m_documentDragPos; |
m_draggingDocument = true; |
FloatPoint currentPosition = m_scrollableArea->scrollAnimator()->currentPosition(); |
- int destinationPosition = (m_orientation == HorizontalScrollbar ? currentPosition.x() : currentPosition.y()) + delta; |
- if (delta > 0) |
- destinationPosition = min(destinationPosition + delta, maximum()); |
- else if (delta < 0) |
- destinationPosition = max(destinationPosition + delta, 0); |
+ float destinationPosition = (m_orientation == HorizontalScrollbar ? currentPosition.x() : currentPosition.y()) + delta; |
+ destinationPosition = m_scrollableArea->clampScrollPosition(m_orientation, destinationPosition); |
m_scrollableArea->scrollToOffsetWithoutAnimation(m_orientation, destinationPosition); |
m_documentDragPos = pos; |
return; |
@@ -314,14 +311,15 @@ void Scrollbar::moveThumb(int pos, bool draggingDocument) |
int thumbPos = theme()->thumbPosition(this); |
int thumbLen = theme()->thumbLength(this); |
int trackLen = theme()->trackLength(this); |
- int maxPos = trackLen - thumbLen; |
if (delta > 0) |
- delta = min(maxPos - thumbPos, delta); |
+ delta = min(trackLen - thumbLen - thumbPos, delta); |
else if (delta < 0) |
delta = max(-thumbPos, delta); |
+ float minPos = m_scrollableArea->minimumScrollPosition(m_orientation); |
+ float maxPos = m_scrollableArea->maximumScrollPosition(m_orientation); |
if (delta) { |
- float newPosition = static_cast<float>(thumbPos + delta) * maximum() / (trackLen - thumbLen); |
+ float newPosition = static_cast<float>(thumbPos + delta) * (maxPos - minPos) / (trackLen - thumbLen) + minPos; |
m_scrollableArea->scrollToOffsetWithoutAnimation(m_orientation, newPosition); |
} |
} |