15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This file is part of the theme implementation for form controls in WebCore.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Computer, Inc.
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA.
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
2353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderTheme.h"
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
255d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/CSSValueKeywords.h"
265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/HTMLNames.h"
275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/InputTypeNames.h"
2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h"
2993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "core/dom/shadow/ElementShadow.h"
3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/FrameSelection.h"
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/fileapi/FileList.h"
32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h"
3393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "core/html/HTMLCollection.h"
3493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "core/html/HTMLDataListElement.h"
359e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "core/html/HTMLDataListOptionsCollection.h"
3610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/html/HTMLFormControlElement.h"
3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLInputElement.h"
3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLMeterElement.h"
3993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "core/html/HTMLOptionElement.h"
4093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "core/html/parser/HTMLParserIdioms.h"
4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/shadow/MediaControlElements.h"
42e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/html/shadow/ShadowElementNames.h"
4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/shadow/SpinButtonElement.h"
4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/shadow/TextControlInnerElements.h"
4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FocusController.h"
4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h"
4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/Settings.h"
4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/PaintInfo.h"
4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderMeter.h"
5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderView.h"
5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/RenderStyle.h"
521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/FileMetadata.h"
531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/FloatConversion.h"
545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "platform/RuntimeEnabledFeatures.h"
55f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "platform/fonts/FontSelector.h"
56a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContextStateSaver.h"
571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/text/PlatformLocale.h"
58a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/text/StringTruncator.h"
595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/Platform.h"
605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebFallbackThemeEngine.h"
615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h"
620019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#include "wtf/text/StringBuilder.h"
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The methods in this file are shared by all themes on every platform.
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
66c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames;
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
70e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)static WebFallbackThemeEngine::State getWebFallbackThemeState(const RenderTheme* theme, const RenderObject* o)
7193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
7293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (!theme->isEnabled(o))
73e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        return WebFallbackThemeEngine::StateDisabled;
7493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (theme->isPressed(o))
75e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        return WebFallbackThemeEngine::StatePressed;
7693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (theme->isHovered(o))
77e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        return WebFallbackThemeEngine::StateHover;
7893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
79e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return WebFallbackThemeEngine::StateNormal;
8093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
8193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)RenderTheme::RenderTheme()
8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    : m_hasCustomFocusRingColor(false)
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if USE(NEW_THEME)
8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    , m_platformTheme(platformTheme())
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void RenderTheme::adjustStyle(RenderStyle* style, Element* e, const CachedUAStyle* uaStyle)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Force inline and table display styles to be inline-block (except for table- which is block)
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ControlPart part = style->appearance();
94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (style->display() == INLINE || style->display() == INLINE_TABLE || style->display() == TABLE_ROW_GROUP
95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        || style->display() == TABLE_HEADER_GROUP || style->display() == TABLE_FOOTER_GROUP
96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        || style->display() == TABLE_ROW || style->display() == TABLE_COLUMN_GROUP || style->display() == TABLE_COLUMN
97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        || style->display() == TABLE_CELL || style->display() == TABLE_CAPTION)
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        style->setDisplay(INLINE_BLOCK);
9919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)    else if (style->display() == LIST_ITEM || style->display() == TABLE)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        style->setDisplay(BLOCK);
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    if (uaStyle && uaStyle->hasAppearance && isControlStyled(style, uaStyle)) {
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (part == MenulistPart) {
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            style->setAppearance(MenulistButtonPart);
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            part = MenulistButtonPart;
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            style->setAppearance(NoControlPart);
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!style->hasAppearance())
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (shouldUseFallbackTheme(style)) {
1145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        adjustStyleUsingFallbackTheme(style, e);
11593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        return;
11693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    }
11793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if USE(NEW_THEME)
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (part) {
120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CheckboxPart:
121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case InnerSpinButtonPart:
122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RadioPart:
123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case PushButtonPart:
124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SquareButtonPart:
125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ButtonPart: {
126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // Border
127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        LengthBox borderBox(style->borderTopWidth(), style->borderRightWidth(), style->borderBottomWidth(), style->borderLeftWidth());
128a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        borderBox = m_platformTheme->controlBorder(part, style->font().fontDescription(), borderBox, style->effectiveZoom());
129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (borderBox.top().value() != static_cast<int>(style->borderTopWidth())) {
130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (borderBox.top().value())
131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                style->setBorderTopWidth(borderBox.top().value());
132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            else
133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                style->resetBorderTop();
134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (borderBox.right().value() != static_cast<int>(style->borderRightWidth())) {
136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (borderBox.right().value())
137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                style->setBorderRightWidth(borderBox.right().value());
138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            else
139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                style->resetBorderRight();
140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (borderBox.bottom().value() != static_cast<int>(style->borderBottomWidth())) {
142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            style->setBorderBottomWidth(borderBox.bottom().value());
143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (borderBox.bottom().value())
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                style->setBorderBottomWidth(borderBox.bottom().value());
145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            else
146926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                style->resetBorderBottom();
147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (borderBox.left().value() != static_cast<int>(style->borderLeftWidth())) {
149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            style->setBorderLeftWidth(borderBox.left().value());
150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (borderBox.left().value())
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                style->setBorderLeftWidth(borderBox.left().value());
152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            else
153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                style->resetBorderLeft();
154926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
156926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // Padding
157a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        LengthBox paddingBox = m_platformTheme->controlPadding(part, style->font().fontDescription(), style->paddingBox(), style->effectiveZoom());
158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (paddingBox != style->paddingBox())
159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            style->setPaddingBox(paddingBox);
160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // Whitespace
162c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        if (m_platformTheme->controlRequiresPreWhiteSpace(part))
163926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            style->setWhiteSpace(PRE);
16402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // Width / Height
166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // The width and height here are affected by the zoom.
167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // FIXME: Check is flawed, since it doesn't take min-width/max-width into account.
168a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        LengthSize controlSize = m_platformTheme->controlSize(part, style->font().fontDescription(), LengthSize(style->width(), style->height()), style->effectiveZoom());
169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (controlSize.width() != style->width())
170926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            style->setWidth(controlSize.width());
171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (controlSize.height() != style->height())
172926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            style->setHeight(controlSize.height());
17302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
174926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // Min-Width / Min-Height
175a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        LengthSize minControlSize = m_platformTheme->minimumControlSize(part, style->font().fontDescription(), style->effectiveZoom());
176926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (minControlSize.width() != style->minWidth())
177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            style->setMinWidth(minControlSize.width());
178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (minControlSize.height() != style->minHeight())
179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            style->setMinHeight(minControlSize.height());
18002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
181926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // Font
182a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        FontDescription controlFont = m_platformTheme->controlFont(part, style->font().fontDescription(), style->effectiveZoom());
183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (controlFont != style->font().fontDescription()) {
184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            // Reset our line-height
185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            style->setLineHeight(RenderStyle::initialLineHeight());
186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
187926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            // Now update our font.
188926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (style->setFontDescription(controlFont))
189d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                style->font().update(nullptr);
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
191926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
192926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    default:
193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        break;
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Call the appropriate style adjustment method based off the appearance value.
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (style->appearance()) {
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if !USE(NEW_THEME)
200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CheckboxPart:
2015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustCheckboxStyle(style, e);
202926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RadioPart:
2035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustRadioStyle(style, e);
204926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case PushButtonPart:
205926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SquareButtonPart:
206926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ButtonPart:
2075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustButtonStyle(style, e);
208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case InnerSpinButtonPart:
2095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustInnerSpinButtonStyle(style, e);
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
211926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MenulistPart:
2125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustMenuListStyle(style, e);
213926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MenulistButtonPart:
2145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustMenuListButtonStyle(style, e);
215926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderThumbHorizontalPart:
216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderThumbVerticalPart:
2175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustSliderThumbStyle(style, e);
218926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldPart:
2195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustSearchFieldStyle(style, e);
220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldCancelButtonPart:
2215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustSearchFieldCancelButtonStyle(style, e);
222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldDecorationPart:
2235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustSearchFieldDecorationStyle(style, e);
224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldResultsDecorationPart:
2255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustSearchFieldResultsDecorationStyle(style, e);
226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    default:
227926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        break;
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::paint(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ControlPart part = o->style()->appearance();
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
23593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (shouldUseFallbackTheme(o->style()))
23693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        return paintUsingFallbackTheme(o, paintInfo, r);
23793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if USE(NEW_THEME)
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (part) {
240926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CheckboxPart:
241926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RadioPart:
242926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case PushButtonPart:
243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SquareButtonPart:
244926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ButtonPart:
245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case InnerSpinButtonPart:
246c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        m_platformTheme->paint(part, controlStatesForRenderer(o), const_cast<GraphicsContext*>(paintInfo.context), r, o->style()->effectiveZoom(), o->view()->frameView());
247926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return false;
248926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    default:
249926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        break;
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Call the appropriate paint method based off the appearance value.
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (part) {
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if !USE(NEW_THEME)
256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CheckboxPart:
257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintCheckbox(o, paintInfo, r);
258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RadioPart:
259926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintRadio(o, paintInfo, r);
260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case PushButtonPart:
261926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SquareButtonPart:
262926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ButtonPart:
263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintButton(o, paintInfo, r);
264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case InnerSpinButtonPart:
265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintInnerSpinButton(o, paintInfo, r);
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MenulistPart:
268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMenuList(o, paintInfo, r);
269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MeterPart:
270926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RelevancyLevelIndicatorPart:
271926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ContinuousCapacityLevelIndicatorPart:
272926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case DiscreteCapacityLevelIndicatorPart:
273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RatingLevelIndicatorPart:
274926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMeter(o, paintInfo, r);
275926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ProgressBarPart:
276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintProgressBar(o, paintInfo, r);
277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderHorizontalPart:
278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderVerticalPart:
279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintSliderTrack(o, paintInfo, r);
280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderThumbHorizontalPart:
281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderThumbVerticalPart:
282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintSliderThumb(o, paintInfo, r);
283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaEnterFullscreenButtonPart:
284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaExitFullscreenButtonPart:
285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaFullscreenButton(o, paintInfo, r);
286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaPlayButtonPart:
287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaPlayButton(o, paintInfo, r);
288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaOverlayPlayButtonPart:
289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaOverlayPlayButton(o, paintInfo, r);
290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaMuteButtonPart:
291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaMuteButton(o, paintInfo, r);
292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaToggleClosedCaptionsButtonPart:
293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaToggleClosedCaptionsButton(o, paintInfo, r);
294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaSliderPart:
295926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaSliderTrack(o, paintInfo, r);
296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaSliderThumbPart:
297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaSliderThumb(o, paintInfo, r);
298926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaVolumeSliderContainerPart:
299926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaVolumeSliderContainer(o, paintInfo, r);
300926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaVolumeSliderPart:
301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaVolumeSliderTrack(o, paintInfo, r);
302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaVolumeSliderThumbPart:
303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaVolumeSliderThumb(o, paintInfo, r);
304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaFullScreenVolumeSliderPart:
305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaFullScreenVolumeSliderTrack(o, paintInfo, r);
306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaFullScreenVolumeSliderThumbPart:
307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaFullScreenVolumeSliderThumb(o, paintInfo, r);
308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaTimeRemainingPart:
309926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaTimeRemaining(o, paintInfo, r);
310926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaCurrentTimePart:
311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaCurrentTime(o, paintInfo, r);
312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MediaControlsBackgroundPart:
313926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMediaControlsBackground(o, paintInfo, r);
3147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    case MediaCastOffButtonPart:
3157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return paintMediaCastButton(o, paintInfo, r);
3167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    case MediaOverlayCastOffButtonPart:
3177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return paintMediaCastButton(o, paintInfo, r);
318926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MenulistButtonPart:
319926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case TextFieldPart:
320926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case TextAreaPart:
321926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return true;
322926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldPart:
323926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintSearchField(o, paintInfo, r);
324926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldCancelButtonPart:
325926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintSearchFieldCancelButton(o, paintInfo, r);
326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldDecorationPart:
327926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintSearchFieldDecoration(o, paintInfo, r);
328926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldResultsDecorationPart:
329926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintSearchFieldResultsDecoration(o, paintInfo, r);
330926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    default:
331926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        break;
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true; // We don't support the appearance, so let the normal background/border paint.
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::paintBorderOnly(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Call the appropriate paint method based off the appearance value.
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (o->style()->appearance()) {
341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case TextFieldPart:
342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintTextField(o, paintInfo, r);
343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case TextAreaPart:
344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintTextArea(o, paintInfo, r);
345926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MenulistButtonPart:
346926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldPart:
347197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    case ListboxPart:
348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return true;
349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CheckboxPart:
350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RadioPart:
351926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case PushButtonPart:
352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SquareButtonPart:
353926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ButtonPart:
354926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MenulistPart:
355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MeterPart:
356926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RelevancyLevelIndicatorPart:
357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ContinuousCapacityLevelIndicatorPart:
358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case DiscreteCapacityLevelIndicatorPart:
359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RatingLevelIndicatorPart:
360926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ProgressBarPart:
361926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderHorizontalPart:
362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderVerticalPart:
363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderThumbHorizontalPart:
364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderThumbVerticalPart:
365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldCancelButtonPart:
366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldDecorationPart:
367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldResultsDecorationPart:
368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    default:
369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        break;
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::paintDecorations(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r)
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Call the appropriate paint method based off the appearance value.
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (o->style()->appearance()) {
379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MenulistButtonPart:
380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return paintMenuListButton(o, paintInfo, r);
381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case TextFieldPart:
382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case TextAreaPart:
383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CheckboxPart:
384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RadioPart:
385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case PushButtonPart:
386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SquareButtonPart:
387926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ButtonPart:
388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MenulistPart:
389926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MeterPart:
390926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RelevancyLevelIndicatorPart:
391926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ContinuousCapacityLevelIndicatorPart:
392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case DiscreteCapacityLevelIndicatorPart:
393926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RatingLevelIndicatorPart:
394926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ProgressBarPart:
395926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderHorizontalPart:
396926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderVerticalPart:
397926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderThumbHorizontalPart:
398926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SliderThumbVerticalPart:
399926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldPart:
400926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldCancelButtonPart:
401926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldDecorationPart:
402926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SearchFieldResultsDecorationPart:
403926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    default:
404926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        break;
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
41093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)String RenderTheme::extraDefaultStyleSheet()
41193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
41293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    StringBuilder runtimeCSS;
4137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (RuntimeEnabledFeatures::contextMenuEnabled())
414e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        runtimeCSS.appendLiteral("menu[type=\"popup\" i] { display: none; }");
41593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    return runtimeCSS.toString();
41693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
41793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String RenderTheme::formatMediaControlsTime(float time) const
4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
420926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!std::isfinite(time))
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        time = 0;
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int seconds = (int)fabsf(time);
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int hours = seconds / (60 * 60);
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int minutes = (seconds / 60) % 60;
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    seconds %= 60;
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (hours) {
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (hours > 9)
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return String::format("%s%02d:%02d:%02d", (time < 0 ? "-" : ""), hours, minutes, seconds);
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String::format("%s%01d:%02d:%02d", (time < 0 ? "-" : ""), hours, minutes, seconds);
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return String::format("%s%02d:%02d", (time < 0 ? "-" : ""), minutes, seconds);
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String RenderTheme::formatMediaControlsCurrentTime(float currentTime, float /*duration*/) const
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return formatMediaControlsTime(currentTime);
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::activeSelectionBackgroundColor() const
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
44309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return platformActiveSelectionBackgroundColor().blendWithWhite();
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::inactiveSelectionBackgroundColor() const
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
44809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return platformInactiveSelectionBackgroundColor().blendWithWhite();
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::activeSelectionForegroundColor() const
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
45309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return platformActiveSelectionForegroundColor();
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::inactiveSelectionForegroundColor() const
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
45809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return platformInactiveSelectionForegroundColor();
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::activeListBoxSelectionBackgroundColor() const
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
46309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return platformActiveListBoxSelectionBackgroundColor();
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::inactiveListBoxSelectionBackgroundColor() const
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
46809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return platformInactiveListBoxSelectionBackgroundColor();
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::activeListBoxSelectionForegroundColor() const
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
47309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return platformActiveListBoxSelectionForegroundColor();
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::inactiveListBoxSelectionForegroundColor() const
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
47809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return platformInactiveListBoxSelectionForegroundColor();
4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformActiveSelectionBackgroundColor() const
4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Use a blue color by default if the platform theme doesn't define anything.
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return Color(0, 0, 255);
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformActiveSelectionForegroundColor() const
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Use a white color by default if the platform theme doesn't define anything.
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return Color::white;
4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformInactiveSelectionBackgroundColor() const
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Use a grey color by default if the platform theme doesn't define anything.
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // This color matches Firefox's inactive color.
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return Color(176, 176, 176);
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformInactiveSelectionForegroundColor() const
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Use a black color by default.
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return Color::black;
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformActiveListBoxSelectionBackgroundColor() const
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return platformActiveSelectionBackgroundColor();
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformActiveListBoxSelectionForegroundColor() const
5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return platformActiveSelectionForegroundColor();
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformInactiveListBoxSelectionBackgroundColor() const
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return platformInactiveSelectionBackgroundColor();
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformInactiveListBoxSelectionForegroundColor() const
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return platformInactiveSelectionForegroundColor();
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int RenderTheme::baselinePosition(const RenderObject* o) const
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!o->isBox())
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const RenderBox* box = toRenderBox(o);
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if USE(NEW_THEME)
534c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    return box->height() + box->marginTop() + m_platformTheme->baselinePositionAdjustment(o->style()->appearance()) * o->style()->effectiveZoom();
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return box->height() + box->marginTop();
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isControlContainer(ControlPart appearance) const
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // There are more leaves than this, but we'll patch this function as we add support for
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // more controls.
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return appearance != CheckboxPart && appearance != RadioPart;
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
547e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochstatic bool isBackgroundOrBorderStyled(const RenderStyle& style, const CachedUAStyle& uaStyle)
54853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
5495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // Code below excludes the background-repeat from comparison by resetting it
550e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    FillLayer backgroundCopy = uaStyle.backgroundLayers;
551197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    FillLayer backgroundLayersCopy = style.backgroundLayers();
5525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    backgroundCopy.setRepeatX(NoRepeatFill);
5535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    backgroundCopy.setRepeatY(NoRepeatFill);
5545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    backgroundLayersCopy.setRepeatX(NoRepeatFill);
5555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    backgroundLayersCopy.setRepeatY(NoRepeatFill);
55653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    // Test the style to see if the UA border and background match.
557e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    return style.border() != uaStyle.border
5585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        || backgroundLayersCopy != backgroundCopy
5598abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        || style.visitedDependentColor(CSSPropertyBackgroundColor) != uaStyle.backgroundColor;
56053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
56153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
5625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)bool RenderTheme::isControlStyled(const RenderStyle* style, const CachedUAStyle* uaStyle) const
5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    ASSERT(uaStyle);
5655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (style->appearance()) {
567926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case PushButtonPart:
568926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case SquareButtonPart:
569926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ButtonPart:
570926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ProgressBarPart:
571926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case MeterPart:
572926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RelevancyLevelIndicatorPart:
573926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case ContinuousCapacityLevelIndicatorPart:
574926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case DiscreteCapacityLevelIndicatorPart:
575926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case RatingLevelIndicatorPart:
5765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        return isBackgroundOrBorderStyled(*style, *uaStyle);
57753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
57853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    case MenulistPart:
57953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    case SearchFieldPart:
580926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case TextAreaPart:
58153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    case TextFieldPart:
5825d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        return isBackgroundOrBorderStyled(*style, *uaStyle) || style->boxShadow();
58353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
58453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    case SliderHorizontalPart:
58553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    case SliderVerticalPart:
58653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return style->boxShadow();
58753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
588926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    default:
589926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return false;
5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5939e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)void RenderTheme::adjustPaintInvalidationRect(const RenderObject* o, IntRect& r)
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if USE(NEW_THEME)
596c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    m_platformTheme->inflateControlPaintRect(o->style()->appearance(), controlStatesForRenderer(o), r, o->style()->effectiveZoom());
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
600591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochbool RenderTheme::shouldDrawDefaultFocusRing(RenderObject* renderer) const
601591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{
602591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (supportsFocusRing(renderer->style()))
603591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
604591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    Node* node = renderer->node();
605591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (!node)
606591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return true;
6077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (!renderer->style()->hasAppearance() && !node->isLink())
6087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return true;
609591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    // We can't use RenderTheme::isFocused because outline:auto might be
610591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    // specified to non-:focus rulesets.
611591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    if (node->focused() && !node->shouldHaveFocusAppearance())
612591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        return false;
613591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    return true;
614591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch}
615591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::supportsFocusRing(const RenderStyle* style) const
6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return (style->hasAppearance() && style->appearance() != TextFieldPart && style->appearance() != TextAreaPart && style->appearance() != MenulistButtonPart && style->appearance() != ListboxPart);
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::stateChanged(RenderObject* o, ControlState state) const
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Default implementation assumes the controls don't respond to changes in :hover state
624d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    if (state == HoverControlState && !supportsHover(o->style()))
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Assume pressed state is only responded to if the control is enabled.
628d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    if (state == PressedControlState && !isEnabled(o))
6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6319e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    o->setShouldDoFullPaintInvalidation(true);
6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ControlStates RenderTheme::controlStatesForRenderer(const RenderObject* o) const
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ControlStates result = 0;
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (isHovered(o)) {
639d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        result |= HoverControlState;
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (isSpinUpButtonPartHovered(o))
641d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            result |= SpinUpControlState;
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (isPressed(o)) {
644d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        result |= PressedControlState;
6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (isSpinUpButtonPartPressed(o))
646d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            result |= SpinUpControlState;
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (isFocused(o) && o->style()->outlineStyleIsAuto())
649d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        result |= FocusControlState;
6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (isEnabled(o))
651d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        result |= EnabledControlState;
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (isChecked(o))
653d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        result |= CheckedControlState;
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (isReadOnlyControl(o))
655d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        result |= ReadOnlyControlState;
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!isActive(o))
657d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        result |= WindowInactiveControlState;
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (isIndeterminate(o))
659d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        result |= IndeterminateControlState;
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result;
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isActive(const RenderObject* o) const
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* node = o->node();
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node)
6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6698abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    Page* page = node->document().page();
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!page)
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6733c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    return page->focusController().isActive();
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isChecked(const RenderObject* o) const
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
678d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    if (!isHTMLInputElement(o->node()))
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
680521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    return toHTMLInputElement(o->node())->shouldAppearChecked();
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isIndeterminate(const RenderObject* o) const
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
685d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    if (!isHTMLInputElement(o->node()))
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
687521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    return toHTMLInputElement(o->node())->shouldAppearIndeterminate();
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isEnabled(const RenderObject* o) const
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* node = o->node();
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node || !node->isElementNode())
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
69553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return !toElement(node)->isDisabledFormControl();
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isFocused(const RenderObject* o) const
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* node = o->node();
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node)
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    node = node->focusDelegate();
7058abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    Document& document = node->document();
706d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    LocalFrame* frame = document.frame();
70710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    return node == document.focusedElement() && node->focused() && node->shouldHaveFocusAppearance() && frame && frame->selection().isFocusedAndActive();
7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isPressed(const RenderObject* o) const
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!o->node())
7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return o->node()->active();
7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isSpinUpButtonPartPressed(const RenderObject* o) const
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* node = o->node();
7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node || !node->active() || !node->isElementNode()
721926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        || !toElement(node)->isSpinButtonElement())
7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
72306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    SpinButtonElement* element = toSpinButtonElement(node);
7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return element->upDownState() == SpinButtonElement::Up;
7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isReadOnlyControl(const RenderObject* o) const
7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* node = o->node();
73010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    if (!node || !node->isElementNode() || !toElement(node)->isFormControlElement())
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
73210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    HTMLFormControlElement* element = toHTMLFormControlElement(node);
73310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    return element->isReadOnly();
7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isHovered(const RenderObject* o) const
7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* node = o->node();
7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!node)
7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
741926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!node->isElementNode() || !toElement(node)->isSpinButtonElement())
7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return node->hovered();
74306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    SpinButtonElement* element = toSpinButtonElement(node);
7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return element->hovered() && element->upDownState() != SpinButtonElement::Indeterminate;
7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::isSpinUpButtonPartHovered(const RenderObject* o) const
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* node = o->node();
750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!node || !node->isElementNode() || !toElement(node)->isSpinButtonElement())
7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
75206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    SpinButtonElement* element = toSpinButtonElement(node);
7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return element->upDownState() == SpinButtonElement::Up;
7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if !USE(NEW_THEME)
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustCheckboxStyle(RenderStyle* style, Element*) const
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // A summary of the rules for checkbox designed to match WinIE:
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // width/height - honored (WinIE actually scales its control for small widths, but lets it overflow for small heights.)
7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // font-size - not honored (control has no text), but we use it to decide which control size to use.
7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setCheckboxSize(style);
7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // padding - not honored by WinIE, needs to be removed.
7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    style->resetPadding();
7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // border - honored by WinIE, but looks terrible (just paints in the control box and turns off the Windows XP theme)
7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // for now, we will not honor it.
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    style->resetBorder();
7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustRadioStyle(RenderStyle* style, Element*) const
7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // A summary of the rules for checkbox designed to match WinIE:
7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // width/height - honored (WinIE actually scales its control for small widths, but lets it overflow for small heights.)
7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // font-size - not honored (control has no text), but we use it to decide which control size to use.
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setRadioSize(style);
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // padding - not honored by WinIE, needs to be removed.
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    style->resetPadding();
7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // border - honored by WinIE, but looks terrible (just paints in the control box and turns off the Windows XP theme)
7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // for now, we will not honor it.
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    style->resetBorder();
7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustButtonStyle(RenderStyle* style, Element*) const
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustInnerSpinButtonStyle(RenderStyle*, Element*) const
7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustMenuListStyle(RenderStyle*, Element*) const
7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntSize RenderTheme::meterSizeForBounds(const RenderMeter*, const IntRect& bounds) const
8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return bounds.size();
8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::supportsMeter(ControlPart) const
8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::paintMeter(RenderObject*, const PaintInfo&, const IntRect&)
8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void RenderTheme::paintSliderTicks(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect)
8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Node* node = o->node();
819d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    if (!isHTMLInputElement(node))
8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
822521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    HTMLInputElement* input = toHTMLInputElement(node);
8237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (input->type() != InputTypeNames::range)
82407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        return;
82507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
826521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    HTMLDataListElement* dataList = input->dataList();
8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!dataList)
8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    double min = input->minimum();
8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    double max = input->maximum();
8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ControlPart part = o->style()->appearance();
8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // We don't support ticks on alternate sliders like MediaVolumeSliders.
8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (part !=  SliderHorizontalPart && part != SliderVerticalPart)
8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool isHorizontal = part ==  SliderHorizontalPart;
8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntSize thumbSize;
839e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    RenderObject* thumbRenderer = input->userAgentShadowRoot()->getElementById(ShadowElementNames::sliderThumb())->renderer();
8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (thumbRenderer) {
8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RenderStyle* thumbStyle = thumbRenderer->style();
8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        int thumbWidth = thumbStyle->width().intValue();
8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        int thumbHeight = thumbStyle->height().intValue();
8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        thumbSize.setWidth(isHorizontal ? thumbWidth : thumbHeight);
8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        thumbSize.setHeight(isHorizontal ? thumbHeight : thumbWidth);
8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntSize tickSize = sliderTickSize();
8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float zoomFactor = o->style()->effectiveZoom();
8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FloatRect tickRect;
8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int tickRegionSideMargin = 0;
8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int tickRegionWidth = 0;
8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntRect trackBounds;
854e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    RenderObject* trackRenderer = input->userAgentShadowRoot()->getElementById(ShadowElementNames::sliderTrack())->renderer();
8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // We can ignoring transforms because transform is handled by the graphics context.
8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (trackRenderer)
8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        trackBounds = trackRenderer->absoluteBoundingBoxRectIgnoringTransforms();
8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IntRect sliderBounds = o->absoluteBoundingBoxRectIgnoringTransforms();
8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Make position relative to the transformed ancestor element.
8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    trackBounds.setX(trackBounds.x() - sliderBounds.x() + rect.x());
8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    trackBounds.setY(trackBounds.y() - sliderBounds.y() + rect.y());
8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (isHorizontal) {
8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        tickRect.setWidth(floor(tickSize.width() * zoomFactor));
8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        tickRect.setHeight(floor(tickSize.height() * zoomFactor));
8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        tickRect.setY(floor(rect.y() + rect.height() / 2.0 + sliderTickOffsetFromTrackCenter() * zoomFactor));
868926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        tickRegionSideMargin = trackBounds.x() + (thumbSize.width() - tickSize.width() * zoomFactor) / 2.0;
869926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        tickRegionWidth = trackBounds.width() - thumbSize.width();
8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    } else {
8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        tickRect.setWidth(floor(tickSize.height() * zoomFactor));
8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        tickRect.setHeight(floor(tickSize.width() * zoomFactor));
8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        tickRect.setX(floor(rect.x() + rect.width() / 2.0 + sliderTickOffsetFromTrackCenter() * zoomFactor));
8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        tickRegionSideMargin = trackBounds.y() + (thumbSize.width() - tickSize.width() * zoomFactor) / 2.0;
875926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        tickRegionWidth = trackBounds.height() - thumbSize.width();
8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8779e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    RefPtrWillBeRawPtr<HTMLDataListOptionsCollection> options = dataList->options();
8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GraphicsContextStateSaver stateSaver(*paintInfo.context);
8797757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    paintInfo.context->setFillColor(o->resolveColor(CSSPropertyColor));
8809e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    for (unsigned i = 0; HTMLOptionElement* optionElement = options->item(i); i++) {
8819e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        String value = optionElement->value();
8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!input->isValidValue(value))
8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            continue;
8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        double parsedValue = parseToDoubleForNumberType(input->sanitizeValue(value));
8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        double tickFraction = (parsedValue - min) / (max - min);
8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        double tickRatio = isHorizontal && o->style()->isLeftToRightDirection() ? tickFraction : 1.0 - tickFraction;
8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        double tickPosition = round(tickRegionSideMargin + tickRegionWidth * tickRatio);
8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (isHorizontal)
8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            tickRect.setX(tickPosition);
8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            tickRect.setY(tickPosition);
8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        paintInfo.context->fillRect(tickRect);
8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double RenderTheme::animationRepeatIntervalForProgressBar(RenderProgress*) const
8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)double RenderTheme::animationDurationForProgressBar(RenderProgress*) const
9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return 0;
9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::shouldHaveSpinButton(HTMLInputElement* inputElement) const
9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return inputElement->isSteppable() && inputElement->type() != InputTypeNames::range;
9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustMenuListButtonStyle(RenderStyle*, Element*) const
9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustSliderThumbStyle(RenderStyle* style, Element* element) const
9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    adjustSliderThumbSize(style, element);
9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void RenderTheme::adjustSliderThumbSize(RenderStyle*, Element*) const
9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustSearchFieldStyle(RenderStyle*, Element*) const
9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustSearchFieldCancelButtonStyle(RenderStyle*, Element*) const
9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustSearchFieldDecorationStyle(RenderStyle*, Element*) const
9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustSearchFieldResultsDecorationStyle(RenderStyle*, Element*) const
9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void RenderTheme::platformColorsDidChange()
9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page::scheduleForcedStyleRecalcForAllPages();
9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)Color RenderTheme::systemColor(CSSValueID cssValueId) const
9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (cssValueId) {
948926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueActiveborder:
949926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFFFFFFF;
950926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueActivecaption:
951926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFCCCCCC;
952926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueAppworkspace:
953926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFFFFFFF;
954926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueBackground:
955926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF6363CE;
956926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueButtonface:
957926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFC0C0C0;
958926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueButtonhighlight:
959926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFDDDDDD;
960926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueButtonshadow:
961926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF888888;
962926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueButtontext:
963926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF000000;
964926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueCaptiontext:
965926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF000000;
966926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueGraytext:
967926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF808080;
968926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueHighlight:
969926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFB5D5FF;
970926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueHighlighttext:
971926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF000000;
972926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueInactiveborder:
973926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFFFFFFF;
974926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueInactivecaption:
975926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFFFFFFF;
976926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueInactivecaptiontext:
977926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF7F7F7F;
978926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueInfobackground:
979926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFFBFCC5;
980926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueInfotext:
981926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF000000;
982926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueMenu:
983926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFC0C0C0;
984926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueMenutext:
985926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF000000;
986926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueScrollbar:
987926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFFFFFFF;
988926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueText:
989926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF000000;
990926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueThreeddarkshadow:
991926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF666666;
992926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueThreedface:
993926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFC0C0C0;
994926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueThreedhighlight:
995926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFDDDDDD;
996926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueThreedlightshadow:
997926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFC0C0C0;
998926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueThreedshadow:
999926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF888888;
1000926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueWindow:
1001926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFFFFFFF;
1002926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueWindowframe:
1003926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFFCCCCCC;
1004926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case CSSValueWindowtext:
1005926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return 0xFF000000;
10065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    case CSSValueInternalActiveListBoxSelection:
10075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return activeListBoxSelectionBackgroundColor();
10085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        break;
10095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    case CSSValueInternalActiveListBoxSelectionText:
10105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return activeListBoxSelectionForegroundColor();
10115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        break;
10125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    case CSSValueInternalInactiveListBoxSelection:
10135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return inactiveListBoxSelectionBackgroundColor();
10145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        break;
10155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    case CSSValueInternalInactiveListBoxSelectionText:
10165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return inactiveListBoxSelectionForegroundColor();
10175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        break;
10185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    default:
10195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        break;
10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
102109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    ASSERT_NOT_REACHED();
10225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return Color();
10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformActiveTextSearchHighlightColor() const
10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return Color(255, 150, 50); // Orange.
10285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::platformInactiveTextSearchHighlightColor() const
10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return Color(255, 255, 0); // Yellow.
10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Color RenderTheme::tapHighlightColor()
10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1037c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    return theme().platformTapHighlightColor();
10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void RenderTheme::setCustomFocusRingColor(const Color& c)
10415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
104209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_customFocusRingColor = c;
104309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_hasCustomFocusRingColor = true;
10445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
104609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)Color RenderTheme::focusRingColor() const
10475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
104809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return m_hasCustomFocusRingColor ? m_customFocusRingColor : theme().platformFocusRingColor();
10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)String RenderTheme::fileListNameForWidth(Locale& locale, const FileList* fileList, const Font& font, int width) const
10525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (width <= 0)
10545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return String();
10555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String string;
10571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    if (fileList->isEmpty()) {
1058e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        string = locale.queryString(WebLocalizedString::FileButtonNoFileSelectedLabel);
10591e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    } else if (fileList->length() == 1) {
10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        string = fileList->item(0)->name();
10611e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    } else {
10621e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        // FIXME: Localization of fileList->length().
1063e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        return StringTruncator::rightTruncate(locale.queryString(WebLocalizedString::MultipleFileUploadText, String::number(fileList->length())), width, font);
10641e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    }
10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1066197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    return StringTruncator::centerTruncate(string, width, font);
10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool RenderTheme::shouldOpenPickerWithF4Key() const
10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
107493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
107593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)bool RenderTheme::supportsCalendarPicker(const AtomicString& type) const
107693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
107751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    return type == InputTypeNames::date
107851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        || type == InputTypeNames::datetime
107951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        || type == InputTypeNames::datetime_local
108051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        || type == InputTypeNames::month
108151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        || type == InputTypeNames::week;
108293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
108393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#endif
108493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
108593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)bool RenderTheme::shouldUseFallbackTheme(RenderStyle*) const
108693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
108793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    return false;
108893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
108993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
10905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustStyleUsingFallbackTheme(RenderStyle* style, Element* e)
109193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
109293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    ControlPart part = style->appearance();
109393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    switch (part) {
109493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    case CheckboxPart:
10955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustCheckboxStyleUsingFallbackTheme(style, e);
109693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    case RadioPart:
10975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return adjustRadioStyleUsingFallbackTheme(style, e);
109893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    default:
109993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        break;
110093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    }
110193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
110293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
110393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)bool RenderTheme::paintUsingFallbackTheme(RenderObject* o, const PaintInfo& i, const IntRect& r)
110493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
110593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    ControlPart part = o->style()->appearance();
110693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    switch (part) {
110793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    case CheckboxPart:
110893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        return paintCheckboxUsingFallbackTheme(o, i, r);
110993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    case RadioPart:
111093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        return paintRadioUsingFallbackTheme(o, i, r);
111193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    default:
111293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        break;
111393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    }
111493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    return true;
111593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
111693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
111793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)// static
111893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)void RenderTheme::setSizeIfAuto(RenderStyle* style, const IntSize& size)
111993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
112093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (style->width().isIntrinsicOrAuto())
112193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        style->setWidth(Length(size.width(), Fixed));
112293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (style->height().isAuto())
112393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        style->setHeight(Length(size.height(), Fixed));
112493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
112593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
112693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)bool RenderTheme::paintCheckboxUsingFallbackTheme(RenderObject* o, const PaintInfo& i, const IntRect& r)
112793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
1128e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    WebFallbackThemeEngine::ExtraParams extraParams;
1129e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    WebCanvas* canvas = i.context->canvas();
113093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    extraParams.button.checked = isChecked(o);
113193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    extraParams.button.indeterminate = isIndeterminate(o);
113293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
113393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    float zoomLevel = o->style()->effectiveZoom();
113493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    GraphicsContextStateSaver stateSaver(*i.context);
113593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    IntRect unzoomedRect = r;
113693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (zoomLevel != 1) {
113793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel);
113893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel);
113993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        i.context->translate(unzoomedRect.x(), unzoomedRect.y());
11405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        i.context->scale(zoomLevel, zoomLevel);
114193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        i.context->translate(-unzoomedRect.x(), -unzoomedRect.y());
114293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    }
114393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
1144e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    Platform::current()->fallbackThemeEngine()->paint(canvas, WebFallbackThemeEngine::PartCheckbox, getWebFallbackThemeState(this, o), WebRect(unzoomedRect), &extraParams);
114593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    return false;
114693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
114793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
11485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustCheckboxStyleUsingFallbackTheme(RenderStyle* style, Element*) const
114993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
115093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // If the width and height are both specified, then we have nothing to do.
115193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto())
115293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        return;
115393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
1154e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    IntSize size = Platform::current()->fallbackThemeEngine()->getSize(WebFallbackThemeEngine::PartCheckbox);
115593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    float zoomLevel = style->effectiveZoom();
115693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    size.setWidth(size.width() * zoomLevel);
115793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    size.setHeight(size.height() * zoomLevel);
115893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    setSizeIfAuto(style, size);
115993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
116093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // padding - not honored by WinIE, needs to be removed.
116193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    style->resetPadding();
116293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
116393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // border - honored by WinIE, but looks terrible (just paints in the control box and turns off the Windows XP theme)
116493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // for now, we will not honor it.
116593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    style->resetBorder();
116693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
116793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
116893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)bool RenderTheme::paintRadioUsingFallbackTheme(RenderObject* o, const PaintInfo& i, const IntRect& r)
116993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
1170e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    WebFallbackThemeEngine::ExtraParams extraParams;
1171e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    WebCanvas* canvas = i.context->canvas();
117293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    extraParams.button.checked = isChecked(o);
117393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    extraParams.button.indeterminate = isIndeterminate(o);
117493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
117593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    float zoomLevel = o->style()->effectiveZoom();
117693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    GraphicsContextStateSaver stateSaver(*i.context);
117793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    IntRect unzoomedRect = r;
117893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (zoomLevel != 1) {
117993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel);
118093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel);
118193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        i.context->translate(unzoomedRect.x(), unzoomedRect.y());
11825d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        i.context->scale(zoomLevel, zoomLevel);
118393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        i.context->translate(-unzoomedRect.x(), -unzoomedRect.y());
118493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    }
118593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
1186e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    Platform::current()->fallbackThemeEngine()->paint(canvas, WebFallbackThemeEngine::PartRadio, getWebFallbackThemeState(this, o), WebRect(unzoomedRect), &extraParams);
118793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    return false;
118893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
118993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
11905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderTheme::adjustRadioStyleUsingFallbackTheme(RenderStyle* style, Element*) const
119193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){
119293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // If the width and height are both specified, then we have nothing to do.
119393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto())
119493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        return;
119593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
1196e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    IntSize size = Platform::current()->fallbackThemeEngine()->getSize(WebFallbackThemeEngine::PartRadio);
119793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    float zoomLevel = style->effectiveZoom();
119893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    size.setWidth(size.width() * zoomLevel);
119993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    size.setHeight(size.height() * zoomLevel);
120093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    setSizeIfAuto(style, size);
120193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
120293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // padding - not honored by WinIE, needs to be removed.
120393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    style->resetPadding();
120493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
120593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // border - honored by WinIE, but looks terrible (just paints in the control box and turns off the Windows XP theme)
120693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // for now, we will not honor it.
120793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    style->resetBorder();
120893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
120993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
1210c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
1211