Chromium Code Reviews| Index: Source/platform/scroll/ScrollableArea.cpp |
| diff --git a/Source/platform/scroll/ScrollableArea.cpp b/Source/platform/scroll/ScrollableArea.cpp |
| index 39ad11ff0d74438e7263719b0dc0e2d76f09fd69..d08622bac6f3295c78a1596227c85045a64f67db 100644 |
| --- a/Source/platform/scroll/ScrollableArea.cpp |
| +++ b/Source/platform/scroll/ScrollableArea.cpp |
| @@ -32,12 +32,13 @@ |
| #include "config.h" |
| #include "platform/scroll/ScrollableArea.h" |
| +#include "platform/TraceEvent.h" |
| #include "platform/graphics/GraphicsLayer.h" |
| #include "platform/geometry/FloatPoint.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; |
| @@ -49,6 +50,7 @@ struct SameSizeAsScrollableArea { |
| unsigned damageBits : 2; |
| IntRect scrollbarDamage[2]; |
| void* pointer; |
| + void* stateTranstionAnimatorPointer; |
|
abarth-chromium
2014/06/16 22:47:04
The point of having this struct here is to keep th
|
| unsigned bitfields : 16; |
| IntPoint origin; |
| }; |
| @@ -95,6 +97,36 @@ ScrollAnimator* ScrollableArea::scrollAnimator() const |
| return m_scrollAnimator.get(); |
| } |
| +ScrollbarStateTransitionAnimator* ScrollableArea::scrollbarStateTransitionAnimator() const |
| +{ |
| + if (hasOverlayScrollbars() && !m_scrollbarStateTransitionAnimator) |
| + m_scrollbarStateTransitionAnimator = ScrollbarStateTransitionAnimator::create(const_cast<ScrollableArea*>(this)); |
| + |
| + return m_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) { |
| @@ -276,11 +308,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 |
| @@ -392,10 +428,12 @@ bool ScrollableArea::hasLayerForScrollCorner() const |
| return layerForScrollCorner(); |
| } |
| -void ScrollableArea::serviceScrollAnimations() |
| +void ScrollableArea::serviceScrollbarAnimations() |
| { |
| if (ScrollAnimator* scrollAnimator = existingScrollAnimator()) |
| scrollAnimator->serviceScrollAnimations(); |
| + if (ScrollbarStateTransitionAnimator* animator = existingScrollbarStateTransitionAnimator()) |
| + animator->serviceAnimations(); |
| } |
| IntRect ScrollableArea::visibleContentRect(IncludeScrollbarsInRect scrollbarInclusion) const |