| Index: Source/platform/scroll/ScrollbarThemeOverlay.cpp
|
| diff --git a/Source/platform/scroll/ScrollbarThemeOverlay.cpp b/Source/platform/scroll/ScrollbarThemeOverlay.cpp
|
| index a8a9556d992fea9853b8a3c861fbfe6e48233192..39ad2deedbb340ecb917d0233b9b5762e19bd6e3 100644
|
| --- a/Source/platform/scroll/ScrollbarThemeOverlay.cpp
|
| +++ b/Source/platform/scroll/ScrollbarThemeOverlay.cpp
|
| @@ -36,6 +36,12 @@
|
|
|
| #include <algorithm>
|
|
|
| +namespace {
|
| +
|
| +const int kDefaultOverlayScrollbarMinThumbThickness = 9;
|
| +
|
| +} // namespace
|
| +
|
| namespace blink {
|
|
|
| ScrollbarThemeOverlay::ScrollbarThemeOverlay(int thumbThickness, int scrollbarMargin, HitTestBehavior allowHitTest, Color color)
|
| @@ -136,19 +142,56 @@ void ScrollbarThemeOverlay::paintThumb(GraphicsContext* context, ScrollbarThemeC
|
| return;
|
| }
|
|
|
| - blink::WebThemeEngine::State state = blink::WebThemeEngine::StateNormal;
|
| - if (scrollbar->pressedPart() == ThumbPart)
|
| - state = blink::WebThemeEngine::StatePressed;
|
| - else if (scrollbar->hoveredPart() == ThumbPart)
|
| - state = blink::WebThemeEngine::StateHover;
|
| -
|
| blink::WebCanvas* canvas = context->canvas();
|
|
|
| blink::WebThemeEngine::Part part = blink::WebThemeEngine::PartScrollbarHorizontalThumb;
|
| if (scrollbar->orientation() == VerticalScrollbar)
|
| part = blink::WebThemeEngine::PartScrollbarVerticalThumb;
|
|
|
| - blink::Platform::current()->themeEngine()->paint(canvas, part, state, blink::WebRect(rect), 0);
|
| + if (scrollbar->isDuringStateTransitionAnimation()) {
|
| + // Paint in between of two states. First get information from ScrollAnimator
|
| + double progress = scrollbar->stateTransitionProgress();
|
| + blink::WebThemeEngine::State startState = scrollbar->stateTransitionStartState();
|
| + blink::WebThemeEngine::State endState = scrollbar->stateTransitionEndState();
|
| + double thumbThicknessChanged = progress * (m_thumbThickness - kDefaultOverlayScrollbarMinThumbThickness);
|
| + double disThumbThickness = m_thumbThickness - thumbThicknessChanged;
|
| + int displayedThumbThickness = static_cast<int>(disThumbThickness);
|
| + if (startState == blink::WebThemeEngine::StateNormal)
|
| + displayedThumbThickness = kDefaultOverlayScrollbarMinThumbThickness + thumbThicknessChanged;
|
| +
|
| + if (scrollbar->orientation() == HorizontalScrollbar) {
|
| + thumbRect.setY(thumbRect.y() + (m_thumbThickness - displayedThumbThickness));
|
| + thumbRect.setHeight(displayedThumbThickness);
|
| + } else {
|
| + thumbRect.setWidth(displayedThumbThickness);
|
| + if (!scrollbar->isLeftSideVerticalScrollbar())
|
| + thumbRect.setX(thumbRect.x() + (m_thumbThickness - displayedThumbThickness));
|
| + }
|
| +
|
| + // int testThumbThickness = static_cast<int>(displayedThumbThickness);
|
| + // thumbRect.setWidth(1);
|
| +
|
| + blink::Platform::current()->themeEngine()->paintStateTransition(canvas, part, startState, endState, progress, blink::WebRect(thumbRect));
|
| + return;
|
| + }
|
| +
|
| + blink::WebThemeEngine::State state = blink::WebThemeEngine::StateNormal;
|
| + if (scrollbar->pressedPart() == ThumbPart) {
|
| + state = blink::WebThemeEngine::StatePressed;
|
| + } else if (scrollbar->hoveredPart() == ThumbPart) {
|
| + state = blink::WebThemeEngine::StateHover;
|
| + } else {
|
| + if (scrollbar->orientation() == HorizontalScrollbar) {
|
| + thumbRect.setY(thumbRect.y() + (m_thumbThickness - kDefaultOverlayScrollbarMinThumbThickness));
|
| + thumbRect.setHeight(kDefaultOverlayScrollbarMinThumbThickness);
|
| + } else {
|
| + thumbRect.setWidth(kDefaultOverlayScrollbarMinThumbThickness);
|
| + if (!scrollbar->isLeftSideVerticalScrollbar())
|
| + thumbRect.setX(thumbRect.x() + (m_thumbThickness - kDefaultOverlayScrollbarMinThumbThickness));
|
| + }
|
| + }
|
| +
|
| + blink::Platform::current()->themeEngine()->paint(canvas, part, state, blink::WebRect(thumbRect), 0);
|
| }
|
|
|
| ScrollbarPart ScrollbarThemeOverlay::hitTest(ScrollbarThemeClient* scrollbar, const IntPoint& position)
|
|
|