| Index: Source/platform/scroll/ScrollableArea.cpp
|
| diff --git a/Source/platform/scroll/ScrollableArea.cpp b/Source/platform/scroll/ScrollableArea.cpp
|
| index aa12fe367fb90e3c05540f9a77bfcb9d33823948..9ebb13274c38d958afaa8914af56817d09611a08 100644
|
| --- a/Source/platform/scroll/ScrollableArea.cpp
|
| +++ b/Source/platform/scroll/ScrollableArea.cpp
|
| @@ -34,13 +34,14 @@
|
|
|
| #include "platform/HostWindow.h"
|
| #include "platform/Logging.h"
|
| +#include "platform/TraceEvent.h"
|
| #include "platform/graphics/GraphicsLayer.h"
|
| #include "platform/geometry/FloatPoint.h"
|
| #include "platform/scroll/ProgrammaticScrollAnimator.h"
|
| +#include "platform/scroll/ScrollbarStateTransitionAnimator.h"
|
| #include "platform/scroll/ScrollbarTheme.h"
|
| #include "wtf/PassOwnPtr.h"
|
|
|
| -#include "platform/TraceEvent.h"
|
|
|
| static const int kPixelsPerLineStep = 40;
|
| static const float kMinFractionToStepWhenPaging = 0.875f;
|
| @@ -109,6 +110,39 @@ ProgrammaticScrollAnimator* ScrollableArea::programmaticScrollAnimator() const
|
| return m_animators->programmaticScrollAnimator.get();
|
| }
|
|
|
| +ScrollbarStateTransitionAnimator* ScrollableArea::scrollbarStateTransitionAnimator() const
|
| +{
|
| + if (!m_animators)
|
| + m_animators = adoptPtr(new ScrollableAreaAnimators);
|
| +
|
| + if (!m_animators->scrollbarStateTransitionAnimator)
|
| + m_animators->scrollbarStateTransitionAnimator = ScrollbarStateTransitionAnimator::create(const_cast<ScrollableArea*>(this));
|
| +
|
| + return m_animators->scrollbarStateTransitionAnimator.get();
|
| +}
|
| +
|
| +bool ScrollableArea::isDuringStateTransitionAnimation() const
|
| +{
|
| + return hasOverlayScrollbars() && existingScrollbarStateTransitionAnimator() && existingScrollbarStateTransitionAnimator()->isDuringStateTransitionAnimation();
|
| +}
|
| +
|
| +void ScrollableArea::stateTransitionInProgress()
|
| +{
|
| + if (isDuringStateTransitionAnimation()) {
|
| + double progress = existingScrollbarStateTransitionAnimator()->stateTransitionProgress();
|
| + blink::WebThemeEngine::State startState = existingScrollbarStateTransitionAnimator()->stateTransitionStartState();
|
| + blink::WebThemeEngine::State endState = existingScrollbarStateTransitionAnimator()->stateTransitionEndState();
|
| +
|
| + if (Scrollbar* verticalScrollbar = this->verticalScrollbar()) {
|
| + verticalScrollbar->updateStateTransitionData(startState, endState, progress);
|
| + }
|
| +
|
| + if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar()) {
|
| + horizontalScrollbar->updateStateTransitionData(startState, endState, progress);
|
| + }
|
| + }
|
| +}
|
| +
|
| void ScrollableArea::setScrollOrigin(const IntPoint& origin)
|
| {
|
| if (m_scrollOrigin != origin) {
|
| @@ -301,11 +335,15 @@ void ScrollableArea::mouseMovedInContentArea() const
|
| void ScrollableArea::mouseEnteredScrollbar(Scrollbar* scrollbar) const
|
| {
|
| scrollAnimator()->mouseEnteredScrollbar(scrollbar);
|
| + if (ScrollbarStateTransitionAnimator* animator = scrollbarStateTransitionAnimator())
|
| + animator->mouseEnteredScrollbar(scrollbar);
|
| }
|
|
|
| void ScrollableArea::mouseExitedScrollbar(Scrollbar* scrollbar) const
|
| {
|
| scrollAnimator()->mouseExitedScrollbar(scrollbar);
|
| + if (ScrollbarStateTransitionAnimator* animator = scrollbarStateTransitionAnimator())
|
| + animator->mouseExitedScrollbar(scrollbar);
|
| }
|
|
|
| void ScrollableArea::contentAreaDidShow() const
|
| @@ -442,6 +480,14 @@ void ScrollableArea::cancelProgrammaticScrollAnimation()
|
| programmaticScrollAnimator->cancelAnimation();
|
| }
|
|
|
| +void ScrollableArea::serviceScrollbarAnimations()
|
| +{
|
| + if (ScrollAnimator* scrollAnimator = existingScrollAnimator())
|
| + scrollAnimator->serviceScrollAnimations();
|
| + if (ScrollbarStateTransitionAnimator* animator = existingScrollbarStateTransitionAnimator())
|
| + animator->serviceAnimations();
|
| +}
|
| +
|
| IntRect ScrollableArea::visibleContentRect(IncludeScrollbarsInRect scrollbarInclusion) const
|
| {
|
| int verticalScrollbarWidth = 0;
|
|
|