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