[Qt] Disable focus ring in the mobile theme.
[WebKit-https.git] / Source / WebCore / platform / qt / RenderThemeQtMobile.h
1 /*
2  * This file is part of the theme implementation for form controls in WebCore.
3  *
4  * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
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 RenderThemeQtMobile_h
23 #define RenderThemeQtMobile_h
24
25 #include "RenderThemeQt.h"
26
27 #include <QBrush>
28 #include <QHash>
29 #include <QPixmapCache>
30
31 QT_BEGIN_NAMESPACE
32 class QColor;
33 class QSize;
34 QT_END_NAMESPACE
35
36 typedef QPixmapCache::Key CacheKey;
37
38 namespace WebCore {
39
40 class RenderThemeQtMobile : public RenderThemeQt {
41 private:
42     RenderThemeQtMobile(Page*);
43     virtual ~RenderThemeQtMobile();
44
45 public:
46     static PassRefPtr<RenderTheme> create(Page*);
47
48     virtual void adjustSliderThumbSize(RenderStyle*) const;
49
50     virtual bool isControlStyled(const RenderStyle*, const BorderData&, const FillLayer&, const Color& backgroundColor) const;
51
52     virtual int popupInternalPaddingBottom(RenderStyle*) const;
53
54     virtual bool delegatesMenuListRendering() const { return true; }
55
56     // drawFocusRing() will return early if the color is invalid.
57     virtual Color platformFocusRingColor() const { return Color(); }
58
59 protected:
60
61     virtual void adjustButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
62     virtual bool paintButton(RenderObject*, const PaintInfo&, const IntRect&);
63
64     virtual bool paintTextField(RenderObject*, const PaintInfo&, const IntRect&);
65     virtual void adjustTextFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
66
67     virtual bool paintMenuList(RenderObject*, const PaintInfo&, const IntRect&);
68     virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
69
70     virtual bool paintMenuListButton(RenderObject*, const PaintInfo&, const IntRect&);
71
72 #if ENABLE(PROGRESS_TAG)
73     // Returns the duration of the animation for the progress bar.
74     virtual double animationDurationForProgressBar(RenderProgress*) const;
75     virtual bool paintProgressBar(RenderObject*, const PaintInfo&, const IntRect&);
76 #endif
77
78     virtual bool paintSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
79     virtual bool paintSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
80
81     virtual void computeSizeBasedOnStyle(RenderStyle*) const;
82     virtual QSharedPointer<StylePainter> getStylePainter(const PaintInfo&);
83
84 private:
85     bool checkMultiple(RenderObject*) const;
86     void setButtonPadding(RenderStyle*) const;
87     void setPopupPadding(RenderStyle*) const;
88
89     void setPaletteFromPageClientIfExists(QPalette&) const;
90 };
91
92 struct KeyIdentifier {
93
94     KeyIdentifier()
95         : type(Undefined)
96         , width(0)
97         , height(0)
98         , trait1(0)
99         , trait2(0)
100         , trait3(0)
101     {
102     }
103
104     enum ControlType {
105         Undefined,
106         CheckBox,
107         Radio,
108         ComboButton,
109         LineEdit,
110         PushButton,
111         Progress,
112         SliderThumb
113     };
114
115     ControlType type : 3;
116     uint width : 11;
117     uint height : 9;
118     uint trait1 : 1;
119     uint trait2 : 1;
120     uint trait3 : 7;
121
122     inline bool operator==(const KeyIdentifier& other) const
123     {
124         return (type == other.type && width == other.width
125                 && height == other.height && trait1 == other.trait1
126                 && trait2 == other.trait2 && trait3 == other.trait3);
127     }
128 };
129
130 class StylePainterMobile : public StylePainter {
131
132 public:
133     explicit StylePainterMobile(RenderThemeQtMobile*, const PaintInfo&);
134     ~StylePainterMobile();
135
136     void drawLineEdit(const QRect&, bool focused, bool enabled = true);
137     void drawCheckBox(const QRect&, bool checked, bool enabled = true);
138     void drawRadioButton(const QRect&, bool checked, bool enabled = true);
139     void drawPushButton(const QRect&, bool sunken, bool enabled = true);
140     void drawComboBox(const QRect&, bool multiple, bool enabled = true);
141     void drawProgress(const QRect&, double progress, bool leftToRight = true, bool animated = false, bool vertical = false) const;
142     void drawSliderThumb(const QRect&, bool pressed) const;
143
144 private:
145     void drawCheckableBackground(QPainter*, const QRect&, bool checked, bool enabled) const;
146     void drawChecker(QPainter*, const QRect&, const QColor&) const;
147     QPixmap findCheckBox(const QSize&, bool checked, bool enabled) const;
148
149     void drawRadio(QPainter*, const QSize&, bool checked, bool enabled) const;
150     QPixmap findRadio(const QSize&, bool checked, bool enabled) const;
151
152     QSizeF getButtonImageSize(int , bool multiple) const;
153     void drawSimpleComboButton(QPainter*, const QSizeF&, const QColor&) const;
154     void drawMultipleComboButton(QPainter*, const QSizeF&, const QColor&) const;
155     QPixmap findComboButton(const QSize&, bool multiple, bool enabled) const;
156
157     QPixmap findLineEdit(const QSize&, bool focused) const;
158     QPixmap findPushButton(const QSize&, bool sunken, bool enabled) const;
159
160     QSize sizeForPainterScale(const QRect&) const;
161
162     static bool findCachedControl(const KeyIdentifier&, QPixmap*);
163     static void insertIntoCache(const KeyIdentifier&, const QPixmap&);
164
165     bool m_previousSmoothPixmapTransform;
166
167     Q_DISABLE_COPY(StylePainterMobile)
168 };
169
170 }
171
172 #endif // RenderThemeQtMobile_h