diff options
author | Steve Block <steveblock@google.com> | 2011-05-18 13:36:51 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2011-05-24 15:38:28 +0100 |
commit | 2fc2651226baac27029e38c9d6ef883fa32084db (patch) | |
tree | e396d4bf89dcce6ed02071be66212495b1df1dec /Source/WebCore/platform/ScrollAnimator.cpp | |
parent | b3725cedeb43722b3b175aaeff70552e562d2c94 (diff) | |
download | external_webkit-2fc2651226baac27029e38c9d6ef883fa32084db.zip external_webkit-2fc2651226baac27029e38c9d6ef883fa32084db.tar.gz external_webkit-2fc2651226baac27029e38c9d6ef883fa32084db.tar.bz2 |
Merge WebKit at r78450: Initial merge by git.
Change-Id: I6d3e5f1f868ec266a0aafdef66182ddc3f265dc1
Diffstat (limited to 'Source/WebCore/platform/ScrollAnimator.cpp')
-rw-r--r-- | Source/WebCore/platform/ScrollAnimator.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Source/WebCore/platform/ScrollAnimator.cpp b/Source/WebCore/platform/ScrollAnimator.cpp index 428a79d..6fc78e7 100644 --- a/Source/WebCore/platform/ScrollAnimator.cpp +++ b/Source/WebCore/platform/ScrollAnimator.cpp @@ -32,10 +32,13 @@ #include "ScrollAnimator.h" #include "FloatPoint.h" +#include "PlatformWheelEvent.h" #include "ScrollableArea.h" #include <algorithm> #include <wtf/PassOwnPtr.h> +using namespace std; + namespace WebCore { #if !ENABLE(SMOOTH_SCROLLING) @@ -78,6 +81,44 @@ void ScrollAnimator::scrollToOffsetWithoutAnimation(const FloatPoint& offset) } } +void ScrollAnimator::handleWheelEvent(PlatformWheelEvent& e) +{ + Scrollbar* horizontalScrollbar = m_scrollableArea->horizontalScrollbar(); + Scrollbar* verticalScrollbar = m_scrollableArea->verticalScrollbar(); + + // Accept the event if we have a scrollbar in that direction and can still + // scroll any further. + float deltaX = horizontalScrollbar ? e.deltaX() : 0; + float deltaY = verticalScrollbar ? e.deltaY() : 0; + + IntSize maxForwardScrollDelta = m_scrollableArea->maximumScrollPosition() - m_scrollableArea->scrollPosition(); + IntSize maxBackwardScrollDelta = m_scrollableArea->scrollPosition() - m_scrollableArea->minimumScrollPosition(); + if ((deltaX < 0 && maxForwardScrollDelta.width() > 0) + || (deltaX > 0 && maxBackwardScrollDelta.width() > 0) + || (deltaY < 0 && maxForwardScrollDelta.height() > 0) + || (deltaY > 0 && maxBackwardScrollDelta.height() > 0)) { + e.accept(); + if (e.granularity() == ScrollByPageWheelEvent) { + ASSERT(!e.deltaX()); + bool negative = deltaY < 0; + deltaY = max(max(static_cast<float>(m_scrollableArea->visibleHeight()) * Scrollbar::minFractionToStepWhenPaging(), static_cast<float>(m_scrollableArea->visibleHeight() - Scrollbar::maxOverlapBetweenPages())), 1.0f); + if (negative) + deltaY = -deltaY; + } + + if (deltaY) + scroll(VerticalScrollbar, ScrollByPixel, verticalScrollbar->pixelStep(), -deltaY); + if (deltaX) + scroll(HorizontalScrollbar, ScrollByPixel, horizontalScrollbar->pixelStep(), -deltaX); + } +} + +#if ENABLE(GESTURE_EVENTS) +void ScrollAnimator::handleGestureEvent(const PlatformGestureEvent&) +{ +} +#endif + FloatPoint ScrollAnimator::currentPosition() const { return FloatPoint(m_currentPosX, m_currentPosY); |