Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(294)

Unified Diff: Source/WebCore/platform/win/ScrollbarThemeWin.cpp

Issue 13642009: WebCore: Remove PLATFORM(WIN) files we do not use. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/WebCore/platform/win/ScrollbarThemeWin.h ('k') | Source/WebCore/platform/win/SearchPopupMenuWin.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/WebCore/platform/win/ScrollbarThemeWin.cpp
diff --git a/Source/WebCore/platform/win/ScrollbarThemeWin.cpp b/Source/WebCore/platform/win/ScrollbarThemeWin.cpp
deleted file mode 100644
index ed49f2be6ef9b57d95e1648e111b5cc7e4b5abcd..0000000000000000000000000000000000000000
--- a/Source/WebCore/platform/win/ScrollbarThemeWin.cpp
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * 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 "ScrollbarThemeWin.h"
-
-#include "GraphicsContext.h"
-#include "LocalWindowsContext.h"
-#include "PlatformMouseEvent.h"
-#include "Scrollbar.h"
-#include "SoftLinking.h"
-#include "SystemInfo.h"
-
-// Generic state constants
-#define TS_NORMAL 1
-#define TS_HOVER 2
-#define TS_ACTIVE 3
-#define TS_DISABLED 4
-
-#define SP_BUTTON 1
-#define SP_THUMBHOR 2
-#define SP_THUMBVERT 3
-#define SP_TRACKSTARTHOR 4
-#define SP_TRACKENDHOR 5
-#define SP_TRACKSTARTVERT 6
-#define SP_TRACKENDVERT 7
-#define SP_GRIPPERHOR 8
-#define SP_GRIPPERVERT 9
-
-#define TS_UP_BUTTON 0
-#define TS_DOWN_BUTTON 4
-#define TS_LEFT_BUTTON 8
-#define TS_RIGHT_BUTTON 12
-#define TS_UP_BUTTON_HOVER 17
-#define TS_DOWN_BUTTON_HOVER 18
-#define TS_LEFT_BUTTON_HOVER 19
-#define TS_RIGHT_BUTTON_HOVER 20
-
-using namespace std;
-
-namespace WebCore {
-
-static HANDLE scrollbarTheme;
-static bool runningVista;
-
-// FIXME: Refactor the soft-linking code so that it can be shared with RenderThemeWin
-SOFT_LINK_LIBRARY(uxtheme)
-SOFT_LINK(uxtheme, OpenThemeData, HANDLE, WINAPI, (HWND hwnd, LPCWSTR pszClassList), (hwnd, pszClassList))
-SOFT_LINK(uxtheme, CloseThemeData, HRESULT, WINAPI, (HANDLE hTheme), (hTheme))
-SOFT_LINK(uxtheme, DrawThemeBackground, HRESULT, WINAPI, (HANDLE hTheme, HDC hdc, int iPartId, int iStateId, const RECT* pRect, const RECT* pClipRect), (hTheme, hdc, iPartId, iStateId, pRect, pClipRect))
-SOFT_LINK(uxtheme, IsThemeActive, BOOL, WINAPI, (), ())
-SOFT_LINK(uxtheme, IsThemeBackgroundPartiallyTransparent, BOOL, WINAPI, (HANDLE hTheme, int iPartId, int iStateId), (hTheme, iPartId, iStateId))
-
-// 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;
-
-static void checkAndInitScrollbarTheme()
-{
- if (uxthemeLibrary() && !scrollbarTheme && IsThemeActive())
- scrollbarTheme = OpenThemeData(0, L"Scrollbar");
-}
-
-#if !USE(SAFARI_THEME)
-ScrollbarTheme* ScrollbarTheme::nativeTheme()
-{
- static ScrollbarThemeWin winTheme;
- return &winTheme;
-}
-#endif
-
-ScrollbarThemeWin::ScrollbarThemeWin()
-{
- static bool initialized;
- if (!initialized) {
- initialized = true;
- checkAndInitScrollbarTheme();
- runningVista = (windowsVersion() >= WindowsVista);
- }
-}
-
-ScrollbarThemeWin::~ScrollbarThemeWin()
-{
-}
-
-int ScrollbarThemeWin::scrollbarThickness(ScrollbarControlSize)
-{
- static int thickness;
- if (!thickness)
- thickness = ::GetSystemMetrics(SM_CXVSCROLL);
- return thickness;
-}
-
-void ScrollbarThemeWin::themeChanged()
-{
- if (!scrollbarTheme)
- return;
-
- CloseThemeData(scrollbarTheme);
- scrollbarTheme = 0;
-}
-
-bool ScrollbarThemeWin::invalidateOnMouseEnterExit()
-{
- return runningVista;
-}
-
-bool ScrollbarThemeWin::hasThumb(ScrollbarThemeClient* scrollbar)
-{
- return thumbLength(scrollbar) > 0;
-}
-
-IntRect ScrollbarThemeWin::backButtonRect(ScrollbarThemeClient* scrollbar, ScrollbarPart part, bool)
-{
- // Windows just has single arrows.
- if (part == BackButtonEndPart)
- return IntRect();
-
- // Our desired rect is essentially 17x17.
-
- // Our actual rect will shrink to half the available space when
- // we have < 34 pixels left. This allows the scrollbar
- // to scale down and function even at tiny sizes.
- int thickness = scrollbarThickness();
- if (scrollbar->orientation() == HorizontalScrollbar)
- return IntRect(scrollbar->x(), scrollbar->y(),
- scrollbar->width() < 2 * thickness ? scrollbar->width() / 2 : thickness, thickness);
- return IntRect(scrollbar->x(), scrollbar->y(),
- thickness, scrollbar->height() < 2 * thickness ? scrollbar->height() / 2 : thickness);
-}
-
-IntRect ScrollbarThemeWin::forwardButtonRect(ScrollbarThemeClient* scrollbar, ScrollbarPart part, bool)
-{
- // Windows just has single arrows.
- if (part == ForwardButtonStartPart)
- return IntRect();
-
- // Our desired rect is essentially 17x17.
-
- // Our actual rect will shrink to half the available space when
- // we have < 34 pixels left. This allows the scrollbar
- // to scale down and function even at tiny sizes.
- int thickness = scrollbarThickness();
- if (scrollbar->orientation() == HorizontalScrollbar) {
- int w = scrollbar->width() < 2 * thickness ? scrollbar->width() / 2 : thickness;
- return IntRect(scrollbar->x() + scrollbar->width() - w, scrollbar->y(), w, thickness);
- }
-
- int h = scrollbar->height() < 2 * thickness ? scrollbar->height() / 2 : thickness;
- return IntRect(scrollbar->x(), scrollbar->y() + scrollbar->height() - h, thickness, h);
-}
-
-IntRect ScrollbarThemeWin::trackRect(ScrollbarThemeClient* scrollbar, bool)
-{
- int thickness = scrollbarThickness();
- if (scrollbar->orientation() == HorizontalScrollbar) {
- if (scrollbar->width() < 2 * thickness)
- return IntRect();
- return IntRect(scrollbar->x() + thickness, scrollbar->y(), scrollbar->width() - 2 * thickness, thickness);
- }
- if (scrollbar->height() < 2 * thickness)
- return IntRect();
- return IntRect(scrollbar->x(), scrollbar->y() + thickness, thickness, scrollbar->height() - 2 * thickness);
-}
-
-bool ScrollbarThemeWin::shouldCenterOnThumb(ScrollbarThemeClient*, const PlatformMouseEvent& evt)
-{
- return evt.shiftKey() && evt.button() == LeftButton;
-}
-
-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::paintTrackBackground(GraphicsContext* context, ScrollbarThemeClient* scrollbar, const IntRect& rect)
-{
- // Just assume a forward track part. We only paint the track as a single piece when there is no thumb.
- if (!hasThumb(scrollbar))
- paintTrackPiece(context, scrollbar, rect, ForwardTrackPart);
-}
-
-void ScrollbarThemeWin::paintTrackPiece(GraphicsContext* context, ScrollbarThemeClient* scrollbar, const IntRect& rect, ScrollbarPart partType)
-{
- checkAndInitScrollbarTheme();
-
- bool start = partType == BackTrackPart;
- int part;
- if (scrollbar->orientation() == HorizontalScrollbar)
- part = start ? SP_TRACKSTARTHOR : SP_TRACKENDHOR;
- else
- part = start ? SP_TRACKSTARTVERT : SP_TRACKENDVERT;
-
- int state;
- if (!scrollbar->enabled())
- state = TS_DISABLED;
- else if ((scrollbar->hoveredPart() == BackTrackPart && start) ||
- (scrollbar->hoveredPart() == ForwardTrackPart && !start))
- state = (scrollbar->pressedPart() == scrollbar->hoveredPart() ? TS_ACTIVE : TS_HOVER);
- else
- state = TS_NORMAL;
-
- bool alphaBlend = false;
- if (scrollbarTheme)
- alphaBlend = IsThemeBackgroundPartiallyTransparent(scrollbarTheme, part, state);
-
- LocalWindowsContext windowsContext(context, rect, alphaBlend);
- RECT themeRect(rect);
-
- if (scrollbarTheme)
- DrawThemeBackground(scrollbarTheme, windowsContext.hdc(), part, state, &themeRect, 0);
- else {
- DWORD color3DFace = ::GetSysColor(COLOR_3DFACE);
- DWORD colorScrollbar = ::GetSysColor(COLOR_SCROLLBAR);
- DWORD colorWindow = ::GetSysColor(COLOR_WINDOW);
- HDC hdc = windowsContext.hdc();
- if ((color3DFace != colorScrollbar) && (colorWindow != colorScrollbar))
- ::FillRect(hdc, &themeRect, HBRUSH(COLOR_SCROLLBAR+1));
- else {
- static WORD patternBits[8] = { 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55 };
- HBITMAP patternBitmap = ::CreateBitmap(8, 8, 1, 1, patternBits);
- HBRUSH brush = ::CreatePatternBrush(patternBitmap);
- SaveDC(hdc);
- ::SetTextColor(hdc, ::GetSysColor(COLOR_3DHILIGHT));
- ::SetBkColor(hdc, ::GetSysColor(COLOR_3DFACE));
- ::SetBrushOrgEx(hdc, rect.x(), rect.y(), NULL);
- ::SelectObject(hdc, brush);
- ::FillRect(hdc, &themeRect, brush);
- ::RestoreDC(hdc, -1);
- ::DeleteObject(brush);
- ::DeleteObject(patternBitmap);
- }
- }
-
-#if !OS(WINCE)
- if (!alphaBlend && !context->isInTransparencyLayer())
- DIBPixelData::setRGBABitmapAlpha(windowsContext.hdc(), rect, 255);
-#endif
-}
-
-void ScrollbarThemeWin::paintButton(GraphicsContext* context, ScrollbarThemeClient* scrollbar, const IntRect& rect, ScrollbarPart part)
-{
- checkAndInitScrollbarTheme();
-
- bool start = (part == BackButtonStartPart);
- int xpState = 0;
- int classicState = 0;
- if (scrollbar->orientation() == HorizontalScrollbar)
- xpState = start ? TS_LEFT_BUTTON : TS_RIGHT_BUTTON;
- else
- xpState = start ? TS_UP_BUTTON : TS_DOWN_BUTTON;
- classicState = xpState / 4;
-
- if (!scrollbar->enabled()) {
- xpState += TS_DISABLED;
- classicState |= DFCS_INACTIVE;
- } else if ((scrollbar->hoveredPart() == BackButtonStartPart && start) ||
- (scrollbar->hoveredPart() == ForwardButtonEndPart && !start)) {
- if (scrollbar->pressedPart() == scrollbar->hoveredPart()) {
- xpState += TS_ACTIVE;
- classicState |= DFCS_PUSHED;
-#if !OS(WINCE)
- classicState |= DFCS_FLAT;
-#endif
- } else
- xpState += TS_HOVER;
- } else {
- if (scrollbar->hoveredPart() == NoPart || !runningVista)
- xpState += TS_NORMAL;
- else {
- if (scrollbar->orientation() == HorizontalScrollbar)
- xpState = start ? TS_LEFT_BUTTON_HOVER : TS_RIGHT_BUTTON_HOVER;
- else
- xpState = start ? TS_UP_BUTTON_HOVER : TS_DOWN_BUTTON_HOVER;
- }
- }
-
- bool alphaBlend = false;
- if (scrollbarTheme)
- alphaBlend = IsThemeBackgroundPartiallyTransparent(scrollbarTheme, SP_BUTTON, xpState);
-
- LocalWindowsContext windowsContext(context, rect, alphaBlend);
- RECT themeRect(rect);
- if (scrollbarTheme)
- DrawThemeBackground(scrollbarTheme, windowsContext.hdc(), SP_BUTTON, xpState, &themeRect, 0);
- else
- ::DrawFrameControl(windowsContext.hdc(), &themeRect, DFC_SCROLL, classicState);
-
-#if !OS(WINCE)
- if (!alphaBlend && !context->isInTransparencyLayer())
- DIBPixelData::setRGBABitmapAlpha(windowsContext.hdc(), rect, 255);
-#endif
-}
-
-static IntRect gripperRect(int thickness, const IntRect& thumbRect)
-{
- // Center in the thumb.
- int gripperThickness = thickness / 2;
- return IntRect(thumbRect.x() + (thumbRect.width() - gripperThickness) / 2,
- thumbRect.y() + (thumbRect.height() - gripperThickness) / 2,
- gripperThickness, gripperThickness);
-}
-
-static void paintGripper(ScrollbarThemeClient* scrollbar, HDC hdc, const IntRect& rect)
-{
- if (!scrollbarTheme)
- return; // Classic look has no gripper.
-
- int state;
- if (!scrollbar->enabled())
- state = TS_DISABLED;
- else if (scrollbar->pressedPart() == ThumbPart)
- state = TS_ACTIVE; // Thumb always stays active once pressed.
- else if (scrollbar->hoveredPart() == ThumbPart)
- state = TS_HOVER;
- else
- state = TS_NORMAL;
-
- RECT themeRect(rect);
- DrawThemeBackground(scrollbarTheme, hdc, scrollbar->orientation() == HorizontalScrollbar ? SP_GRIPPERHOR : SP_GRIPPERVERT, state, &themeRect, 0);
-}
-
-void ScrollbarThemeWin::paintThumb(GraphicsContext* context, ScrollbarThemeClient* scrollbar, const IntRect& rect)
-{
- checkAndInitScrollbarTheme();
-
- int state;
- if (!scrollbar->enabled())
- state = TS_DISABLED;
- else if (scrollbar->pressedPart() == ThumbPart)
- state = TS_ACTIVE; // Thumb always stays active once pressed.
- else if (scrollbar->hoveredPart() == ThumbPart)
- state = TS_HOVER;
- else
- state = TS_NORMAL;
-
- bool alphaBlend = false;
- if (scrollbarTheme)
- alphaBlend = IsThemeBackgroundPartiallyTransparent(scrollbarTheme, scrollbar->orientation() == HorizontalScrollbar ? SP_THUMBHOR : SP_THUMBVERT, state);
- LocalWindowsContext windowsContext(context, rect, alphaBlend);
- RECT themeRect(rect);
- if (scrollbarTheme) {
- DrawThemeBackground(scrollbarTheme, windowsContext.hdc(), scrollbar->orientation() == HorizontalScrollbar ? SP_THUMBHOR : SP_THUMBVERT, state, &themeRect, 0);
- paintGripper(scrollbar, windowsContext.hdc(), gripperRect(scrollbarThickness(), rect));
- } else
- ::DrawEdge(windowsContext.hdc(), &themeRect, EDGE_RAISED, BF_RECT | BF_MIDDLE);
-
-#if !OS(WINCE)
- if (!alphaBlend && !context->isInTransparencyLayer())
- DIBPixelData::setRGBABitmapAlpha(windowsContext.hdc(), rect, 255);
-#endif
-}
-
-}
-
« no previous file with comments | « Source/WebCore/platform/win/ScrollbarThemeWin.h ('k') | Source/WebCore/platform/win/SearchPopupMenuWin.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698