18f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian/* 28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2007 Apple Inc. 38f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2007 Alp Toker <alp@atoker.com> 48f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2008 Collabora Ltd. 58f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2008, 2009 Google Inc. 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Kenneth Rohde Christiansen 78f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 88f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * This library is free software; you can redistribute it and/or 98f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * modify it under the terms of the GNU Library General Public 108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * License as published by the Free Software Foundation; either 118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * version 2 of the License, or (at your option) any later version. 128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * This library is distributed in the hope that it will be useful, 148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * but WITHOUT ANY WARRANTY; without even the implied warranty of 158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Library General Public License for more details. 178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * You should have received a copy of the GNU Library General Public License 198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * along with this library; see the file COPYING.LIB. If not, write to 208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Boston, MA 02110-1301, USA. 228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian */ 248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "config.h" 268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "RenderThemeChromiumLinux.h" 278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "CSSValueKeywords.h" 295e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "Color.h" 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PaintInfo.h" 31ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "PlatformBridge.h" 328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "RenderObject.h" 33ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "RenderProgress.h" 34ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "RenderSlider.h" 35967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#include "ScrollbarTheme.h" 368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "UserAgentStyleSheets.h" 378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace WebCore { 398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 40d0825bca7fe65beaee391d30da42e937db621564Steve Blockunsigned RenderThemeChromiumLinux::m_activeSelectionBackgroundColor = 41d0825bca7fe65beaee391d30da42e937db621564Steve Block 0xff1e90ff; 42d0825bca7fe65beaee391d30da42e937db621564Steve Blockunsigned RenderThemeChromiumLinux::m_activeSelectionForegroundColor = 43d0825bca7fe65beaee391d30da42e937db621564Steve Block Color::black; 44d0825bca7fe65beaee391d30da42e937db621564Steve Blockunsigned RenderThemeChromiumLinux::m_inactiveSelectionBackgroundColor = 45d0825bca7fe65beaee391d30da42e937db621564Steve Block 0xffc8c8c8; 46d0825bca7fe65beaee391d30da42e937db621564Steve Blockunsigned RenderThemeChromiumLinux::m_inactiveSelectionForegroundColor = 47d0825bca7fe65beaee391d30da42e937db621564Steve Block 0xff323232; 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 495e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockdouble RenderThemeChromiumLinux::m_caretBlinkInterval; 505e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 51ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochstatic const unsigned defaultButtonBackgroundColor = 0xffdddddd; 52ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 53ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochstatic PlatformBridge::ThemePaintState getWebThemeState(const RenderTheme* theme, const RenderObject* o) 54ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 55ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!theme->isEnabled(o)) 56ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return PlatformBridge::StateDisabled; 57ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (theme->isPressed(o)) 58ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return PlatformBridge::StatePressed; 59ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (theme->isHovered(o)) 60ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return PlatformBridge::StateHover; 61ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 62ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return PlatformBridge::StateNormal; 63ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 64ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 65ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderThemeChromiumLinux::create() 678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return adoptRef(new RenderThemeChromiumLinux()); 698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static RenderTheme* rt = RenderThemeChromiumLinux::create().releaseRef(); 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return rt; 758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochRenderThemeChromiumLinux::RenderThemeChromiumLinux() 788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 79231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_caretBlinkInterval = RenderTheme::caretBlinkInterval(); 808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochRenderThemeChromiumLinux::~RenderThemeChromiumLinux() 838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 865f1ab04193ad0130ca8204aadaceae083aca9881Feng QianColor RenderThemeChromiumLinux::systemColor(int cssValueId) const 875f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian static const Color linuxButtonGrayColor(0xffdddddd); 895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (cssValueId == CSSValueButtonface) 915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return linuxButtonGrayColor; 925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return RenderTheme::systemColor(cssValueId); 935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng QianString RenderThemeChromiumLinux::extraDefaultStyleSheet() 968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return RenderThemeChromiumSkia::extraDefaultStyleSheet() + 985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian String(themeChromiumLinuxUserAgentStyleSheet, sizeof(themeChromiumLinuxUserAgentStyleSheet)); 998f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianbool RenderThemeChromiumLinux::controlSupportsTints(const RenderObject* o) const 1028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 1038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return isEnabled(o); 1048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng QianColor RenderThemeChromiumLinux::activeListBoxSelectionBackgroundColor() const 1078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 1088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return Color(0x28, 0x28, 0x28); 1098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng QianColor RenderThemeChromiumLinux::activeListBoxSelectionForegroundColor() const 1128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 1135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return Color::black; 1148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng QianColor RenderThemeChromiumLinux::inactiveListBoxSelectionBackgroundColor() const 1178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 1188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return Color(0xc8, 0xc8, 0xc8); 1198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng QianColor RenderThemeChromiumLinux::inactiveListBoxSelectionForegroundColor() const 1228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 1238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return Color(0x32, 0x32, 0x32); 1248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 126d0825bca7fe65beaee391d30da42e937db621564Steve BlockColor RenderThemeChromiumLinux::platformActiveSelectionBackgroundColor() const 127d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 128d0825bca7fe65beaee391d30da42e937db621564Steve Block return m_activeSelectionBackgroundColor; 129d0825bca7fe65beaee391d30da42e937db621564Steve Block} 130d0825bca7fe65beaee391d30da42e937db621564Steve Block 131d0825bca7fe65beaee391d30da42e937db621564Steve BlockColor RenderThemeChromiumLinux::platformInactiveSelectionBackgroundColor() const 132d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 133d0825bca7fe65beaee391d30da42e937db621564Steve Block return m_inactiveSelectionBackgroundColor; 134d0825bca7fe65beaee391d30da42e937db621564Steve Block} 135d0825bca7fe65beaee391d30da42e937db621564Steve Block 136d0825bca7fe65beaee391d30da42e937db621564Steve BlockColor RenderThemeChromiumLinux::platformActiveSelectionForegroundColor() const 137d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 138d0825bca7fe65beaee391d30da42e937db621564Steve Block return m_activeSelectionForegroundColor; 139d0825bca7fe65beaee391d30da42e937db621564Steve Block} 140d0825bca7fe65beaee391d30da42e937db621564Steve Block 141d0825bca7fe65beaee391d30da42e937db621564Steve BlockColor RenderThemeChromiumLinux::platformInactiveSelectionForegroundColor() const 142d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 143d0825bca7fe65beaee391d30da42e937db621564Steve Block return m_inactiveSelectionForegroundColor; 144d0825bca7fe65beaee391d30da42e937db621564Steve Block} 145d0825bca7fe65beaee391d30da42e937db621564Steve Block 146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid RenderThemeChromiumLinux::adjustSliderThumbSize(RenderObject* o) const 147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 148ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch IntSize size = PlatformBridge::getThemePartSize(PlatformBridge::PartSliderThumb); 149ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (o->style()->appearance() == SliderThumbHorizontalPart) { 151ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch o->style()->setWidth(Length(size.width(), Fixed)); 152ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch o->style()->setHeight(Length(size.height(), Fixed)); 153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } else if (o->style()->appearance() == SliderThumbVerticalPart) { 154ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch o->style()->setWidth(Length(size.height(), Fixed)); 155ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch o->style()->setHeight(Length(size.width(), Fixed)); 156231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } else 157231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RenderThemeChromiumSkia::adjustSliderThumbSize(o); 158231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool RenderThemeChromiumLinux::supportsControlTints() const 1618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 1638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 165231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid RenderThemeChromiumLinux::setCaretBlinkInterval(double interval) 166231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 167231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_caretBlinkInterval = interval; 168231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 169231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 170231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockdouble RenderThemeChromiumLinux::caretBlinkIntervalInternal() const 171231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 172231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return m_caretBlinkInterval; 173231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 174231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 175d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid RenderThemeChromiumLinux::setSelectionColors( 176d0825bca7fe65beaee391d30da42e937db621564Steve Block unsigned activeBackgroundColor, 177d0825bca7fe65beaee391d30da42e937db621564Steve Block unsigned activeForegroundColor, 178d0825bca7fe65beaee391d30da42e937db621564Steve Block unsigned inactiveBackgroundColor, 179d0825bca7fe65beaee391d30da42e937db621564Steve Block unsigned inactiveForegroundColor) 180d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 181d0825bca7fe65beaee391d30da42e937db621564Steve Block m_activeSelectionBackgroundColor = activeBackgroundColor; 182d0825bca7fe65beaee391d30da42e937db621564Steve Block m_activeSelectionForegroundColor = activeForegroundColor; 183d0825bca7fe65beaee391d30da42e937db621564Steve Block m_inactiveSelectionBackgroundColor = inactiveBackgroundColor; 184d0825bca7fe65beaee391d30da42e937db621564Steve Block m_inactiveSelectionForegroundColor = inactiveForegroundColor; 185d0825bca7fe65beaee391d30da42e937db621564Steve Block} 186d0825bca7fe65beaee391d30da42e937db621564Steve Block 187ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool RenderThemeChromiumLinux::paintCheckbox(RenderObject* o, const PaintInfo& i, const IntRect& rect) 188ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 189ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::ThemePaintExtraParams extraParams; 190ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.button.checked = isChecked(o); 191ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.button.indeterminate = isIndeterminate(o); 192ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 193ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::paintThemePart(i.context, PlatformBridge::PartCheckbox, getWebThemeState(this, o), rect, &extraParams); 194ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return false; 195ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 196ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 197ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid RenderThemeChromiumLinux::setCheckboxSize(RenderStyle* style) const 198ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 199ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // If the width and height are both specified, then we have nothing to do. 200ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto()) 201ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 202ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 203ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch IntSize size = PlatformBridge::getThemePartSize(PlatformBridge::PartCheckbox); 204ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch setSizeIfAuto(style, size); 205ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 206ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 207ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool RenderThemeChromiumLinux::paintRadio(RenderObject* o, const PaintInfo& i, const IntRect& rect) 208ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 209ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::ThemePaintExtraParams extraParams; 210ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.button.checked = isChecked(o); 211ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 212ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::paintThemePart(i.context, PlatformBridge::PartRadio, getWebThemeState(this, o), rect, &extraParams); 213ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return false; 214ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 215ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 216ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid RenderThemeChromiumLinux::setRadioSize(RenderStyle* style) const 217ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 218ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // If the width and height are both specified, then we have nothing to do. 219ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto()) 220ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return; 221ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 222ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch IntSize size = PlatformBridge::getThemePartSize(PlatformBridge::PartRadio); 223ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch setSizeIfAuto(style, size); 224ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 225ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 226ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool RenderThemeChromiumLinux::paintButton(RenderObject* o, const PaintInfo& i, const IntRect& rect) 227ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 228ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::ThemePaintExtraParams extraParams; 229ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.button.isDefault = isDefault(o); 23081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch extraParams.button.hasBorder = true; 231ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.button.backgroundColor = defaultButtonBackgroundColor; 232ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (o->hasBackground()) 233ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.button.backgroundColor = o->style()->visitedDependentColor(CSSPropertyBackgroundColor).rgb(); 234ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 235ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::paintThemePart(i.context, PlatformBridge::PartButton, getWebThemeState(this, o), rect, &extraParams); 236ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return false; 237ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 238ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 239ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool RenderThemeChromiumLinux::paintTextField(RenderObject* o, const PaintInfo& i, const IntRect& rect) 240ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 241ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // WebThemeEngine does not handle border rounded corner and background image 242ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // so return true to draw CSS border and background. 243ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (o->style()->hasBorderRadius() || o->style()->hasBackgroundImage()) 244ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return true; 245ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 246ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch ControlPart part = o->style()->appearance(); 247ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 248ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::ThemePaintExtraParams extraParams; 249ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.textField.isTextArea = part == TextAreaPart; 250ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.textField.isListbox = part == ListboxPart; 251ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 252ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Fallback to white if the specified color object is invalid. 253ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch Color backgroundColor(Color::white); 254ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (o->style()->visitedDependentColor(CSSPropertyBackgroundColor).isValid()) 255ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch backgroundColor = o->style()->visitedDependentColor(CSSPropertyBackgroundColor); 256ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.textField.backgroundColor = backgroundColor.rgb(); 257ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 258ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::paintThemePart(i.context, PlatformBridge::PartTextField, getWebThemeState(this, o), rect, &extraParams); 259ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return false; 260ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 261ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 262ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool RenderThemeChromiumLinux::paintMenuList(RenderObject* o, const PaintInfo& i, const IntRect& rect) 263ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 26481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!o->isBox()) 26581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return false; 26681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 267ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch const int right = rect.x() + rect.width(); 268ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch const int middle = rect.y() + rect.height() / 2; 269ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 270ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::ThemePaintExtraParams extraParams; 271ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.menuList.arrowX = (o->style()->direction() == RTL) ? rect.x() + 7 : right - 13; 272ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.menuList.arrowY = middle; 27381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch const RenderBox* box = toRenderBox(o); 27481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Match Chromium Win behaviour of showing all borders if any are shown. 27581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch extraParams.menuList.hasBorder = box->borderRight() || box->borderLeft() || box->borderTop() || box->borderBottom(); 27681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch extraParams.menuList.hasBorderRadius = o->style()->hasBorderRadius(); 2772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Fallback to transparent if the specified color object is invalid. 2782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch extraParams.menuList.backgroundColor = Color::transparent; 279ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (o->hasBackground()) 280ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.menuList.backgroundColor = o->style()->visitedDependentColor(CSSPropertyBackgroundColor).rgb(); 281ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 282ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::paintThemePart(i.context, PlatformBridge::PartMenuList, getWebThemeState(this, o), rect, &extraParams); 283ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return false; 284ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 285ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 286ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool RenderThemeChromiumLinux::paintSliderTrack(RenderObject* o, const PaintInfo& i, const IntRect& rect) 287ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 288ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::ThemePaintExtraParams extraParams; 289ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.slider.vertical = o->style()->appearance() == SliderVerticalPart; 290ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 291ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::paintThemePart(i.context, PlatformBridge::PartSliderTrack, getWebThemeState(this, o), rect, &extraParams); 292ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return false; 293ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 294ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 295ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool RenderThemeChromiumLinux::paintSliderThumb(RenderObject* o, const PaintInfo& i, const IntRect& rect) 296ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 297ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::ThemePaintExtraParams extraParams; 298ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.slider.vertical = o->style()->appearance() == SliderThumbVerticalPart; 299ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.slider.inDrag = toRenderSlider(o->parent())->inDragMode(); 300ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 301ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::paintThemePart(i.context, PlatformBridge::PartSliderThumb, getWebThemeState(this, o), rect, &extraParams); 302ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return false; 303ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 304ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 305967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid RenderThemeChromiumLinux::adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle* style, Element*) const 306643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 307ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch IntSize size = PlatformBridge::getThemePartSize(PlatformBridge::PartInnerSpinButton); 308ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 309ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch style->setWidth(Length(size.width(), Fixed)); 310ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch style->setMinWidth(Length(size.width(), Fixed)); 311967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 312967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 313ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool RenderThemeChromiumLinux::paintInnerSpinButton(RenderObject* o, const PaintInfo& i, const IntRect& rect) 314967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 315ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::ThemePaintExtraParams extraParams; 316ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.innerSpin.spinUp = (controlStatesForRenderer(o) & SpinUpState); 317ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.innerSpin.readOnly = isReadOnlyControl(o); 318967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 319ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::paintThemePart(i.context, PlatformBridge::PartInnerSpinButton, getWebThemeState(this, o), rect, &extraParams); 320ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return false; 321ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 322ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 323ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#if ENABLE(PROGRESS_TAG) 324ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 325ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool RenderThemeChromiumLinux::paintProgressBar(RenderObject* o, const PaintInfo& i, const IntRect& rect) 326ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 327ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!o->isProgress()) 328ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return true; 329967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 330ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch RenderProgress* renderProgress = toRenderProgress(o); 331ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch IntRect valueRect = progressValueRectFor(renderProgress, rect); 332ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 333ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::ThemePaintExtraParams extraParams; 334ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.progressBar.determinate = renderProgress->isDeterminate(); 335ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.progressBar.valueRectX = valueRect.x(); 336ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.progressBar.valueRectY = valueRect.y(); 337ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.progressBar.valueRectWidth = valueRect.width(); 338ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch extraParams.progressBar.valueRectHeight = valueRect.height(); 339ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 340ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PlatformBridge::paintThemePart(i.context, PlatformBridge::PartProgressBar, getWebThemeState(this, o), rect, &extraParams); 341967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return false; 342643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 343643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 344ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#endif 345ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 3460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} // namespace WebCore 347