2008-10-18 Zan Dobersek <zandobersek@gmail.com>
[WebKit-https.git] / WebCore / platform / qt / RenderThemeQt.h
1 /*
2  * This file is part of the theme implementation for form controls in WebCore.
3  *
4  * Copyright (C) 2007 Trolltech
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB.  If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  *
21  */
22 #ifndef RenderThemeQt_H
23 #define RenderThemeQt_H
24
25 #include "RenderTheme.h"
26
27 #include <QStyle>
28
29 QT_BEGIN_NAMESPACE
30 class QPainter;
31 class QWidget;
32 QT_END_NAMESPACE
33
34 namespace WebCore {
35
36 class RenderStyle;
37 class HTMLMediaElement;
38
39 class RenderThemeQt : public RenderTheme
40 {
41 public:
42     RenderThemeQt();
43     virtual ~RenderThemeQt();
44
45     virtual bool supportsHover(const RenderStyle*) const;
46     virtual bool supportsFocusRing(const RenderStyle* style) const;
47
48     virtual int baselinePosition(const RenderObject* o) const;
49
50     // A method asking if the control changes its tint when the window has focus or not.
51     virtual bool controlSupportsTints(const RenderObject*) const;
52
53     // A general method asking if any control tinting is supported at all.
54     virtual bool supportsControlTints() const;
55
56     virtual void adjustRepaintRect(const RenderObject* o, IntRect& r);
57
58     virtual bool isControlStyled(const RenderStyle*, const BorderData&,
59                                  const FillLayer&, const Color&) const;
60
61     // The platform selection color.
62     virtual Color platformActiveSelectionBackgroundColor() const;
63     virtual Color platformInactiveSelectionBackgroundColor() const;
64     virtual Color platformActiveSelectionForegroundColor() const;
65     virtual Color platformInactiveSelectionForegroundColor() const;
66
67     virtual void systemFont(int propId, FontDescription&) const;
68
69     virtual int minimumMenuListSize(RenderStyle*) const;
70
71     virtual void adjustSliderThumbSize(RenderObject*) const;
72
73 protected:
74     virtual bool paintCheckbox(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r);
75     virtual void setCheckboxSize(RenderStyle*) const;
76
77     virtual bool paintRadio(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r);
78     virtual void setRadioSize(RenderStyle*) const;
79
80     virtual void adjustButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
81     virtual bool paintButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
82     virtual void setButtonSize(RenderStyle*) const;
83
84     virtual bool paintTextField(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
85     virtual void adjustTextFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
86
87     virtual bool paintTextArea(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
88     virtual void adjustTextAreaStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
89
90     virtual bool paintMenuList(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r);
91     virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
92
93     virtual bool paintMenuListButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
94     virtual void adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
95
96     virtual bool paintSliderTrack(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
97     virtual bool paintSliderThumb(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
98
99     virtual bool paintSearchField(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
100     virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
101
102     virtual void adjustSearchFieldCancelButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
103     virtual bool paintSearchFieldCancelButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
104
105     virtual void adjustSearchFieldDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
106     virtual bool paintSearchFieldDecoration(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
107
108     virtual void adjustSearchFieldResultsDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
109     virtual bool paintSearchFieldResultsDecoration(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
110
111 #if ENABLE(VIDEO)
112     virtual bool paintMediaFullscreenButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
113     virtual bool paintMediaPlayButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
114     virtual bool paintMediaMuteButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
115     virtual bool paintMediaSeekBackButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
116     virtual bool paintMediaSeekForwardButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
117     virtual bool paintMediaSliderTrack(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
118     virtual bool paintMediaSliderThumb(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
119
120 private:
121     HTMLMediaElement* getMediaElementFromRenderObject(RenderObject* o) const;
122     void paintMediaBackground(QPainter* painter, const IntRect& r) const;
123     QColor getMediaControlForegroundColor(RenderObject* o = 0) const;
124 #endif
125
126 private:
127     bool supportsFocus(ControlPart) const;
128
129     ControlPart applyTheme(QStyleOption&, RenderObject*) const;
130
131     void setButtonPadding(RenderStyle*) const;
132     void setPopupPadding(RenderStyle*) const;
133
134 #ifdef Q_WS_MAC
135     int m_buttonFontPixelSize;
136 #endif
137     QString m_buttonFontFamily;
138
139     QStyle* m_fallbackStyle;
140     QStyle* fallbackStyle();
141 };
142
143 class StylePainter
144 {
145 public:
146     explicit StylePainter(const RenderObject::PaintInfo& paintInfo);
147     explicit StylePainter(GraphicsContext* context);
148     ~StylePainter();
149
150     bool isValid() const { return painter && style; }
151
152     QPainter* painter;
153     QWidget* widget;
154     QStyle* style;
155
156     void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption& opt)
157     { style->drawPrimitive(pe, &opt, painter, widget); }
158     void drawControl(QStyle::ControlElement ce, const QStyleOption& opt)
159     { style->drawControl(ce, &opt, painter, widget); }
160     void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex& opt)
161     { style->drawComplexControl(cc, &opt, painter, widget); }
162
163 private:
164     void init(GraphicsContext* context);
165
166     QBrush oldBrush;
167     bool oldAntialiasing;
168
169     Q_DISABLE_COPY(StylePainter)
170 };
171
172 }
173
174 #endif