15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Apple Inc. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Alp Toker <alp@atoker.com> 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Collabora Ltd. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008, 2009 Google Inc. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Kenneth Rohde Christiansen 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderThemeChromiumDefault.h" 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/CSSValueKeywords.h" 295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/UserAgentStyleSheets.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/PaintInfo.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderObject.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderProgress.h" 3351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/LayoutTestSupport.h" 34f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "platform/graphics/Color.h" 35a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContext.h" 36a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContextStateSaver.h" 375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/Platform.h" 385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h" 3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebThemeEngine.h" 4051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "wtf/StdLibExtras.h" 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)static bool useMockTheme() 4551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 46197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return LayoutTestSupport::isRunningLayoutTest(); 4751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 4851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)unsigned RenderThemeChromiumDefault::m_activeSelectionBackgroundColor = 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 0xff1e90ff; 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)unsigned RenderThemeChromiumDefault::m_activeSelectionForegroundColor = 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Color::black; 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)unsigned RenderThemeChromiumDefault::m_inactiveSelectionBackgroundColor = 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 0xffc8c8c8; 55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)unsigned RenderThemeChromiumDefault::m_inactiveSelectionForegroundColor = 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 0xff323232; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)double RenderThemeChromiumDefault::m_caretBlinkInterval; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static const unsigned defaultButtonBackgroundColor = 0xffdddddd; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 62e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)static WebThemeEngine::State getWebThemeState(const RenderTheme* theme, const RenderObject* o) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!theme->isEnabled(o)) 65e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return WebThemeEngine::StateDisabled; 6651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme() && theme->isReadOnlyControl(o)) 67e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return WebThemeEngine::StateReadonly; 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (theme->isPressed(o)) 69e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return WebThemeEngine::StatePressed; 7051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme() && theme->isFocused(o)) 71e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return WebThemeEngine::StateFocused; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (theme->isHovered(o)) 73e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return WebThemeEngine::StateHover; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 75e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return WebThemeEngine::StateNormal; 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)PassRefPtr<RenderTheme> RenderThemeChromiumDefault::create() 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return adoptRef(new RenderThemeChromiumDefault()); 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 83c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)// RenderTheme::theme for Android is defined in RenderThemeChromiumAndroid.cpp. 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if !OS(ANDROID) 85c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)RenderTheme& RenderTheme::theme() 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) DEFINE_STATIC_REF(RenderTheme, renderTheme, (RenderThemeChromiumDefault::create())); 88c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return *renderTheme; 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)RenderThemeChromiumDefault::RenderThemeChromiumDefault() 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_caretBlinkInterval = RenderTheme::caretBlinkInterval(); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)RenderThemeChromiumDefault::~RenderThemeChromiumDefault() 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool RenderThemeChromiumDefault::supportsFocusRing(const RenderStyle* style) const 10251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 10351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) { 10451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // Don't use focus rings for buttons when mocking controls. 10551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return style->appearance() == ButtonPart 10651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) || style->appearance() == PushButtonPart 10751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) || style->appearance() == SquareButtonPart; 10851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 10951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 11051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return RenderThemeChromiumSkia::supportsFocusRing(style); 11151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 11251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 1135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)Color RenderThemeChromiumDefault::systemColor(CSSValueID cssValueId) const 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) static const Color defaultButtonGrayColor(0xffdddddd); 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) static const Color defaultMenuColor(0xfff7f7f7); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (cssValueId == CSSValueButtonface) { 11951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) 12051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return Color(0xc0, 0xc0, 0xc0); 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return defaultButtonGrayColor; 12251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (cssValueId == CSSValueMenu) 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return defaultMenuColor; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return RenderTheme::systemColor(cssValueId); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)String RenderThemeChromiumDefault::extraDefaultStyleSheet() 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 130197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // FIXME: We should not have OS() branches here. 131197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // We should have something like RenderThemeWin, RenderThemeLinux, or 132197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // should concatenate UA stylesheets on build time. 1338abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if !OS(WIN) 134197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return RenderThemeChromiumSkia::extraDefaultStyleSheet() + 135197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if !OS(ANDROID) 136197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch String(themeInputMultipleFieldsCss, sizeof(themeInputMultipleFieldsCss)) + 137197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif 138197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch String(themeChromiumLinuxCss, sizeof(themeChromiumLinuxCss)); 139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#else 140197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return RenderThemeChromiumSkia::extraDefaultStyleSheet() + 141197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch String(themeInputMultipleFieldsCss, sizeof(themeInputMultipleFieldsCss)); 142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Color RenderThemeChromiumDefault::activeListBoxSelectionBackgroundColor() const 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return Color(0x28, 0x28, 0x28); 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Color RenderThemeChromiumDefault::activeListBoxSelectionForegroundColor() const 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return Color::black; 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Color RenderThemeChromiumDefault::inactiveListBoxSelectionBackgroundColor() const 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return Color(0xc8, 0xc8, 0xc8); 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Color RenderThemeChromiumDefault::inactiveListBoxSelectionForegroundColor() const 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return Color(0x32, 0x32, 0x32); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Color RenderThemeChromiumDefault::platformActiveSelectionBackgroundColor() const 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) 16851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return Color(0x00, 0x00, 0xff); // Royal blue. 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_activeSelectionBackgroundColor; 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 172926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Color RenderThemeChromiumDefault::platformInactiveSelectionBackgroundColor() const 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) 17551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return Color(0x99, 0x99, 0x99); // Medium gray. 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inactiveSelectionBackgroundColor; 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Color RenderThemeChromiumDefault::platformActiveSelectionForegroundColor() const 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 18151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) 18251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return Color(0xff, 0xff, 0xcc); // Pale yellow. 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_activeSelectionForegroundColor; 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Color RenderThemeChromiumDefault::platformInactiveSelectionForegroundColor() const 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 18851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) 18951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return Color::white; 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_inactiveSelectionForegroundColor; 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)IntSize RenderThemeChromiumDefault::sliderTickSize() const 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 19551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) 19651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return IntSize(1, 3); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntSize(1, 6); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)int RenderThemeChromiumDefault::sliderTickOffsetFromTrackCenter() const 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 20251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) 20351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return 11; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return -16; 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 207926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void RenderThemeChromiumDefault::adjustSliderThumbSize(RenderStyle* style, Element* element) const 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 209e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) IntSize size = Platform::current()->themeEngine()->getSize(WebThemeEngine::PartSliderThumb); 21051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 21151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // FIXME: Mock theme doesn't handle zoomed sliders. 21251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) float zoomLevel = useMockTheme() ? 1 : style->effectiveZoom(); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (style->appearance() == SliderThumbHorizontalPart) { 21481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) style->setWidth(Length(size.width() * zoomLevel, Fixed)); 21581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) style->setHeight(Length(size.height() * zoomLevel, Fixed)); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (style->appearance() == SliderThumbVerticalPart) { 21781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) style->setWidth(Length(size.height() * zoomLevel, Fixed)); 21881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) style->setHeight(Length(size.width() * zoomLevel, Fixed)); 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderThemeChromiumSkia::adjustSliderThumbSize(style, element); 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 223926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void RenderThemeChromiumDefault::setCaretBlinkInterval(double interval) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_caretBlinkInterval = interval; 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 228926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)double RenderThemeChromiumDefault::caretBlinkIntervalInternal() const 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_caretBlinkInterval; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 233926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void RenderThemeChromiumDefault::setSelectionColors( 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned activeBackgroundColor, 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned activeForegroundColor, 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned inactiveBackgroundColor, 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned inactiveForegroundColor) 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_activeSelectionBackgroundColor = activeBackgroundColor; 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_activeSelectionForegroundColor = activeForegroundColor; 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inactiveSelectionBackgroundColor = inactiveBackgroundColor; 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_inactiveSelectionForegroundColor = inactiveForegroundColor; 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::paintCheckbox(RenderObject* o, const PaintInfo& i, const IntRect& rect) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 247e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 248e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.button.checked = isChecked(o); 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.button.indeterminate = isIndeterminate(o); 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 25281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) float zoomLevel = o->style()->effectiveZoom(); 25309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) GraphicsContextStateSaver stateSaver(*i.context, false); 25481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) IntRect unzoomedRect = rect; 25581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) if (zoomLevel != 1) { 25609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) stateSaver.save(); 25781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); 25881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); 25981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) i.context->translate(unzoomedRect.x(), unzoomedRect.y()); 2605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) i.context->scale(zoomLevel, zoomLevel); 26181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) i.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); 26281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) } 26381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 264e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartCheckbox, getWebThemeState(this, o), WebRect(unzoomedRect), &extraParams); 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void RenderThemeChromiumDefault::setCheckboxSize(RenderStyle* style) const 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the width and height are both specified, then we have nothing to do. 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto()) 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 274e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) IntSize size = Platform::current()->themeEngine()->getSize(WebThemeEngine::PartCheckbox); 27581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) float zoomLevel = style->effectiveZoom(); 27681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) size.setWidth(size.width() * zoomLevel); 27781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) size.setHeight(size.height() * zoomLevel); 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSizeIfAuto(style, size); 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::paintRadio(RenderObject* o, const PaintInfo& i, const IntRect& rect) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 283e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 284e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.button.checked = isChecked(o); 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 287e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartRadio, getWebThemeState(this, o), WebRect(rect), &extraParams); 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void RenderThemeChromiumDefault::setRadioSize(RenderStyle* style) const 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the width and height are both specified, then we have nothing to do. 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto()) 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 297e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) IntSize size = Platform::current()->themeEngine()->getSize(WebThemeEngine::PartRadio); 29881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) float zoomLevel = style->effectiveZoom(); 29981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) size.setWidth(size.width() * zoomLevel); 30081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) size.setHeight(size.height() * zoomLevel); 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSizeIfAuto(style, size); 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::paintButton(RenderObject* o, const PaintInfo& i, const IntRect& rect) 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 306e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 307e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.button.hasBorder = true; 30951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) extraParams.button.backgroundColor = useMockTheme() ? 0xffc0c0c0 : defaultButtonBackgroundColor; 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (o->hasBackground()) 3117757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch extraParams.button.backgroundColor = o->resolveColor(CSSPropertyBackgroundColor).rgb(); 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 313e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartButton, getWebThemeState(this, o), WebRect(rect), &extraParams); 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::paintTextField(RenderObject* o, const PaintInfo& i, const IntRect& rect) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // WebThemeEngine does not handle border rounded corner and background image 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // so return true to draw CSS border and background. 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (o->style()->hasBorderRadius() || o->style()->hasBackgroundImage()) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ControlPart part = o->style()->appearance(); 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 326e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.textField.isTextArea = part == TextAreaPart; 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.textField.isListbox = part == ListboxPart; 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 330e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Color backgroundColor = o->resolveColor(CSSPropertyBackgroundColor); 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.textField.backgroundColor = backgroundColor.rgb(); 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 335e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartTextField, getWebThemeState(this, o), WebRect(rect), &extraParams); 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::paintMenuList(RenderObject* o, const PaintInfo& i, const IntRect& rect) 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 341e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (!o->isBox()) 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const int right = rect.x() + rect.width(); 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const int middle = rect.y() + rect.height() / 2; 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 347e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.menuList.arrowY = middle; 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const RenderBox* box = toRenderBox(o); 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Match Chromium Win behaviour of showing all borders if any are shown. 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.menuList.hasBorder = box->borderRight() || box->borderLeft() || box->borderTop() || box->borderBottom(); 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.menuList.hasBorderRadius = o->style()->hasBorderRadius(); 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Fallback to transparent if the specified color object is invalid. 35451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) Color backgroundColor(Color::transparent); 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (o->hasBackground()) 35651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) backgroundColor = o->resolveColor(CSSPropertyBackgroundColor); 35751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) extraParams.menuList.backgroundColor = backgroundColor.rgb(); 35851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 35951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // If we have a background image, don't fill the content area to expose the 36051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // parent's background. Also, we shouldn't fill the content area if the 36151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // alpha of the color is 0. The API of Windows GDI ignores the alpha. 36251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // FIXME: the normal Aura theme doesn't care about this, so we should 36351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // investigate if we really need fillContentArea. 36451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) extraParams.menuList.fillContentArea = !o->style()->hasBackgroundImage() && backgroundColor.alpha(); 36551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 36651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) { 36751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // The size and position of the drop-down button is different between 36851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // the mock theme and the regular aura theme. 36951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) int spacingTop = box->borderTop() + box->paddingTop(); 37051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) int spacingBottom = box->borderBottom() + box->paddingBottom(); 37151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) int spacingRight = box->borderRight() + box->paddingRight(); 37251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) extraParams.menuList.arrowX = (o->style()->direction() == RTL) ? rect.x() + 4 + spacingRight: right - 13 - spacingRight; 37351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) extraParams.menuList.arrowHeight = rect.height() - spacingBottom - spacingTop; 37451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } else { 37551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) extraParams.menuList.arrowX = (o->style()->direction() == RTL) ? rect.x() + 7 : right - 13; 37651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 378e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 380e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartMenuList, getWebThemeState(this, o), WebRect(rect), &extraParams); 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool RenderThemeChromiumDefault::paintMenuListButton(RenderObject* o, const PaintInfo& i, const IntRect& rect) 38509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 386e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (!o->isBox()) 38709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 38809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 38909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) const int right = rect.x() + rect.width(); 39009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) const int middle = rect.y() + rect.height() / 2; 39109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 392e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 39309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) extraParams.menuList.arrowY = middle; 39409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) extraParams.menuList.hasBorder = false; 39509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) extraParams.menuList.hasBorderRadius = o->style()->hasBorderRadius(); 39609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) extraParams.menuList.backgroundColor = Color::transparent; 39709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) extraParams.menuList.fillContentArea = false; 39809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 39909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (useMockTheme()) { 40009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) const RenderBox* box = toRenderBox(o); 40109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // The size and position of the drop-down button is different between 40209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // the mock theme and the regular aura theme. 40309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int spacingTop = box->borderTop() + box->paddingTop(); 40409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int spacingBottom = box->borderBottom() + box->paddingBottom(); 40509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int spacingRight = box->borderRight() + box->paddingRight(); 40609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) extraParams.menuList.arrowX = (o->style()->direction() == RTL) ? rect.x() + 4 + spacingRight: right - 13 - spacingRight; 40709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) extraParams.menuList.arrowHeight = rect.height() - spacingBottom - spacingTop; 40809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } else { 40909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) extraParams.menuList.arrowX = (o->style()->direction() == RTL) ? rect.x() + 7 : right - 13; 41009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 41109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 412e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 41309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 414e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartMenuList, getWebThemeState(this, o), WebRect(rect), &extraParams); 41509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 41609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 41709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 418926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::paintSliderTrack(RenderObject* o, const PaintInfo& i, const IntRect& rect) 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 420e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 421e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.slider.vertical = o->style()->appearance() == SliderVerticalPart; 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paintSliderTicks(o, i, rect); 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // FIXME: Mock theme doesn't handle zoomed sliders. 42751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) float zoomLevel = useMockTheme() ? 1 : o->style()->effectiveZoom(); 42809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) GraphicsContextStateSaver stateSaver(*i.context, false); 42981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) IntRect unzoomedRect = rect; 43081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) if (zoomLevel != 1) { 43109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) stateSaver.save(); 43281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); 43381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); 43481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) i.context->translate(unzoomedRect.x(), unzoomedRect.y()); 4355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) i.context->scale(zoomLevel, zoomLevel); 43681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) i.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); 43781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) } 43881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 439e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartSliderTrack, getWebThemeState(this, o), WebRect(unzoomedRect), &extraParams); 44081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 444926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::paintSliderThumb(RenderObject* o, const PaintInfo& i, const IntRect& rect) 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 446e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 447e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.slider.vertical = o->style()->appearance() == SliderThumbVerticalPart; 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.slider.inDrag = isPressed(o); 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // FIXME: Mock theme doesn't handle zoomed sliders. 45251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) float zoomLevel = useMockTheme() ? 1 : o->style()->effectiveZoom(); 45309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) GraphicsContextStateSaver stateSaver(*i.context, false); 45481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) IntRect unzoomedRect = rect; 45581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) if (zoomLevel != 1) { 45609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) stateSaver.save(); 45781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); 45881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); 45981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) i.context->translate(unzoomedRect.x(), unzoomedRect.y()); 4605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) i.context->scale(zoomLevel, zoomLevel); 46181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) i.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); 46281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) } 46381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 464e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartSliderThumb, getWebThemeState(this, o), WebRect(unzoomedRect), &extraParams); 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void RenderThemeChromiumDefault::adjustInnerSpinButtonStyle(RenderStyle* style, Element*) const 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 470e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) IntSize size = Platform::current()->themeEngine()->getSize(WebThemeEngine::PartInnerSpinButton); 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) style->setWidth(Length(size.width(), Fixed)); 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) style->setMinWidth(Length(size.width(), Fixed)); 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 476926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::paintInnerSpinButton(RenderObject* o, const PaintInfo& i, const IntRect& rect) 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 478e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 479e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 480d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) extraParams.innerSpin.spinUp = (controlStatesForRenderer(o) & SpinUpControlState); 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.innerSpin.readOnly = isReadOnlyControl(o); 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 483e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartInnerSpinButton, getWebThemeState(this, o), WebRect(rect), &extraParams); 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 487926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::paintProgressBar(RenderObject* o, const PaintInfo& i, const IntRect& rect) 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!o->isProgress()) 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderProgress* renderProgress = toRenderProgress(o); 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect valueRect = progressValueRectFor(renderProgress, rect); 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 495e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebThemeEngine::ExtraParams extraParams; 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.progressBar.determinate = renderProgress->isDeterminate(); 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.progressBar.valueRectX = valueRect.x(); 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.progressBar.valueRectY = valueRect.y(); 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.progressBar.valueRectWidth = valueRect.width(); 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) extraParams.progressBar.valueRectHeight = valueRect.height(); 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DirectionFlippingScope scope(o, i, rect); 503e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebCanvas* canvas = i.context->canvas(); 504e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->themeEngine()->paint(canvas, WebThemeEngine::PartProgressBar, getWebThemeState(this, o), WebRect(rect), &extraParams); 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 508926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool RenderThemeChromiumDefault::shouldOpenPickerWithF4Key() const 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 51351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool RenderThemeChromiumDefault::shouldUseFallbackTheme(RenderStyle* style) const 51451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 51551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (useMockTheme()) { 51651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // The mock theme can't handle zoomed controls, so we fall back to the "fallback" theme. 51751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ControlPart part = style->appearance(); 51851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (part == CheckboxPart || part == RadioPart) 51951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return style->effectiveZoom() != 1; 52051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 52151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return RenderTheme::shouldUseFallbackTheme(style); 52251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 52351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 524c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 525