| Index: Source/core/platform/ScrollbarThemeWin.cpp
|
| diff --git a/Source/core/platform/ScrollbarThemeWin.cpp b/Source/core/platform/ScrollbarThemeWin.cpp
|
| deleted file mode 100644
|
| index 8814377ddef110c6e4bbeee16af4adab6a75128f..0000000000000000000000000000000000000000
|
| --- a/Source/core/platform/ScrollbarThemeWin.cpp
|
| +++ /dev/null
|
| @@ -1,256 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2008 Apple Inc. All Rights Reserved.
|
| - * Copyright (C) 2008, 2009 Google Inc.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
|
| - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
|
| - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "config.h"
|
| -#include "core/platform/ScrollbarThemeWin.h"
|
| -
|
| -#include <windows.h>
|
| -#include <vsstyle.h>
|
| -
|
| -#include "core/platform/graphics/GraphicsContext.h"
|
| -#include "platform/LayoutTestSupport.h"
|
| -#include "platform/PlatformMouseEvent.h"
|
| -#include "platform/scroll/ScrollbarThemeClient.h"
|
| -#include "platform/win/SystemInfo.h"
|
| -#include "public/platform/Platform.h"
|
| -#include "public/platform/WebRect.h"
|
| -#include "public/platform/win/WebThemeEngine.h"
|
| -
|
| -namespace WebCore {
|
| -
|
| -ScrollbarTheme* ScrollbarTheme::nativeTheme()
|
| -{
|
| - static ScrollbarThemeWin theme;
|
| - return &theme;
|
| -}
|
| -
|
| -// The scrollbar size in DumpRenderTree on the Mac - so we can match their
|
| -// layout results. Entries are for regular, small, and mini scrollbars.
|
| -// Metrics obtained using [NSScroller scrollerWidthForControlSize:]
|
| -static const int kMacScrollbarSize[3] = { 15, 11, 15 };
|
| -
|
| -// Constants used to figure the drag rect outside which we should snap the
|
| -// scrollbar thumb back to its origin. These calculations are based on
|
| -// observing the behavior of the MSVC8 main window scrollbar + some
|
| -// guessing/extrapolation.
|
| -static const int kOffEndMultiplier = 3;
|
| -static const int kOffSideMultiplier = 8;
|
| -
|
| -int ScrollbarThemeWin::scrollbarThickness(ScrollbarControlSize controlSize)
|
| -{
|
| - static int thickness;
|
| - if (!thickness) {
|
| - if (isRunningLayoutTest())
|
| - return kMacScrollbarSize[controlSize];
|
| - thickness = IntSize(blink::Platform::current()->themeEngine()->getSize(SBP_ARROWBTN)).width();
|
| - }
|
| - return thickness;
|
| -}
|
| -
|
| -bool ScrollbarThemeWin::invalidateOnMouseEnterExit()
|
| -{
|
| - return isWindowsVistaOrGreater();
|
| -}
|
| -
|
| -bool ScrollbarThemeWin::shouldSnapBackToDragOrigin(ScrollbarThemeClient* scrollbar, const PlatformMouseEvent& evt)
|
| -{
|
| - // Find the rect within which we shouldn't snap, by expanding the track rect
|
| - // in both dimensions.
|
| - IntRect rect = trackRect(scrollbar);
|
| - const bool horz = scrollbar->orientation() == HorizontalScrollbar;
|
| - const int thickness = scrollbarThickness(scrollbar->controlSize());
|
| - rect.inflateX((horz ? kOffEndMultiplier : kOffSideMultiplier) * thickness);
|
| - rect.inflateY((horz ? kOffSideMultiplier : kOffEndMultiplier) * thickness);
|
| -
|
| - // Convert the event to local coordinates.
|
| - IntPoint mousePosition = scrollbar->convertFromContainingWindow(evt.position());
|
| - mousePosition.move(scrollbar->x(), scrollbar->y());
|
| -
|
| - // We should snap iff the event is outside our calculated rect.
|
| - return !rect.contains(mousePosition);
|
| -}
|
| -
|
| -void ScrollbarThemeWin::paintTrackPiece(GraphicsContext* gc, ScrollbarThemeClient* scrollbar, const IntRect& rect, ScrollbarPart partType)
|
| -{
|
| - bool horz = scrollbar->orientation() == HorizontalScrollbar;
|
| -
|
| - int partId;
|
| - if (partType == BackTrackPart)
|
| - partId = horz ? SBP_UPPERTRACKHORZ : SBP_UPPERTRACKVERT;
|
| - else
|
| - partId = horz ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT;
|
| -
|
| - IntRect alignRect = trackRect(scrollbar, false);
|
| -
|
| - blink::WebCanvas* canvas = gc->canvas();
|
| - // Draw the track area before/after the thumb on the scroll bar.
|
| - blink::Platform::current()->themeEngine()->paintScrollbarTrack(canvas, partId, getThemeState(scrollbar, partType), getClassicThemeState(scrollbar, partType), blink::WebRect(rect), blink::WebRect(alignRect));
|
| -}
|
| -
|
| -void ScrollbarThemeWin::paintButton(GraphicsContext* gc, ScrollbarThemeClient* scrollbar, const IntRect& rect, ScrollbarPart part)
|
| -{
|
| - bool horz = scrollbar->orientation() == HorizontalScrollbar;
|
| -
|
| - int partId;
|
| - if (part == BackButtonStartPart || part == ForwardButtonStartPart)
|
| - partId = horz ? DFCS_SCROLLLEFT : DFCS_SCROLLUP;
|
| - else
|
| - partId = horz ? DFCS_SCROLLRIGHT : DFCS_SCROLLDOWN;
|
| -
|
| - blink::WebCanvas* canvas = gc->canvas();
|
| - // Draw the thumb (the box you drag in the scroll bar to scroll).
|
| - blink::Platform::current()->themeEngine()->paintScrollbarArrow(canvas, getThemeArrowState(scrollbar, part), partId | getClassicThemeState(scrollbar, part), blink::WebRect(rect));
|
| -}
|
| -
|
| -void ScrollbarThemeWin::paintThumb(GraphicsContext* gc, ScrollbarThemeClient* scrollbar, const IntRect& rect)
|
| -{
|
| - bool horz = scrollbar->orientation() == HorizontalScrollbar;
|
| -
|
| - blink::WebCanvas* canvas = gc->canvas();
|
| - // Draw the thumb (the box you drag in the scroll bar to scroll).
|
| - blink::Platform::current()->themeEngine()->paintScrollbarThumb(canvas, horz ? SBP_THUMBBTNHORZ : SBP_THUMBBTNVERT, getThemeState(scrollbar, ThumbPart), getClassicThemeState(scrollbar, ThumbPart), blink::WebRect(rect));
|
| -
|
| - // Draw the gripper (the three little lines on the thumb).
|
| - blink::Platform::current()->themeEngine()->paintScrollbarThumb(canvas, horz ? SBP_GRIPPERHORZ : SBP_GRIPPERVERT, getThemeState(scrollbar, ThumbPart), getClassicThemeState(scrollbar, ThumbPart), blink::WebRect(rect));
|
| -}
|
| -
|
| -int ScrollbarThemeWin::getThemeState(ScrollbarThemeClient* scrollbar, ScrollbarPart part) const
|
| -{
|
| - // When dragging the thumb, draw thumb pressed and other segments normal
|
| - // regardless of where the cursor actually is. See also four places in
|
| - // getThemeArrowState().
|
| - if (scrollbar->pressedPart() == ThumbPart) {
|
| - if (part == ThumbPart)
|
| - return SCRBS_PRESSED;
|
| - return isWindowsVistaOrGreater() ? SCRBS_HOVER : SCRBS_NORMAL;
|
| - }
|
| - if (!scrollbar->enabled())
|
| - return SCRBS_DISABLED;
|
| - if (scrollbar->hoveredPart() != part || part == BackTrackPart || part == ForwardTrackPart)
|
| - return (scrollbar->hoveredPart() == NoPart || !isWindowsVistaOrGreater()) ? SCRBS_NORMAL : SCRBS_HOVER;
|
| - if (scrollbar->pressedPart() == NoPart)
|
| - return SCRBS_HOT;
|
| - return (scrollbar->pressedPart() == part) ? SCRBS_PRESSED : SCRBS_NORMAL;
|
| -}
|
| -
|
| -int ScrollbarThemeWin::getThemeArrowState(ScrollbarThemeClient* scrollbar, ScrollbarPart part) const
|
| -{
|
| - // We could take advantage of knowing the values in the state enum to write
|
| - // some simpler code, but treating the state enum as a black box seems
|
| - // clearer and more future-proof.
|
| - if (part == BackButtonStartPart || part == ForwardButtonStartPart) {
|
| - if (scrollbar->orientation() == HorizontalScrollbar) {
|
| - if (scrollbar->pressedPart() == ThumbPart)
|
| - return isWindowsVistaOrGreater() ? ABS_LEFTHOVER : ABS_LEFTNORMAL;
|
| - if (!scrollbar->enabled())
|
| - return ABS_LEFTDISABLED;
|
| - if (scrollbar->hoveredPart() != part)
|
| - return ((scrollbar->hoveredPart() == NoPart) || !isWindowsVistaOrGreater()) ? ABS_LEFTNORMAL : ABS_LEFTHOVER;
|
| - if (scrollbar->pressedPart() == NoPart)
|
| - return ABS_LEFTHOT;
|
| - return (scrollbar->pressedPart() == part) ?
|
| - ABS_LEFTPRESSED : ABS_LEFTNORMAL;
|
| - }
|
| - if (scrollbar->pressedPart() == ThumbPart)
|
| - return isWindowsVistaOrGreater() ? ABS_UPHOVER : ABS_UPNORMAL;
|
| - if (!scrollbar->enabled())
|
| - return ABS_UPDISABLED;
|
| - if (scrollbar->hoveredPart() != part)
|
| - return ((scrollbar->hoveredPart() == NoPart) || !isWindowsVistaOrGreater()) ? ABS_UPNORMAL : ABS_UPHOVER;
|
| - if (scrollbar->pressedPart() == NoPart)
|
| - return ABS_UPHOT;
|
| - return (scrollbar->pressedPart() == part) ? ABS_UPPRESSED : ABS_UPNORMAL;
|
| - }
|
| - if (scrollbar->orientation() == HorizontalScrollbar) {
|
| - if (scrollbar->pressedPart() == ThumbPart)
|
| - return isWindowsVistaOrGreater() ? ABS_RIGHTHOVER : ABS_RIGHTNORMAL;
|
| - if (!scrollbar->enabled())
|
| - return ABS_RIGHTDISABLED;
|
| - if (scrollbar->hoveredPart() != part)
|
| - return ((scrollbar->hoveredPart() == NoPart) || !isWindowsVistaOrGreater()) ? ABS_RIGHTNORMAL : ABS_RIGHTHOVER;
|
| - if (scrollbar->pressedPart() == NoPart)
|
| - return ABS_RIGHTHOT;
|
| - return (scrollbar->pressedPart() == part) ? ABS_RIGHTPRESSED : ABS_RIGHTNORMAL;
|
| - }
|
| - if (scrollbar->pressedPart() == ThumbPart)
|
| - return isWindowsVistaOrGreater() ? ABS_DOWNHOVER : ABS_DOWNNORMAL;
|
| - if (!scrollbar->enabled())
|
| - return ABS_DOWNDISABLED;
|
| - if (scrollbar->hoveredPart() != part)
|
| - return ((scrollbar->hoveredPart() == NoPart) || !isWindowsVistaOrGreater()) ? ABS_DOWNNORMAL : ABS_DOWNHOVER;
|
| - if (scrollbar->pressedPart() == NoPart)
|
| - return ABS_DOWNHOT;
|
| - return (scrollbar->pressedPart() == part) ? ABS_DOWNPRESSED : ABS_DOWNNORMAL;
|
| -}
|
| -
|
| -int ScrollbarThemeWin::getClassicThemeState(ScrollbarThemeClient* scrollbar, ScrollbarPart part) const
|
| -{
|
| - // When dragging the thumb, draw the buttons normal even when hovered.
|
| - if (scrollbar->pressedPart() == ThumbPart)
|
| - return 0;
|
| - if (!scrollbar->enabled())
|
| - return DFCS_INACTIVE;
|
| - if (scrollbar->hoveredPart() != part || part == BackTrackPart || part == ForwardTrackPart)
|
| - return 0;
|
| - if (scrollbar->pressedPart() == NoPart)
|
| - return DFCS_HOT;
|
| - return (scrollbar->pressedPart() == part) ? (DFCS_PUSHED | DFCS_FLAT) : 0;
|
| -}
|
| -
|
| -bool ScrollbarThemeWin::shouldCenterOnThumb(ScrollbarThemeClient*, const PlatformMouseEvent& evt)
|
| -{
|
| - return evt.shiftKey() && evt.button() == LeftButton;
|
| -}
|
| -
|
| -IntSize ScrollbarThemeWin::buttonSize(ScrollbarThemeClient* scrollbar)
|
| -{
|
| - // Our desired rect is essentially thickness by thickness.
|
| -
|
| - // Our actual rect will shrink to half the available space when we have < 2
|
| - // times thickness pixels left. This allows the scrollbar to scale down
|
| - // and function even at tiny sizes.
|
| -
|
| - int thickness = scrollbarThickness(scrollbar->controlSize());
|
| -
|
| - // In layout test mode, we force the button "girth" (i.e., the length of
|
| - // the button along the axis of the scrollbar) to be a fixed size.
|
| - // FIXME: This is retarded! scrollbarThickness is already fixed in layout
|
| - // test mode so that should be enough to result in repeatable results, but
|
| - // preserving this hack avoids having to rebaseline pixel tests.
|
| - const int kLayoutTestModeGirth = 17;
|
| - int girth = isRunningLayoutTest() ? kLayoutTestModeGirth : thickness;
|
| -
|
| - if (scrollbar->orientation() == HorizontalScrollbar) {
|
| - int width = scrollbar->width() < 2 * girth ? scrollbar->width() / 2 : girth;
|
| - return IntSize(width, thickness);
|
| - }
|
| -
|
| - int height = scrollbar->height() < 2 * girth ? scrollbar->height() / 2 : girth;
|
| - return IntSize(thickness, height);
|
| -}
|
| -
|
| -
|
| -} // namespace WebCore
|
|
|