18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007 Apple Inc. 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Kenneth Rohde Christiansen 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02111-1307, USA. 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderThemeWin.h" 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSValueKeywords.h" 265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "Element.h" 275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "Frame.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "GraphicsContext.h" 295abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "LocalWindowsContext.h" 302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "PaintInfo.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSlider.h" 325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "Settings.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SoftLinking.h" 345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "SystemInfo.h" 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "UserAgentStyleSheets.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#if ENABLE(VIDEO) 385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "RenderMediaControls.h" 395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif 405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <tchar.h> 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The following constants are used to determine how a widget is drawn using 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Windows' Theme API. For more information on theme parts and states see 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/topics/partsandstates.asp 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Generic state constants 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TS_NORMAL 1 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TS_HOVER 2 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TS_ACTIVE 3 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TS_DISABLED 4 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TS_FOCUSED 5 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Button constants 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define BP_BUTTON 1 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define BP_RADIO 2 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define BP_CHECKBOX 3 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Textfield constants 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TFP_TEXTFIELD 1 635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#define EP_EDITBORDER_NOSCROLL 6 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TFS_READONLY 6 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian// ComboBox constants (from vsstyle.h) 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define CP_DROPDOWNBUTTON 1 685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#define CP_BORDER 4 695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#define CP_READONLY 5 705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#define CP_DROPDOWNBUTTONRIGHT 6 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// TrackBar (slider) parts 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TKP_TRACK 1 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TKP_TRACKVERT 2 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// TrackBar (slider) thumb parts 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TKP_THUMBBOTTOM 4 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TKP_THUMBTOP 5 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TKP_THUMBLEFT 7 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TKP_THUMBRIGHT 8 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Trackbar (slider) thumb states 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TUS_NORMAL 1 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TUS_HOT 2 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TUS_PRESSED 3 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TUS_FOCUSED 4 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define TUS_DISABLED 5 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// button states 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PBS_NORMAL 1 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PBS_HOT 2 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PBS_PRESSED 3 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PBS_DISABLED 4 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PBS_DEFAULTED 5 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 96a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch// Spin button parts 97a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define SPNP_UP 1 98a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define SPNP_DOWN 2 99a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 100a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch// Spin button states 101a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define DNS_NORMAL 1 102a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define DNS_HOT 2 103a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define DNS_PRESSED 3 104a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define DNS_DISABLED 4 105a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define UPS_NORMAL 1 106a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define UPS_HOT 2 107a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define UPS_PRESSED 3 108a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#define UPS_DISABLED 4 109a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 110a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSOFT_LINK_LIBRARY(uxtheme) 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSOFT_LINK(uxtheme, OpenThemeData, HANDLE, WINAPI, (HWND hwnd, LPCWSTR pszClassList), (hwnd, pszClassList)) 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSOFT_LINK(uxtheme, CloseThemeData, HRESULT, WINAPI, (HANDLE hTheme), (hTheme)) 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSOFT_LINK(uxtheme, DrawThemeBackground, HRESULT, WINAPI, (HANDLE hTheme, HDC hdc, int iPartId, int iStateId, const RECT* pRect, const RECT* pClipRect), (hTheme, hdc, iPartId, iStateId, pRect, pClipRect)) 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSOFT_LINK(uxtheme, IsThemeActive, BOOL, WINAPI, (), ()) 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectSOFT_LINK(uxtheme, IsThemeBackgroundPartiallyTransparent, BOOL, WINAPI, (HANDLE hTheme, int iPartId, int iStateId), (hTheme, iPartId, iStateId)) 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic bool haveTheme; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianstatic const unsigned vistaMenuListButtonOutset = 1; 1215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectusing namespace std; 123635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// This is the fixed width IE and Firefox use for buttons on dropdown menus 127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const int dropDownButtonWidth = 17; 128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 129635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const int shell32MagnifierIconIndex = 22; 130635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// Default font size to match Firefox. 132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const float defaultControlFontPixelSize = 13; 133635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const float defaultCancelButtonSize = 9; 135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const float minCancelButtonSize = 5; 136635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const float maxCancelButtonSize = 21; 137635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const float defaultSearchFieldResultsDecorationSize = 13; 138635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const float minSearchFieldResultsDecorationSize = 9; 139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const float maxSearchFieldResultsDecorationSize = 30; 140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic const float defaultSearchFieldResultsButtonWidth = 18; 141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic bool gWebKitIsBeingUnloaded; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianstatic bool documentIsInApplicationChromeMode(const Document* document) 1455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Settings* settings = document->settings(); 1475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return settings && settings->inApplicationChromeMode(); 1485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::setWebKitIsBeingUnloaded() 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gWebKitIsBeingUnloaded = true; 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderThemeWin::create() 1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return adoptRef(new RenderThemeWin); 1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !USE(SAFARI_THEME) 1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static RenderTheme* winTheme = RenderThemeWin::create().releaseRef(); 1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return winTheme; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderThemeWin::RenderThemeWin() 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_buttonTheme(0) 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_textFieldTheme(0) 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_menuListTheme(0) 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_sliderTheme(0) 173a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_spinButtonTheme(0) 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project haveTheme = uxthemeLibrary() && IsThemeActive(); 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderThemeWin::~RenderThemeWin() 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If WebKit is being unloaded, then uxtheme.dll is no longer available. 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (gWebKitIsBeingUnloaded || !uxthemeLibrary()) 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project close(); 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHANDLE RenderThemeWin::buttonTheme() const 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (haveTheme && !m_buttonTheme) 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_buttonTheme = OpenThemeData(0, L"Button"); 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_buttonTheme; 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHANDLE RenderThemeWin::textFieldTheme() const 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (haveTheme && !m_textFieldTheme) 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_textFieldTheme = OpenThemeData(0, L"Edit"); 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_textFieldTheme; 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHANDLE RenderThemeWin::menuListTheme() const 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (haveTheme && !m_menuListTheme) 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_menuListTheme = OpenThemeData(0, L"ComboBox"); 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_menuListTheme; 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHANDLE RenderThemeWin::sliderTheme() const 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (haveTheme && !m_sliderTheme) 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_sliderTheme = OpenThemeData(0, L"TrackBar"); 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_sliderTheme; 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 214a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochHANDLE RenderThemeWin::spinButtonTheme() const 215a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 216a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (haveTheme && !m_spinButtonTheme) 217a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_spinButtonTheme = OpenThemeData(0, L"Spin"); 218a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return m_spinButtonTheme; 219a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 220a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::close() 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This method will need to be called when the OS theme changes to flush our cached themes. 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_buttonTheme) 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CloseThemeData(m_buttonTheme); 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_textFieldTheme) 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CloseThemeData(m_textFieldTheme); 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_menuListTheme) 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CloseThemeData(m_menuListTheme); 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_sliderTheme) 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CloseThemeData(m_sliderTheme); 232a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (m_spinButtonTheme) 233a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch CloseThemeData(m_spinButtonTheme); 234a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_buttonTheme = m_textFieldTheme = m_menuListTheme = m_sliderTheme = m_spinButtonTheme = 0; 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project haveTheme = uxthemeLibrary() && IsThemeActive(); 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::themeChanged() 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project close(); 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 244635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectString RenderThemeWin::extraDefaultStyleSheet() 245635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 246635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return String(themeWinUserAgentStyleSheet, sizeof(themeWinUserAgentStyleSheet)); 247635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 248635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 249635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectString RenderThemeWin::extraQuirksStyleSheet() 250635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 251635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return String(themeWinQuirksUserAgentStyleSheet, sizeof(themeWinQuirksUserAgentStyleSheet)); 252635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 253635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeWin::supportsHover(const RenderStyle*) const 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The Classic/2k look has no hover effects. 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return haveTheme; 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeWin::platformActiveSelectionBackgroundColor() const 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COLORREF color = GetSysColor(COLOR_HIGHLIGHT); 263635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return Color(GetRValue(color), GetGValue(color), GetBValue(color)); 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeWin::platformInactiveSelectionBackgroundColor() const 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 268635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // This color matches Firefox. 269635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return Color(176, 176, 176); 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeWin::platformActiveSelectionForegroundColor() const 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COLORREF color = GetSysColor(COLOR_HIGHLIGHTTEXT); 275635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return Color(GetRValue(color), GetGValue(color), GetBValue(color)); 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeWin::platformInactiveSelectionForegroundColor() const 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 280635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return platformActiveSelectionForegroundColor(); 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 283635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic void fillFontDescription(FontDescription& fontDescription, LOGFONT& logFont, float fontSize) 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setIsAbsoluteSize(true); 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setGenericFamily(FontDescription::NoFamily); 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.firstFamily().setFamily(String(logFont.lfFaceName)); 288635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project fontDescription.setSpecifiedSize(fontSize); 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setWeight(logFont.lfWeight >= 700 ? FontWeightBold : FontWeightNormal); // FIXME: Use real weight. 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription.setItalic(logFont.lfItalic); 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 293635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic void fillFontDescription(FontDescription& fontDescription, LOGFONT& logFont) 294635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 295635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project fillFontDescription(fontDescription, logFont, abs(logFont.lfHeight)); 296635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 297635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::systemFont(int propId, FontDescription& fontDescription) const 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static FontDescription captionFont; 301635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static FontDescription controlFont; 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static FontDescription smallCaptionFont; 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static FontDescription menuFont; 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static FontDescription iconFont; 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static FontDescription messageBoxFont; 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static FontDescription statusBarFont; 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static FontDescription systemFont; 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static bool initialized; 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NONCLIENTMETRICS ncm; 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!initialized) { 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project initialized = true; 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ncm.cbSize = sizeof(NONCLIENTMETRICS); 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0); 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (propId) { 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueIcon: { 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!iconFont.isAbsoluteSize()) { 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOGFONT logFont; 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(logFont), &logFont, 0); 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fillFontDescription(iconFont, logFont); 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription = iconFont; 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueMenu: 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!menuFont.isAbsoluteSize()) 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fillFontDescription(menuFont, ncm.lfMenuFont); 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription = menuFont; 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueMessageBox: 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!messageBoxFont.isAbsoluteSize()) 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fillFontDescription(messageBoxFont, ncm.lfMessageFont); 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription = messageBoxFont; 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueStatusBar: 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!statusBarFont.isAbsoluteSize()) 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fillFontDescription(statusBarFont, ncm.lfStatusFont); 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription = statusBarFont; 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueCaption: 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!captionFont.isAbsoluteSize()) 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fillFontDescription(captionFont, ncm.lfCaptionFont); 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription = captionFont; 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueSmallCaption: 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!smallCaptionFont.isAbsoluteSize()) 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fillFontDescription(smallCaptionFont, ncm.lfSmCaptionFont); 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription = smallCaptionFont; 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 353635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project case CSSValueWebkitSmallControl: 354635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project case CSSValueWebkitMiniControl: // Just map to small. 355635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project case CSSValueWebkitControl: // Just map to small. 356635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!controlFont.isAbsoluteSize()) { 357635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project HGDIOBJ hGDI = ::GetStockObject(DEFAULT_GUI_FONT); 358635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (hGDI) { 359635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project LOGFONT logFont; 360635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (::GetObject(hGDI, sizeof(logFont), &logFont) > 0) 361635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project fillFontDescription(controlFont, logFont, defaultControlFontPixelSize); 362635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 363635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 364635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project fontDescription = controlFont; 365635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project break; 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: { // Everything else uses the stock GUI font. 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!systemFont.isAbsoluteSize()) { 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HGDIOBJ hGDI = ::GetStockObject(DEFAULT_GUI_FONT); 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hGDI) { 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOGFONT logFont; 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (::GetObject(hGDI, sizeof(logFont), &logFont) > 0) 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fillFontDescription(systemFont, logFont); 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fontDescription = systemFont; 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 380635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool RenderThemeWin::supportsFocus(ControlPart appearance) const 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (appearance) { 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PushButtonPart: 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ButtonPart: 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case DefaultButtonPart: 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 392635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool RenderThemeWin::supportsFocusRing(const RenderStyle* style) const 393635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 394635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return supportsFocus(style->appearance()); 395635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 396635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 397a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochunsigned RenderThemeWin::determineClassicState(RenderObject* o, ControlSubPart subPart) 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned state = 0; 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (o->style()->appearance()) { 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PushButtonPart: 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ButtonPart: 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case DefaultButtonPart: 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state = DFCS_BUTTONPUSH; 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isEnabled(o)) 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state |= DFCS_INACTIVE; 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (isPressed(o)) 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state |= DFCS_PUSHED; 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case RadioPart: 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CheckboxPart: 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state = (o->style()->appearance() == RadioPart) ? DFCS_BUTTONRADIO : DFCS_BUTTONCHECK; 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isChecked(o)) 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state |= DFCS_CHECKED; 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isEnabled(o)) 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state |= DFCS_INACTIVE; 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (isPressed(o)) 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state |= DFCS_PUSHED; 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case MenulistPart: 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state = DFCS_SCROLLCOMBOBOX; 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isEnabled(o)) 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state |= DFCS_INACTIVE; 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (isPressed(o)) 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project state |= DFCS_PUSHED; 426a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch break; 427a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch case InnerSpinButtonPart: { 428a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch bool isUpButton = subPart == SpinButtonUp; 429a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch state = isUpButton ? DFCS_SCROLLUP : DFCS_SCROLLDOWN; 430a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!isEnabled(o) || isReadOnlyControl(o)) 431a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch state |= DFCS_INACTIVE; 432a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch else if (isPressed(o) && isUpButton == isSpinUpButtonPartPressed(o)) 433a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch state |= DFCS_PUSHED; 434a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch else if (isHovered(o) && isUpButton == isSpinUpButtonPartHovered(o)) 435a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch state |= DFCS_HOT; 436a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch break; 437a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return state; 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunsigned RenderThemeWin::determineState(RenderObject* o) 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned result = TS_NORMAL; 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ControlPart appearance = o->style()->appearance(); 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isEnabled(o)) 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = TS_DISABLED; 450635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (isReadOnlyControl(o) && (TextFieldPart == appearance || TextAreaPart == appearance || SearchFieldPart == appearance)) 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = TFS_READONLY; // Readonly is supported on textfields. 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (isPressed(o)) // Active overrides hover and focused. 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = TS_ACTIVE; 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (supportsFocus(appearance) && isFocused(o)) 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = TS_FOCUSED; 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (isHovered(o)) 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = TS_HOVER; 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isChecked(o)) 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result += 4; // 4 unchecked states, 4 checked states. 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunsigned RenderThemeWin::determineSliderThumbState(RenderObject* o) 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned result = TUS_NORMAL; 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isEnabled(o->parent())) 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = TUS_DISABLED; 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (supportsFocus(o->style()->appearance()) && isFocused(o->parent())) 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = TUS_FOCUSED; 4700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else if (toRenderSlider(o->parent())->inDragMode()) 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = TUS_PRESSED; 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (isHovered(o)) 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = TUS_HOT; 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunsigned RenderThemeWin::determineButtonState(RenderObject* o) 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned result = PBS_NORMAL; 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isEnabled(o)) 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = PBS_DISABLED; 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (isPressed(o)) 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = PBS_PRESSED; 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (supportsFocus(o->style()->appearance()) && isFocused(o)) 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = PBS_DEFAULTED; 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (isHovered(o)) 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = PBS_HOT; 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (isDefault(o)) 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = PBS_DEFAULTED; 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 493a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochunsigned RenderThemeWin::determineSpinButtonState(RenderObject* o, ControlSubPart subPart) 494a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 495a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch bool isUpButton = subPart == SpinButtonUp; 496a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch unsigned result = isUpButton ? UPS_NORMAL : DNS_NORMAL; 497a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!isEnabled(o) || isReadOnlyControl(o)) 498a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch result = isUpButton ? UPS_DISABLED : DNS_DISABLED; 499a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch else if (isPressed(o) && isUpButton == isSpinUpButtonPartPressed(o)) 500a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch result = isUpButton ? UPS_PRESSED : DNS_PRESSED; 501a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch else if (isHovered(o) && isUpButton == isSpinUpButtonPartHovered(o)) 502a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch result = isUpButton ? UPS_HOT : DNS_HOT; 503a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return result; 504a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 505a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 506a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochThemeData RenderThemeWin::getClassicThemeData(RenderObject* o, ControlSubPart subPart) 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ThemeData result; 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (o->style()->appearance()) { 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PushButtonPart: 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ButtonPart: 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case DefaultButtonPart: 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CheckboxPart: 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case RadioPart: 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = DFC_BUTTON; 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineClassicState(o); 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case MenulistPart: 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = DFC_SCROLL; 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineClassicState(o); 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 522635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project case SearchFieldPart: 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case TextFieldPart: 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case TextAreaPart: 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = TFP_TEXTFIELD; 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineState(o); 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case SliderHorizontalPart: 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = TKP_TRACK; 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = TS_NORMAL; 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case SliderVerticalPart: 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = TKP_TRACKVERT; 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = TS_NORMAL; 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case SliderThumbHorizontalPart: 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = TKP_THUMBBOTTOM; 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineSliderThumbState(o); 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case SliderThumbVerticalPart: 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = TKP_THUMBRIGHT; 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineSliderThumbState(o); 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 544a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch case InnerSpinButtonPart: 545a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch result.m_part = DFC_SCROLL; 546a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch result.m_state = determineClassicState(o, subPart); 547a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch break; 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 554a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochThemeData RenderThemeWin::getThemeData(RenderObject* o, ControlSubPart subPart) 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!haveTheme) 557a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return getClassicThemeData(o, subPart); 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ThemeData result; 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (o->style()->appearance()) { 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PushButtonPart: 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case ButtonPart: 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case DefaultButtonPart: 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = BP_BUTTON; 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineButtonState(o); 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CheckboxPart: 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = BP_CHECKBOX; 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineState(o); 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case MenulistPart: 5722bde8e466a4451c7319e3a072d118917957d6554Steve Block case MenulistButtonPart: { 5732bde8e466a4451c7319e3a072d118917957d6554Steve Block const bool isVistaOrLater = (windowsVersion() >= WindowsVista); 5742bde8e466a4451c7319e3a072d118917957d6554Steve Block result.m_part = isVistaOrLater ? CP_DROPDOWNBUTTONRIGHT : CP_DROPDOWNBUTTON; 5752bde8e466a4451c7319e3a072d118917957d6554Steve Block if (isVistaOrLater && documentIsInApplicationChromeMode(o->document())) { 5765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // The "readonly" look we use in application chrome mode 5775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // only uses a "normal" look for the drop down button. 5785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian result.m_state = TS_NORMAL; 5795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } else 5805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian result.m_state = determineState(o); 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5822bde8e466a4451c7319e3a072d118917957d6554Steve Block } 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case RadioPart: 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = BP_RADIO; 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineState(o); 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 587635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project case SearchFieldPart: 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case TextFieldPart: 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case TextAreaPart: 5902bde8e466a4451c7319e3a072d118917957d6554Steve Block result.m_part = (windowsVersion() >= WindowsVista) ? EP_EDITBORDER_NOSCROLL : TFP_TEXTFIELD; 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineState(o); 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case SliderHorizontalPart: 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = TKP_TRACK; 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = TS_NORMAL; 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case SliderVerticalPart: 5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = TKP_TRACKVERT; 5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = TS_NORMAL; 6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case SliderThumbHorizontalPart: 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = TKP_THUMBBOTTOM; 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineSliderThumbState(o); 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case SliderThumbVerticalPart: 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_part = TKP_THUMBRIGHT; 6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.m_state = determineSliderThumbState(o); 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 609a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch case InnerSpinButtonPart: 610a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch result.m_part = subPart == SpinButtonUp ? SPNP_UP : SPNP_DOWN; 611a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch result.m_state = determineSpinButtonState(o, subPart); 612a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch break; 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void drawControl(GraphicsContext* context, RenderObject* o, HANDLE theme, const ThemeData& themeData, const IntRect& r) 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool alphaBlend = false; 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (theme) 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project alphaBlend = IsThemeBackgroundPartiallyTransparent(theme, themeData.m_part, themeData.m_state); 6235abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick LocalWindowsContext windowsContext(context, r, alphaBlend); 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RECT widgetRect = r; 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (theme) 6265abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick DrawThemeBackground(theme, windowsContext.hdc(), themeData.m_part, themeData.m_state, &widgetRect, 0); 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else { 6285abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick HDC hdc = windowsContext.hdc(); 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (themeData.m_part == TFP_TEXTFIELD) { 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::DrawEdge(hdc, &widgetRect, EDGE_SUNKEN, BF_RECT | BF_ADJUST); 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (themeData.m_state == TS_DISABLED || themeData.m_state == TFS_READONLY) 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::FillRect(hdc, &widgetRect, (HBRUSH)(COLOR_BTNFACE+1)); 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::FillRect(hdc, &widgetRect, (HBRUSH)(COLOR_WINDOW+1)); 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (themeData.m_part == TKP_TRACK || themeData.m_part == TKP_TRACKVERT) { 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::DrawEdge(hdc, &widgetRect, EDGE_SUNKEN, BF_RECT | BF_ADJUST); 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::FillRect(hdc, &widgetRect, (HBRUSH)GetStockObject(GRAY_BRUSH)); 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if ((o->style()->appearance() == SliderThumbHorizontalPart || 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project o->style()->appearance() == SliderThumbVerticalPart) && 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (themeData.m_part == TKP_THUMBBOTTOM || themeData.m_part == TKP_THUMBTOP || 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project themeData.m_part == TKP_THUMBLEFT || themeData.m_part == TKP_THUMBRIGHT)) { 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::DrawEdge(hdc, &widgetRect, EDGE_RAISED, BF_RECT | BF_SOFT | BF_MIDDLE | BF_ADJUST); 6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (themeData.m_state == TUS_DISABLED) { 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static WORD patternBits[8] = {0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55}; 6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HBITMAP patternBmp = ::CreateBitmap(8, 8, 1, 1, patternBits); 6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (patternBmp) { 6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HBRUSH brush = (HBRUSH) ::CreatePatternBrush(patternBmp); 6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COLORREF oldForeColor = ::SetTextColor(hdc, ::GetSysColor(COLOR_3DFACE)); 6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COLORREF oldBackColor = ::SetBkColor(hdc, ::GetSysColor(COLOR_3DHILIGHT)); 6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project POINT p; 6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::GetViewportOrgEx(hdc, &p); 6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::SetBrushOrgEx(hdc, p.x + widgetRect.left, p.y + widgetRect.top, NULL); 6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HBRUSH oldBrush = (HBRUSH) ::SelectObject(hdc, brush); 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::FillRect(hdc, &widgetRect, brush); 6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::SetTextColor(hdc, oldForeColor); 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::SetBkColor(hdc, oldBackColor); 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::SelectObject(hdc, oldBrush); 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::DeleteObject(brush); 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::FillRect(hdc, &widgetRect, (HBRUSH)COLOR_3DHILIGHT); 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::DeleteObject(patternBmp); 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Push buttons, buttons, checkboxes and radios, and the dropdown arrow in menulists. 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (o->style()->appearance() == DefaultButtonPart) { 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HBRUSH brush = ::GetSysColorBrush(COLOR_3DDKSHADOW); 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::FrameRect(hdc, &widgetRect, brush); 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::InflateRect(&widgetRect, -1, -1); 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::DrawEdge(hdc, &widgetRect, BDR_RAISEDOUTER, BF_RECT | BF_MIDDLE); 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::DrawFrameControl(hdc, &widgetRect, themeData.m_part, themeData.m_state); 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 676ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintButton(RenderObject* o, const PaintInfo& i, const IntRect& r) 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project drawControl(i.context, o, buttonTheme(), getThemeData(o), r); 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 682a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid RenderThemeWin::adjustInnerSpinButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const 683a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 684a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch int width = ::GetSystemMetrics(SM_CXVSCROLL); 685a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (width <= 0) 686a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch width = 17; // Vista's default. 687a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch style->setWidth(Length(width, Fixed)); 688a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch style->setMinWidth(Length(width, Fixed)); 689a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 690a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 691a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochbool RenderThemeWin::paintInnerSpinButton(RenderObject* o, const PaintInfo& i, const IntRect& r) 692a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 693a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // We split the specified rectangle into two vertically. We can't draw a 694a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // spin button of which height is less than 2px. 695a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (r.height() < 2) 696a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return false; 697a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch IntRect upRect(r); 698a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch upRect.setHeight(r.height() / 2); 699a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch IntRect downRect(r); 7002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block downRect.setY(upRect.maxY()); 701a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch downRect.setHeight(r.height() - upRect.height()); 702a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch drawControl(i.context, o, spinButtonTheme(), getThemeData(o, SpinButtonUp), upRect); 703a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch drawControl(i.context, o, spinButtonTheme(), getThemeData(o, SpinButtonDown), downRect); 704a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return false; 705a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 706a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::setCheckboxSize(RenderStyle* style) const 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the width and height are both specified, then we have nothing to do. 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto()) 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: A hard-coded size of 13 is used. This is wrong but necessary for now. It matches Firefox. 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // At different DPI settings on Windows, querying the theme gives you a larger size that accounts for 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the higher DPI. Until our entire engine honors a DPI setting other than 96, we can't rely on the theme's 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // metrics. 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (style->width().isIntrinsicOrAuto()) 7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setWidth(Length(13, Fixed)); 7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (style->height().isAuto()) 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setHeight(Length(13, Fixed)); 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 723ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintTextField(RenderObject* o, const PaintInfo& i, const IntRect& r) 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project drawControl(i.context, o, textFieldTheme(), getThemeData(o), r); 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 729ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMenuList(RenderObject* o, const PaintInfo& i, const IntRect& r) 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian HANDLE theme; 7325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian int part; 7332bde8e466a4451c7319e3a072d118917957d6554Steve Block if (haveTheme && (windowsVersion() >= WindowsVista)) { 7345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian theme = menuListTheme(); 7355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (documentIsInApplicationChromeMode(o->document())) 7365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian part = CP_READONLY; 7375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian else 7385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian part = CP_BORDER; 7395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } else { 7405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian theme = textFieldTheme(); 7415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian part = TFP_TEXTFIELD; 7425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 7435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 7445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian drawControl(i.context, o, theme, ThemeData(part, determineState(o)), r); 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return paintMenuListButton(o, i, r); 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::adjustMenuListStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->resetBorder(); 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project adjustMenuListButtonStyle(selector, style, e); 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::adjustMenuListButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // These are the paddings needed to place the text correctly in the <select> box 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int dropDownBoxPaddingTop = 2; 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int dropDownBoxPaddingRight = style->direction() == LTR ? 4 + dropDownButtonWidth : 4; 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int dropDownBoxPaddingBottom = 2; 7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int dropDownBoxPaddingLeft = style->direction() == LTR ? 4 : 4 + dropDownButtonWidth; 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The <select> box must be at least 12px high for the button to render nicely on Windows 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int dropDownBoxMinHeight = 12; 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Position the text correctly within the select box and make the box wide enough to fit the dropdown button 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingTop(Length(dropDownBoxPaddingTop, Fixed)); 7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingRight(Length(dropDownBoxPaddingRight, Fixed)); 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingBottom(Length(dropDownBoxPaddingBottom, Fixed)); 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingLeft(Length(dropDownBoxPaddingLeft, Fixed)); 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Height is locked to auto 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setHeight(Length(Auto)); 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Calculate our min-height 7752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block int minHeight = style->fontMetrics().height(); 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project minHeight = max(minHeight, dropDownBoxMinHeight); 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setMinHeight(Length(minHeight, Fixed)); 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // White-space is locked to pre 7818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setWhiteSpace(PRE); 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 784ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMenuListButton(RenderObject* o, const PaintInfo& i, const IntRect& r) 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Don't make hardcoded assumptions about the thickness of the textfield border. 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int borderThickness = haveTheme ? 1 : 2; 7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Paint the dropdown button on the inner edge of the text field, 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // leaving space for the text field's 1px border 7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect buttonRect(r); 7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project buttonRect.inflate(-borderThickness); 7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (o->style()->direction() == LTR) 7942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block buttonRect.setX(buttonRect.maxX() - dropDownButtonWidth); 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project buttonRect.setWidth(dropDownButtonWidth); 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7972bde8e466a4451c7319e3a072d118917957d6554Steve Block if ((windowsVersion() >= WindowsVista)) { 7985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // Outset the top, right, and bottom borders of the button so that they coincide with the <select>'s border. 7995f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian buttonRect.setY(buttonRect.y() - vistaMenuListButtonOutset); 8005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian buttonRect.setHeight(buttonRect.height() + 2 * vistaMenuListButtonOutset); 8015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian buttonRect.setWidth(buttonRect.width() + vistaMenuListButtonOutset); 8025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 8035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 8048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project drawControl(i.context, o, menuListTheme(), getThemeData(o), buttonRect); 8058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectconst int trackWidth = 4; 8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 811ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintSliderTrack(RenderObject* o, const PaintInfo& i, const IntRect& r) 8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect bounds = r; 8148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (o->style()->appearance() == SliderHorizontalPart) { 8168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bounds.setHeight(trackWidth); 8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bounds.setY(r.y() + r.height() / 2 - trackWidth / 2); 8188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (o->style()->appearance() == SliderVerticalPart) { 8198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bounds.setWidth(trackWidth); 8208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bounds.setX(r.x() + r.width() / 2 - trackWidth / 2); 8218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project drawControl(i.context, o, sliderTheme(), getThemeData(o), bounds); 8248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 8258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 827ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintSliderThumb(RenderObject* o, const PaintInfo& i, const IntRect& r) 8288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project drawControl(i.context, o, sliderTheme(), getThemeData(o), r); 8308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectconst int sliderThumbWidth = 7; 8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectconst int sliderThumbHeight = 15; 8358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::adjustSliderThumbSize(RenderObject* o) const 8378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 83868513a70bcd92384395513322f1b801e7bf9c729Steve Block ControlPart part = o->style()->appearance(); 83968513a70bcd92384395513322f1b801e7bf9c729Steve Block if (part == SliderThumbVerticalPart) { 8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project o->style()->setWidth(Length(sliderThumbHeight, Fixed)); 8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project o->style()->setHeight(Length(sliderThumbWidth, Fixed)); 84268513a70bcd92384395513322f1b801e7bf9c729Steve Block } else if (part == SliderThumbHorizontalPart) { 8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project o->style()->setWidth(Length(sliderThumbWidth, Fixed)); 8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project o->style()->setHeight(Length(sliderThumbHeight, Fixed)); 8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#if ENABLE(VIDEO) 84768513a70bcd92384395513322f1b801e7bf9c729Steve Block else if (part == MediaSliderThumbPart || part == MediaVolumeSliderThumbPart) 8485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian RenderMediaControls::adjustMediaSliderThumbSize(o); 8495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif 850635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 851635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 852ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintSearchField(RenderObject* o, const PaintInfo& i, const IntRect& r) 8538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 8548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return paintTextField(o, i, r); 8558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid RenderThemeWin::adjustSearchFieldStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const 8585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 8595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // Override paddingSize to match AppKit text positioning. 8605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian const int padding = 1; 8615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian style->setPaddingLeft(Length(padding, Fixed)); 8625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian style->setPaddingRight(Length(padding, Fixed)); 8635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian style->setPaddingTop(Length(padding, Fixed)); 8645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian style->setPaddingBottom(Length(padding, Fixed)); 8655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (e && e->focused() && e->document()->frame()->selection()->isFocusedAndActive()) 8665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian style->setOutlineOffset(-2); 8675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 8685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 869ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintSearchFieldCancelButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 8708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 871635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect bounds = r; 872635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT(o->parent()); 873635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!o->parent() || !o->parent()->isBox()) 874635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 875635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 876635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RenderBox* parentRenderBox = toRenderBox(o->parent()); 877635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 878635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect parentBox = parentRenderBox->absoluteContentBox(); 879635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 880635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Make sure the scaled button stays square and will fit in its parent's box 881635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bounds.setHeight(min(parentBox.width(), min(parentBox.height(), bounds.height()))); 882635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bounds.setWidth(bounds.height()); 883635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 884635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Center the button vertically. Round up though, so if it has to be one pixel off-center, it will 885635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // be one pixel closer to the bottom of the field. This tends to look better with the text. 886635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bounds.setY(parentBox.y() + (parentBox.height() - bounds.height() + 1) / 2); 887635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 888635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static Image* cancelImage = Image::loadPlatformResource("searchCancel").releaseRef(); 889635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static Image* cancelPressedImage = Image::loadPlatformResource("searchCancelPressed").releaseRef(); 890643ca7872b450ea4efacab6188849e5aac2ba161Steve Block paintInfo.context->drawImage(isPressed(o) ? cancelPressedImage : cancelImage, o->style()->colorSpace(), bounds); 8918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 8928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::adjustSearchFieldCancelButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const 8958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 896635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Scale the button size based on the font size 897635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project float fontScale = style->fontSize() / defaultControlFontPixelSize; 898635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project int cancelButtonSize = lroundf(min(max(minCancelButtonSize, defaultCancelButtonSize * fontScale), maxCancelButtonSize)); 899635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project style->setWidth(Length(cancelButtonSize, Fixed)); 900635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project style->setHeight(Length(cancelButtonSize, Fixed)); 9018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::adjustSearchFieldDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const 9048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntSize emptySize(1, 11); 9068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setWidth(Length(emptySize.width(), Fixed)); 9078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setHeight(Length(emptySize.height(), Fixed)); 9088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 909635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 9108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::adjustSearchFieldResultsDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const 9118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 912635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Scale the decoration size based on the font size 913635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project float fontScale = style->fontSize() / defaultControlFontPixelSize; 914635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project int magnifierSize = lroundf(min(max(minSearchFieldResultsDecorationSize, defaultSearchFieldResultsDecorationSize * fontScale), 915635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project maxSearchFieldResultsDecorationSize)); 916635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project style->setWidth(Length(magnifierSize, Fixed)); 917635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project style->setHeight(Length(magnifierSize, Fixed)); 9188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 920ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintSearchFieldResultsDecoration(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 9218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect bounds = r; 923635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT(o->parent()); 924635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!o->parent() || !o->parent()->isBox()) 925635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 926635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 927635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RenderBox* parentRenderBox = toRenderBox(o->parent()); 928635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect parentBox = parentRenderBox->absoluteContentBox(); 929635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 930635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Make sure the scaled decoration stays square and will fit in its parent's box 931635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bounds.setHeight(min(parentBox.width(), min(parentBox.height(), bounds.height()))); 9328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bounds.setWidth(bounds.height()); 9338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 934635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Center the decoration vertically. Round up though, so if it has to be one pixel off-center, it will 935635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // be one pixel closer to the bottom of the field. This tends to look better with the text. 936635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bounds.setY(parentBox.y() + (parentBox.height() - bounds.height() + 1) / 2); 9378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 938635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static Image* magnifierImage = Image::loadPlatformResource("searchMagnifier").releaseRef(); 939643ca7872b450ea4efacab6188849e5aac2ba161Steve Block paintInfo.context->drawImage(magnifierImage, o->style()->colorSpace(), bounds); 9408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 9418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWin::adjustSearchFieldResultsButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const 9448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 945635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Scale the button size based on the font size 946635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project float fontScale = style->fontSize() / defaultControlFontPixelSize; 947635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project int magnifierHeight = lroundf(min(max(minSearchFieldResultsDecorationSize, defaultSearchFieldResultsDecorationSize * fontScale), 948635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project maxSearchFieldResultsDecorationSize)); 949635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project int magnifierWidth = lroundf(magnifierHeight * defaultSearchFieldResultsButtonWidth / defaultSearchFieldResultsDecorationSize); 950635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project style->setWidth(Length(magnifierWidth, Fixed)); 951635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project style->setHeight(Length(magnifierHeight, Fixed)); 9528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 954ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintSearchFieldResultsButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 9558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 956635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect bounds = r; 957635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT(o->parent()); 958635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!o->parent()) 959635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 960635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!o->parent() || !o->parent()->isBox()) 961635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 962635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 963635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RenderBox* parentRenderBox = toRenderBox(o->parent()); 964635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect parentBox = parentRenderBox->absoluteContentBox(); 965635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 966635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Make sure the scaled decoration will fit in its parent's box 967635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bounds.setHeight(min(parentBox.height(), bounds.height())); 968635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bounds.setWidth(min(parentBox.width(), static_cast<int>(bounds.height() * defaultSearchFieldResultsButtonWidth / defaultSearchFieldResultsDecorationSize))); 969635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 970635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Center the button vertically. Round up though, so if it has to be one pixel off-center, it will 971635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // be one pixel closer to the bottom of the field. This tends to look better with the text. 972635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bounds.setY(parentBox.y() + (parentBox.height() - bounds.height() + 1) / 2); 973635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 974635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static Image* magnifierImage = Image::loadPlatformResource("searchMagnifierResults").releaseRef(); 975643ca7872b450ea4efacab6188849e5aac2ba161Steve Block paintInfo.context->drawImage(magnifierImage, o->style()->colorSpace(), bounds); 9768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 9778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Map a CSSValue* system color to an index understood by GetSysColor 9808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic int cssValueIdToSysColorIndex(int cssValueId) 9818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (cssValueId) { 9838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueActiveborder: return COLOR_ACTIVEBORDER; 9848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueActivecaption: return COLOR_ACTIVECAPTION; 9858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueAppworkspace: return COLOR_APPWORKSPACE; 9868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueBackground: return COLOR_BACKGROUND; 9878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueButtonface: return COLOR_BTNFACE; 9888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueButtonhighlight: return COLOR_BTNHIGHLIGHT; 9898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueButtonshadow: return COLOR_BTNSHADOW; 9908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueButtontext: return COLOR_BTNTEXT; 9918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueCaptiontext: return COLOR_CAPTIONTEXT; 9928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueGraytext: return COLOR_GRAYTEXT; 9938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueHighlight: return COLOR_HIGHLIGHT; 9948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueHighlighttext: return COLOR_HIGHLIGHTTEXT; 9958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueInactiveborder: return COLOR_INACTIVEBORDER; 9968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueInactivecaption: return COLOR_INACTIVECAPTION; 9978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueInactivecaptiontext: return COLOR_INACTIVECAPTIONTEXT; 9988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueInfobackground: return COLOR_INFOBK; 9998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueInfotext: return COLOR_INFOTEXT; 10008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueMenu: return COLOR_MENU; 10018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueMenutext: return COLOR_MENUTEXT; 10028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueScrollbar: return COLOR_SCROLLBAR; 10038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueThreeddarkshadow: return COLOR_3DDKSHADOW; 10048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueThreedface: return COLOR_3DFACE; 10058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueThreedhighlight: return COLOR_3DHIGHLIGHT; 10068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueThreedlightshadow: return COLOR_3DLIGHT; 10078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueThreedshadow: return COLOR_3DSHADOW; 10088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueWindow: return COLOR_WINDOW; 10098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueWindowframe: return COLOR_WINDOWFRAME; 10108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSValueWindowtext: return COLOR_WINDOWTEXT; 10118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: return -1; // Unsupported CSSValue 10128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeWin::systemColor(int cssValueId) const 10168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int sysColorIndex = cssValueIdToSysColorIndex(cssValueId); 1018635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (sysColorIndex == -1) 1019635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return RenderTheme::systemColor(cssValueId); 1020635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 10218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project COLORREF color = GetSysColor(sysColorIndex); 10228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return Color(GetRValue(color), GetGValue(color), GetBValue(color)); 10238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#if ENABLE(VIDEO) 1026643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 102768513a70bcd92384395513322f1b801e7bf9c729Steve BlockString RenderThemeWin::extraMediaControlsStyleSheet() 102868513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 102968513a70bcd92384395513322f1b801e7bf9c729Steve Block return String(mediaControlsQuickTimeUserAgentStyleSheet, sizeof(mediaControlsQuickTimeUserAgentStyleSheet)); 103068513a70bcd92384395513322f1b801e7bf9c729Steve Block} 103168513a70bcd92384395513322f1b801e7bf9c729Steve Block 10322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool RenderThemeWin::supportsClosedCaptioning() const 1033643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1034643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // We rely on QuickTime to render captions so only enable the button for a video element. 1035643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if SAFARI_THEME_VERSION >= 4 10362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return true; 1037643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#else 10382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return false; 1039643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 1040643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 1041643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1042ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMediaFullscreenButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 10435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 10445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return RenderMediaControls::paintMediaControlsPart(MediaFullscreenButton, o, paintInfo, r); 10455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 10465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1047ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMediaMuteButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 10485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 10495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return RenderMediaControls::paintMediaControlsPart(MediaMuteButton, o, paintInfo, r); 10505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 10515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1052ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMediaPlayButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 10535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 10545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return RenderMediaControls::paintMediaControlsPart(MediaPlayButton, o, paintInfo, r); 10555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 10565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 105768513a70bcd92384395513322f1b801e7bf9c729Steve Blockbool RenderThemeWin::paintMediaRewindButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 105868513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 105968513a70bcd92384395513322f1b801e7bf9c729Steve Block return RenderMediaControls::paintMediaControlsPart(MediaRewindButton, o, paintInfo, r); 106068513a70bcd92384395513322f1b801e7bf9c729Steve Block} 106168513a70bcd92384395513322f1b801e7bf9c729Steve Block 1062ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMediaSeekBackButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 10635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 10645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return RenderMediaControls::paintMediaControlsPart(MediaSeekBackButton, o, paintInfo, r); 10655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 10665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1067ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMediaSeekForwardButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 10685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 10695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return RenderMediaControls::paintMediaControlsPart(MediaSeekForwardButton, o, paintInfo, r); 10705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 10715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1072ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMediaSliderTrack(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 10735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 10745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return RenderMediaControls::paintMediaControlsPart(MediaSlider, o, paintInfo, r); 10755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 10765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1077ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMediaSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 10785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 10795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return RenderMediaControls::paintMediaControlsPart(MediaSliderThumb, o, paintInfo, r); 10805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1081643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1082ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWin::paintMediaToggleClosedCaptionsButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 1083643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1084643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return RenderMediaControls::paintMediaControlsPart(MediaShowClosedCaptionsButton, o, paintInfo, r); 1085643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 1086643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 108768513a70bcd92384395513322f1b801e7bf9c729Steve Blockbool RenderThemeWin::paintMediaControlsBackground(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 108868513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 108968513a70bcd92384395513322f1b801e7bf9c729Steve Block return RenderMediaControls::paintMediaControlsPart(MediaTimelineContainer, o, paintInfo, r); 109068513a70bcd92384395513322f1b801e7bf9c729Steve Block} 109168513a70bcd92384395513322f1b801e7bf9c729Steve Block 109268513a70bcd92384395513322f1b801e7bf9c729Steve Blockbool RenderThemeWin::paintMediaVolumeSliderContainer(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 109368513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 109468513a70bcd92384395513322f1b801e7bf9c729Steve Block return RenderMediaControls::paintMediaControlsPart(MediaVolumeSliderContainer, o, paintInfo, r); 109568513a70bcd92384395513322f1b801e7bf9c729Steve Block} 109668513a70bcd92384395513322f1b801e7bf9c729Steve Block 109768513a70bcd92384395513322f1b801e7bf9c729Steve Blockbool RenderThemeWin::paintMediaVolumeSliderTrack(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 109868513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 109968513a70bcd92384395513322f1b801e7bf9c729Steve Block return RenderMediaControls::paintMediaControlsPart(MediaVolumeSlider, o, paintInfo, r); 110068513a70bcd92384395513322f1b801e7bf9c729Steve Block} 110168513a70bcd92384395513322f1b801e7bf9c729Steve Block 110268513a70bcd92384395513322f1b801e7bf9c729Steve Blockbool RenderThemeWin::paintMediaVolumeSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 110368513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 110468513a70bcd92384395513322f1b801e7bf9c729Steve Block return RenderMediaControls::paintMediaControlsPart(MediaVolumeSliderThumb, o, paintInfo, r); 110568513a70bcd92384395513322f1b801e7bf9c729Steve Block} 110668513a70bcd92384395513322f1b801e7bf9c729Steve Block 110781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochIntPoint RenderThemeWin::volumeSliderOffsetFromMuteButton(RenderBox* muteButtonBox, const IntSize& size) const 110868513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 110981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return RenderMediaControls::volumeSliderOffsetFromMuteButton(muteButtonBox, size); 111068513a70bcd92384395513322f1b801e7bf9c729Steve Block} 111168513a70bcd92384395513322f1b801e7bf9c729Steve Block 111268513a70bcd92384395513322f1b801e7bf9c729Steve Block 11135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif 11145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 11158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1116