10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This file is part of the WebKit project.
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2006, 2007 Apple Computer, Inc.
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2007-2009 Torch Mobile, Inc.
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This library is free software; you can redistribute it and/or
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modify it under the terms of the GNU Library General Public
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * License as published by the Free Software Foundation; either
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * version 2 of the License, or (at your option) any later version.
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This library is distributed in the hope that it will be useful,
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Library General Public License for more details.
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * You should have received a copy of the GNU Library General Public License
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Boston, MA 02110-1301, USA.
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "config.h"
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderThemeWince.h"
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CSSStyleSheet.h"
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CSSValueKeywords.h"
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "Document.h"
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "GraphicsContext.h"
31d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "NotImplemented.h"
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(VIDEO)
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "HTMLMediaElement.h"
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <windows.h>
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * The following constants are used to determine how a widget is drawn using
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Windows' Theme API. For more information on theme parts and states see
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/topics/partsandstates.asp
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define THEME_COLOR 204
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define THEME_FONT  210
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Generic state constants
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define TS_NORMAL    1
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define TS_HOVER     2
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define TS_ACTIVE    3
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define TS_DISABLED  4
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define TS_FOCUSED   5
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Button constants
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define BP_BUTTON    1
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define BP_RADIO     2
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define BP_CHECKBOX  3
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Textfield constants
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define TFP_TEXTFIELD 1
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define TFS_READONLY  6
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef HANDLE (WINAPI*openThemeDataPtr)(HWND hwnd, LPCWSTR pszClassList);
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef HRESULT (WINAPI*closeThemeDataPtr)(HANDLE hTheme);
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef HRESULT (WINAPI*drawThemeBackgroundPtr)(HANDLE hTheme, HDC hdc, int iPartId,
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                          int iStateId, const RECT *pRect,
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                          const RECT* pClipRect);
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef HRESULT (WINAPI*drawThemeEdgePtr)(HANDLE hTheme, HDC hdc, int iPartId,
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                          int iStateId, const RECT *pRect,
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                          unsigned uEdge, unsigned uFlags,
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                          const RECT* pClipRect);
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef HRESULT (WINAPI*getThemeContentRectPtr)(HANDLE hTheme, HDC hdc, int iPartId,
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                          int iStateId, const RECT* pRect,
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                          RECT* pContentRect);
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef HRESULT (WINAPI*getThemePartSizePtr)(HANDLE hTheme, HDC hdc, int iPartId,
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                       int iStateId, RECT* prc, int ts,
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                       SIZE* psz);
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef HRESULT (WINAPI*getThemeSysFontPtr)(HANDLE hTheme, int iFontId, OUT LOGFONT* pFont);
780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef HRESULT (WINAPI*getThemeColorPtr)(HANDLE hTheme, HDC hdc, int iPartId,
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                                   int iStateId, int iPropId, OUT COLORREF* pFont);
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore {
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const int dropDownButtonWidth = 17;
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic const int trackWidth = 4;
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderThemeWince::create()
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return adoptRef(new RenderThemeWince);
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page)
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static RenderTheme* winceTheme = RenderThemeWince::create().releaseRef();
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return winceTheme;
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochRenderThemeWince::RenderThemeWince()
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochRenderThemeWince::~RenderThemeWince()
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochColor RenderThemeWince::platformActiveSelectionBackgroundColor() const
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    COLORREF color = GetSysColor(COLOR_HIGHLIGHT);
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return Color(GetRValue(color), GetGValue(color), GetBValue(color), 255);
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochColor RenderThemeWince::platformInactiveSelectionBackgroundColor() const
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    COLORREF color = GetSysColor(COLOR_GRAYTEXT);
1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return Color(GetRValue(color), GetGValue(color), GetBValue(color), 255);
1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochColor RenderThemeWince::platformActiveSelectionForegroundColor() const
1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    COLORREF color = GetSysColor(COLOR_HIGHLIGHTTEXT);
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return Color(GetRValue(color), GetGValue(color), GetBValue(color), 255);
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochColor RenderThemeWince::platformInactiveSelectionForegroundColor() const
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return Color::white;
1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::supportsFocus(ControlPart appearance) const
1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    switch (appearance) {
1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case PushButtonPart:
1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case ButtonPart:
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case TextFieldPart:
1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case TextAreaPart:
1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return true;
1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    default:
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return false;
1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return false;
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::supportsFocusRing(const RenderStyle *style) const
1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return supportsFocus(style->appearance());
1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochunsigned RenderThemeWince::determineClassicState(RenderObject* o)
1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned result = 0;
1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!isEnabled(o) || isReadOnlyControl(o))
1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result = DFCS_INACTIVE;
1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    else if (isPressed(o)) // Active supersedes hover
1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result = DFCS_PUSHED;
1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (isChecked(o))
1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result |= DFCS_CHECKED;
1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return result;
1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochThemeData RenderThemeWince::getThemeData(RenderObject* o)
1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ThemeData result;
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    switch (o->style()->appearance()) {
1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case PushButtonPart:
1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case ButtonPart:
1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result.m_part = BP_BUTTON;
1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result.m_classicState = DFCS_BUTTONPUSH;
1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        break;
1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CheckboxPart:
1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result.m_part = BP_CHECKBOX;
1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result.m_classicState = DFCS_BUTTONCHECK;
1730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        break;
1740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case RadioPart:
1750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result.m_part = BP_RADIO;
1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result.m_classicState = DFCS_BUTTONRADIO;
1770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        break;
1780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case ListboxPart:
1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case MenulistPart:
1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case TextFieldPart:
1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case TextAreaPart:
1820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        result.m_part = TFP_TEXTFIELD;
1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        break;
1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
1850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    result.m_classicState |= determineClassicState(o);
1870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return result;
1890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
1920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Get the correct theme data for a button
1940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ThemeData themeData = getThemeData(o);
1950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Now paint the button.
1970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    i.context->drawFrameControl(r, DFC_BUTTON, themeData.m_classicState);
1980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (isFocused(o)) {
1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (themeData.m_part == BP_BUTTON) {
2000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            IntRect focusRect(r);
2010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            focusRect.inflate(-2);
2020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            i.context->drawFocusRect(focusRect);
2030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        } else
2040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            i.context->drawFocusRect(r);
2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
2060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return false;
2080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::setCheckboxSize(RenderStyle* style) const
2110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // If the width and height are both specified, then we have nothing to do.
2130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto())
2140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return;
2150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // FIXME:  A hard-coded size of 13 is used.  This is wrong but necessary for now.  It matches Firefox.
2170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // At different DPI settings on Windows, querying the theme gives you a larger size that accounts for
2180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // the higher DPI.  Until our entire engine honors a DPI setting other than 96, we can't rely on the theme's
2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // metrics.
2200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (style->width().isIntrinsicOrAuto())
2210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        style->setWidth(Length(13, Fixed));
2220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (style->height().isAuto())
2230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        style->setHeight(Length(13, Fixed));
2240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintTextField(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Get the correct theme data for a textfield
2290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ThemeData themeData = getThemeData(o);
2300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Now paint the text field.
2320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    i.context->paintTextField(r, themeData.m_classicState);
2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return false;
2350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustMenuListStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->resetBorder();
2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    adjustMenuListButtonStyle(selector, style, e);
2410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintMenuList(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
2440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintTextField(o, i, r);
2460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintMenuListButton(o, i, r);
2470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return true;
2480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintMenuListButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
2510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntRect buttonRect(r.right() - dropDownButtonWidth - 1, r.y(), dropDownButtonWidth, r.height());
2530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    buttonRect.inflateY(-1);
2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    i.context->drawFrameControl(buttonRect, DFC_SCROLL, DFCS_SCROLLCOMBOBOX | determineClassicState(o));
2550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return true;
2560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::systemFont(int propId, FontDescription& fontDescription) const
2590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    notImplemented();
2610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::themeChanged()
2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochString RenderThemeWince::extraDefaultStyleSheet()
2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    notImplemented();
2700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return String();
2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochString RenderThemeWince::extraQuirksStyleSheet()
2740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    notImplemented();
2760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return String();
2770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::supportsHover(const RenderStyle*) const
2800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return false;
2820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Map a CSSValue* system color to an index understood by GetSysColor
2850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic int cssValueIdToSysColorIndex(int cssValueId)
2860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    switch (cssValueId) {
2880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueActiveborder: return COLOR_ACTIVEBORDER;
2890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueActivecaption: return COLOR_ACTIVECAPTION;
2900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueAppworkspace: return COLOR_APPWORKSPACE;
2910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueBackground: return COLOR_BACKGROUND;
2920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueButtonface: return COLOR_BTNFACE;
2930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueButtonhighlight: return COLOR_BTNHIGHLIGHT;
2940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueButtonshadow: return COLOR_BTNSHADOW;
2950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueButtontext: return COLOR_BTNTEXT;
2960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueCaptiontext: return COLOR_CAPTIONTEXT;
2970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueGraytext: return COLOR_GRAYTEXT;
2980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueHighlight: return COLOR_HIGHLIGHT;
2990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueHighlighttext: return COLOR_HIGHLIGHTTEXT;
3000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueInactiveborder: return COLOR_INACTIVEBORDER;
3010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueInactivecaption: return COLOR_INACTIVECAPTION;
3020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueInactivecaptiontext: return COLOR_INACTIVECAPTIONTEXT;
3030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueInfobackground: return COLOR_INFOBK;
3040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueInfotext: return COLOR_INFOTEXT;
3050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueMenu: return COLOR_MENU;
3060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueMenutext: return COLOR_MENUTEXT;
3070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueScrollbar: return COLOR_SCROLLBAR;
3080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueThreeddarkshadow: return COLOR_3DDKSHADOW;
3090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueThreedface: return COLOR_3DFACE;
3100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueThreedhighlight: return COLOR_3DHIGHLIGHT;
3110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueThreedlightshadow: return COLOR_3DLIGHT;
3120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueThreedshadow: return COLOR_3DSHADOW;
3130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueWindow: return COLOR_WINDOW;
3140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueWindowframe: return COLOR_WINDOWFRAME;
3150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    case CSSValueWindowtext: return COLOR_WINDOWTEXT;
3160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    default: return -1; // Unsupported CSSValue
3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochColor RenderThemeWince::systemColor(int cssValueId) const
3210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    int sysColorIndex = cssValueIdToSysColorIndex(cssValueId);
3230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (sysColorIndex == -1)
3240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return RenderTheme::systemColor(cssValueId);
3250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    COLORREF color = GetSysColor(sysColorIndex);
3270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return Color(GetRValue(color), GetGValue(color), GetBValue(color));
3280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochconst int sliderThumbWidth = 7;
3310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochconst int sliderThumbHeight = 15;
3320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustSliderThumbSize(RenderObject* o) const
3340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (o->style()->appearance() == SliderThumbVerticalPart) {
3360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        o->style()->setWidth(Length(sliderThumbHeight, Fixed));
3370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        o->style()->setHeight(Length(sliderThumbWidth, Fixed));
3380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    } else if (o->style()->appearance() == SliderThumbHorizontalPart) {
3390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        o->style()->setWidth(Length(sliderThumbWidth, Fixed));
3400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        o->style()->setHeight(Length(sliderThumbHeight, Fixed));
3410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
3420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if 0
3450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustButtonInnerStyle(RenderStyle* style) const
3460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // This inner padding matches Firefox.
3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingTop(Length(1, Fixed));
3490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingRight(Length(3, Fixed));
3500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingBottom(Length(1, Fixed));
3510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingLeft(Length(3, Fixed));
3520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustSearchFieldStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Override padding size to match AppKit text positioning.
3570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const int padding = 1;
3580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingLeft(Length(padding, Fixed));
3590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingRight(Length(padding, Fixed));
3600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingTop(Length(padding, Fixed));
3610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingBottom(Length(padding, Fixed));
3620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
3640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintSearchField(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
3660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return paintTextField(o, i, r);
3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintSearchFieldCancelButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
3710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Color buttonColor = (o->node() && o->node()->active()) ? Color(138, 138, 138) : Color(186, 186, 186);
3730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntSize cancelSize(10, 10);
3750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntSize cancelRadius(cancelSize.width() / 2, cancelSize.height() / 2);
3760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    int x = r.x() + (r.width() - cancelSize.width()) / 2;
3770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    int y = r.y() + (r.height() - cancelSize.height()) / 2 + 1;
3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntRect cancelBounds(IntPoint(x, y), cancelSize);
3790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->save();
3800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->addRoundedRectClip(cancelBounds, cancelRadius, cancelRadius, cancelRadius, cancelRadius);
381d0825bca7fe65beaee391d30da42e937db621564Steve Block    paintInfo.context->fillRect(cancelBounds, buttonColor, DeviceColorSpace);
3820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Draw the 'x'
3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntSize xSize(3, 3);
3850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntRect xBounds(cancelBounds.location() + IntSize(3, 3), xSize);
386d0825bca7fe65beaee391d30da42e937db621564Steve Block    paintInfo.context->setStrokeColor(Color::white, DeviceColorSpace);
3870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->drawLine(xBounds.location(),  xBounds.location() + xBounds.size());
3880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->drawLine(IntPoint(xBounds.right(), xBounds.y()),  IntPoint(xBounds.x(), xBounds.bottom()));
3890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->restore();
3910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return false;
3920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustSearchFieldCancelButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
3950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntSize cancelSize(13, 11);
3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setWidth(Length(cancelSize.width(), Fixed));
3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setHeight(Length(cancelSize.height(), Fixed));
3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustSearchFieldDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
4020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntSize emptySize(1, 11);
4040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setWidth(Length(emptySize.width(), Fixed));
4050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setHeight(Length(emptySize.height(), Fixed));
4060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustSearchFieldResultsDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
4090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntSize magnifierSize(15, 11);
4110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setWidth(Length(magnifierSize.width(), Fixed));
4120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setHeight(Length(magnifierSize.height(), Fixed));
4130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintSearchFieldResultsDecoration(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
4160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    notImplemented();
4180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return false;
4190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustSearchFieldResultsButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntSize magnifierSize(15, 11);
4240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setWidth(Length(magnifierSize.width(), Fixed));
4250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setHeight(Length(magnifierSize.height(), Fixed));
4260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintSearchFieldResultsButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintSearchFieldResultsDecoration(o, paintInfo, r);
4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return false;
4320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustMenuListButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
4350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // These are the paddings needed to place the text correctly in the <select> box
4370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const int dropDownBoxPaddingTop    = 2;
4380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const int dropDownBoxPaddingRight  = style->direction() == LTR ? 4 + dropDownButtonWidth : 4;
4390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const int dropDownBoxPaddingBottom = 2;
4400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const int dropDownBoxPaddingLeft   = style->direction() == LTR ? 4 : 4 + dropDownButtonWidth;
4410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // The <select> box must be at least 12px high for the button to render nicely on Windows
4420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const int dropDownBoxMinHeight = 12;
4430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Position the text correctly within the select box and make the box wide enough to fit the dropdown button
4450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingTop(Length(dropDownBoxPaddingTop, Fixed));
4460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingRight(Length(dropDownBoxPaddingRight, Fixed));
4470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingBottom(Length(dropDownBoxPaddingBottom, Fixed));
4480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingLeft(Length(dropDownBoxPaddingLeft, Fixed));
4490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Height is locked to auto
4510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setHeight(Length(Auto));
4520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Calculate our min-height
4540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    int minHeight = style->font().height();
4550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    minHeight = max(minHeight, dropDownBoxMinHeight);
4560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setMinHeight(Length(minHeight, Fixed));
4580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // White-space is locked to pre
4600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setWhiteSpace(PRE);
4610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    DWORD colorMenu = GetSysColor(COLOR_MENU);
4630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    DWORD colorMenuText = GetSysColor(COLOR_MENUTEXT);
4640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Color bgColor(GetRValue(colorMenu), GetGValue(colorMenu), GetBValue(colorMenu), 255);
4650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Color textColor(GetRValue(colorMenuText), GetGValue(colorMenuText), GetBValue(colorMenuText), 255);
4660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (bgColor == textColor)
4670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        textColor.setRGB((~bgColor.rgb()) | 0xFF000000);
4680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->clearBackgroundLayers();
4690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->accessBackgroundLayers()->setClip(ContentFillBox);
4700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setBackgroundColor(bgColor);
4710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setColor(textColor);
4720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(VIDEO)
4750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Attempt to retrieve a HTMLMediaElement from a Node. Returns 0 if one cannot be found.
4760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic HTMLMediaElement* mediaElementParent(Node* node)
4770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!node)
4790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return 0;
4800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Node* mediaNode = node->shadowAncestorNode();
4810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!mediaNode || (!mediaNode->hasTagName(HTMLNames::videoTag) && !mediaNode->hasTagName(HTMLNames::audioTag)))
4820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return 0;
4830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return static_cast<HTMLMediaElement*>(mediaNode);
4850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
4870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintSliderTrack(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
4890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool rc = RenderTheme::paintSliderTrack(o, i, r);
4910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntPoint left = IntPoint(r.x() + 2, (r.y() + r.bottom()) / 2);
4920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    i.context->save();
493d0825bca7fe65beaee391d30da42e937db621564Steve Block    i.context->setStrokeColor(Color::gray, DeviceColorSpace);
494d0825bca7fe65beaee391d30da42e937db621564Steve Block    i.context->setFillColor(Color::gray, DeviceColorSpace);
4950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    i.context->fillRect(r);
4960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(VIDEO)
497d0825bca7fe65beaee391d30da42e937db621564Steve Block    HTMLMediaElement* mediaElement = mediaElementParent(o->node());
4980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (mediaElement) {
4990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        i.context->setStrokeColor(Color(0, 0xff, 0));
5000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        IntPoint right = IntPoint(left.x() + mediaElement->percentLoaded() * (r.right() - r.x() - 4), (r.y() + r.bottom()) / 2);
5010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        i.context->drawLine(left, right);
5020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        left = right;
5030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
5040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
505d0825bca7fe65beaee391d30da42e937db621564Steve Block    i.context->setStrokeColor(Color::black, DeviceColorSpace);
5060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    i.context->drawLine(left, IntPoint(r.right() - 2, left.y()));
5070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    i.context->restore();
5080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return rc;
5090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintSliderThumb(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
5120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool rc = RenderTheme::paintSliderThumb(o, i, r);
5140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    i.context->save();
515d0825bca7fe65beaee391d30da42e937db621564Steve Block    i.context->setStrokeColor(Color::black, DeviceColorSpace);
516d0825bca7fe65beaee391d30da42e937db621564Steve Block    i.context->setFillColor(Color::black, DeviceColorSpace);
5170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(VIDEO)
518d0825bca7fe65beaee391d30da42e937db621564Steve Block    HTMLMediaElement* mediaElement = mediaElementParent(o->node());
5190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (mediaElement) {
5200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        float pt = (mediaElement->currentTime() - mediaElement->startTime()) / mediaElement->duration();
5210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        FloatRect intRect = r;
5220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        intRect.setX(intRect.x() + intRect.width() * pt - 2);
5230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        intRect.setWidth(5);
5240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        i.context->fillRect(intRect);
5250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
5260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
5270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    i.context->restore();
5280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return rc;
5290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochint RenderThemeWince::buttonInternalPaddingLeft() const
5320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return 3;
5340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochint RenderThemeWince::buttonInternalPaddingRight() const
5370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return 3;
5390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochint RenderThemeWince::buttonInternalPaddingTop() const
5420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return 1;
5440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochint RenderThemeWince::buttonInternalPaddingBottom() const
5470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return 1;
5490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderThemeWince::adjustSearchFieldStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
5520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const int padding = 1;
5540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingLeft(Length(padding, Fixed));
5550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingRight(Length(padding, Fixed));
5560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingTop(Length(padding, Fixed));
5570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    style->setPaddingBottom(Length(padding, Fixed));
5580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(VIDEO)
5610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintMediaFullscreenButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
5630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool rc = paintButton(o, paintInfo, r);
5650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatRect imRect = r;
5660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    imRect.inflate(-2);
5670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->save();
5680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setStrokeColor(Color::black);
5690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setFillColor(Color::gray);
5700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->fillRect(imRect);
5710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->restore();
5720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return rc;
5730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintMediaMuteButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
5760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool rc = paintButton(o, paintInfo, r);
578d0825bca7fe65beaee391d30da42e937db621564Steve Block    HTMLMediaElement* mediaElement = mediaElementParent(o->node());
5790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool muted = !mediaElement || mediaElement->muted();
5800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatRect imRect = r;
5810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    imRect.inflate(-2);
5820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->save();
5830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setStrokeColor(Color::black);
5840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setFillColor(Color::black);
5850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatPoint pts[6] = {
5860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        FloatPoint(imRect.x() + 1, imRect.y() + imRect.height() / 3.0),
5870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        FloatPoint(imRect.x() + 1 + imRect.width() / 2.0, imRect.y() + imRect.height() / 3.0),
5880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        FloatPoint(imRect.right() - 1, imRect.y()),
5890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        FloatPoint(imRect.right() - 1, imRect.bottom()),
5900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        FloatPoint(imRect.x() + 1 + imRect.width() / 2.0, imRect.y() + 2.0 * imRect.height() / 3.0),
5910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        FloatPoint(imRect.x() + 1, imRect.y() + 2.0 * imRect.height() / 3.0)
5920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    };
5930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->drawConvexPolygon(6, pts);
5940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (muted)
5950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        paintInfo.context->drawLine(IntPoint(imRect.right(), imRect.y()), IntPoint(imRect.x(), imRect.bottom()));
5960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->restore();
5970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return rc;
5980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintMediaPlayButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
6010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool rc = paintButton(o, paintInfo, r);
6030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatRect imRect = r;
6040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    imRect.inflate(-3);
6050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->save();
6060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setStrokeColor(Color::black);
6070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setFillColor(Color::black);
608d0825bca7fe65beaee391d30da42e937db621564Steve Block    HTMLMediaElement* mediaElement = mediaElementParent(o->node());
6090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool paused = !mediaElement || mediaElement->paused();
6100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (paused) {
6110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        float width = imRect.width();
6120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        imRect.setWidth(width / 3.0);
6130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        paintInfo.context->fillRect(imRect);
6140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        imRect.move(2.0 * width / 3.0, 0);
6150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        paintInfo.context->fillRect(imRect);
6160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    } else {
6170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        FloatPoint pts[3] = { FloatPoint(imRect.x(), imRect.y()), FloatPoint(imRect.right(), (imRect.y() + imRect.bottom()) / 2.0), FloatPoint(imRect.x(), imRect.bottom()) };
6180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        paintInfo.context->drawConvexPolygon(3, pts);
6190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
6200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->restore();
6210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return rc;
6220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintMediaSeekBackButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
6250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool rc = paintButton(o, paintInfo, r);
6270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatRect imRect = r;
6280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    imRect.inflate(-3);
6290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatPoint pts[3] = { FloatPoint((imRect.x() + imRect.right()) / 2.0, imRect.y()), FloatPoint(imRect.x(), (imRect.y() + imRect.bottom()) / 2.0), FloatPoint((imRect.x() + imRect.right()) / 2.0, imRect.bottom()) };
6300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatPoint pts2[3] = { FloatPoint(imRect.right(), imRect.y()), FloatPoint((imRect.x() + imRect.right()) / 2.0, (imRect.y() + imRect.bottom()) / 2.0), FloatPoint(imRect.right(), imRect.bottom()) };
6310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->save();
6320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setStrokeColor(Color::black);
6330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setFillColor(Color::black);
6340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->drawConvexPolygon(3, pts);
6350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->drawConvexPolygon(3, pts2);
6360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->restore();
6370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return rc;
6380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintMediaSeekForwardButton(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
6410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool rc = paintButton(o, paintInfo, r);
6430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatRect imRect = r;
6440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    imRect.inflate(-3);
6450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatPoint pts[3] = { FloatPoint(imRect.x(), imRect.y()), FloatPoint((imRect.x() + imRect.right()) / 2.0, (imRect.y() + imRect.bottom()) / 2.0), FloatPoint(imRect.x(), imRect.bottom()) };
6460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    FloatPoint pts2[3] = { FloatPoint((imRect.x() + imRect.right()) / 2.0, imRect.y()), FloatPoint(imRect.right(), (imRect.y() + imRect.bottom()) / 2.0), FloatPoint((imRect.x() + imRect.right()) / 2.0, imRect.bottom()) };
6470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->save();
6480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setStrokeColor(Color::black);
6490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->setFillColor(Color::black);
6500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->drawConvexPolygon(3, pts);
6510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->drawConvexPolygon(3, pts2);
6520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paintInfo.context->restore();
6530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return rc;
6540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintMediaSliderTrack(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
6570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return paintSliderTrack(o, paintInfo, r);
6590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeWince::paintMediaSliderThumb(RenderObject* o, const RenderObject::PaintInfo& paintInfo, const IntRect& r)
6620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return paintSliderThumb(o, paintInfo, r);
6640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
6660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
669