2009-03-02 Adam Langley <agl@google.com>
[WebKit-https.git] / WebCore / rendering / RenderThemeChromiumLinux.h
1 /*
2  * This file is part of the WebKit project.
3  *
4  * Copyright (C) 2006 Apple Computer, Inc.
5  * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com
6  * Copyright (C) 2007 Holger Hans Peter Freyther
7  * Copyright (C) 2007 Alp Toker <alp@atoker.com>
8  * Copyright (C) 2008, 2009 Google, Inc.
9  * All rights reserved.
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Library General Public
13  * License as published by the Free Software Foundation; either
14  * version 2 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Library General Public License for more details.
20  *
21  * You should have received a copy of the GNU Library General Public License
22  * along with this library; see the file COPYING.LIB.  If not, write to
23  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24  * Boston, MA 02110-1301, USA.
25  *
26  */
27
28 #ifndef RenderThemeChromiumLinux_h
29 #define RenderThemeChromiumLinux_h
30
31 #include "RenderTheme.h"
32
33 namespace WebCore {
34
35     class RenderThemeChromiumLinux : public RenderTheme {
36     public:
37         RenderThemeChromiumLinux();
38         ~RenderThemeChromiumLinux() { }
39
40         virtual String extraDefaultStyleSheet();
41         virtual String extraQuirksStyleSheet();
42
43         // A method asking if the theme's controls actually care about redrawing when hovered.
44         virtual bool supportsHover(const RenderStyle*) const { return true; }
45
46         // A method asking if the theme is able to draw the focus ring.
47         virtual bool supportsFocusRing(const RenderStyle*) const;
48
49         // The platform selection color.
50         virtual Color platformActiveSelectionBackgroundColor() const;
51         virtual Color platformInactiveSelectionBackgroundColor() const;
52         virtual Color platformActiveSelectionForegroundColor() const;
53         virtual Color platformInactiveSelectionForegroundColor() const;
54         virtual Color platformTextSearchHighlightColor() const;
55
56         virtual double caretBlinkInterval() const;
57
58         // System fonts.
59         virtual void systemFont(int propId, Document*, FontDescription&) const;
60
61         virtual int minimumMenuListSize(RenderStyle*) const;
62
63         virtual bool paintCheckbox(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
64         virtual void setCheckboxSize(RenderStyle*) const;
65
66         virtual bool paintRadio(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
67         virtual void setRadioSize(RenderStyle*) const;
68
69         virtual bool paintButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
70
71         virtual bool paintTextField(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
72
73         virtual bool paintTextArea(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { return paintTextField(o, i, r); }
74
75         virtual bool paintSearchField(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
76
77         virtual bool paintSearchFieldResultsDecoration(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
78         virtual bool paintSearchFieldResultsButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
79         virtual bool paintSearchFieldCancelButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
80
81         // MenuList refers to an unstyled menulist (meaning a menulist without
82         // background-color or border set) and MenuListButton refers to a styled
83         // menulist (a menulist with background-color or border set). They have
84         // this distinction to support showing aqua style themes whenever they
85         // possibly can, which is something we don't want to replicate.
86         //
87         // In short, we either go down the MenuList code path or the MenuListButton
88         // codepath. We never go down both. And in both cases, they render the
89         // entire menulist.
90         virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
91         virtual bool paintMenuList(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
92         virtual void adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
93         virtual bool paintMenuListButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
94
95         // These methods define the padding for the MenuList's inner block.
96         virtual int popupInternalPaddingLeft(RenderStyle*) const;
97         virtual int popupInternalPaddingRight(RenderStyle*) const;
98         virtual int popupInternalPaddingTop(RenderStyle*) const;
99         virtual int popupInternalPaddingBottom(RenderStyle*) const;
100
101         virtual int buttonInternalPaddingLeft() const;
102         virtual int buttonInternalPaddingRight() const;
103         virtual int buttonInternalPaddingTop() const;
104         virtual int buttonInternalPaddingBottom() const;
105
106         // A method asking if the control changes its tint when the window has focus or not.
107         virtual bool controlSupportsTints(const RenderObject*) const;
108
109         // A general method asking if any control tinting is supported at all.
110         virtual bool supportsControlTints() const { return true; }
111
112         // List Box selection color
113         virtual Color activeListBoxSelectionBackgroundColor() const;
114         virtual Color activeListBoxSelectionForegroundColor() const;
115         virtual Color inactiveListBoxSelectionBackgroundColor() const;
116         virtual Color inactiveListBoxSelectionForegroundColor() const;
117
118     private:
119         int menuListInternalPadding(RenderStyle*, int paddingType) const;
120     };
121
122 } // namespace WebCore
123
124 #endif