1/****************************************************************************
2**
3** Copyright (C) 2017 The Qt Company Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL3$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or later as published by the Free
28** Software Foundation and appearing in the file LICENSE.GPL included in
29** the packaging of this file. Please review the following information to
30** ensure the GNU General Public License version 2.0 requirements will be
31** met: http://www.gnu.org/licenses/gpl-2.0.html.
32**
33** $QT_END_LICENSE$
34**
35****************************************************************************/
36
37#ifndef QQUICKMATERIALSTYLE_P_H
38#define QQUICKMATERIALSTYLE_P_H
39
40//
41// W A R N I N G
42// -------------
43//
44// This file is not part of the Qt API. It exists purely as an
45// implementation detail. This header file may change from version to
46// version without notice, or even be removed.
47//
48// We mean it.
49//
50
51#include <QtGui/qcolor.h>
52#include <QtQuickControls2/private/qquickattachedobject_p.h>
53
54QT_BEGIN_NAMESPACE
55
56class QQuickMaterialStyle : public QQuickAttachedObject
57{
58 Q_OBJECT
59 Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL)
60 Q_PROPERTY(QVariant primary READ primary WRITE setPrimary RESET resetPrimary NOTIFY primaryChanged FINAL)
61 Q_PROPERTY(QVariant accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL)
62 Q_PROPERTY(QVariant foreground READ foreground WRITE setForeground RESET resetForeground NOTIFY foregroundChanged FINAL)
63 Q_PROPERTY(QVariant background READ background WRITE setBackground RESET resetBackground NOTIFY backgroundChanged FINAL)
64 Q_PROPERTY(int elevation READ elevation WRITE setElevation RESET resetElevation NOTIFY elevationChanged FINAL)
65
66 Q_PROPERTY(QColor primaryColor READ primaryColor NOTIFY primaryChanged FINAL) // TODO: remove?
67 Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentChanged FINAL) // TODO: remove?
68 Q_PROPERTY(QColor backgroundColor READ backgroundColor NOTIFY backgroundChanged FINAL)
69 Q_PROPERTY(QColor primaryTextColor READ primaryTextColor NOTIFY themeChanged FINAL)
70 Q_PROPERTY(QColor primaryHighlightedTextColor READ primaryHighlightedTextColor NOTIFY primaryHighlightedTextColorChanged FINAL)
71 Q_PROPERTY(QColor secondaryTextColor READ secondaryTextColor NOTIFY themeChanged FINAL)
72 Q_PROPERTY(QColor hintTextColor READ hintTextColor NOTIFY themeChanged FINAL)
73 Q_PROPERTY(QColor textSelectionColor READ textSelectionColor NOTIFY themeOrAccentChanged FINAL)
74 Q_PROPERTY(QColor dropShadowColor READ dropShadowColor CONSTANT FINAL)
75 Q_PROPERTY(QColor dividerColor READ dividerColor NOTIFY themeChanged FINAL)
76 Q_PROPERTY(QColor iconColor READ iconColor NOTIFY themeChanged FINAL)
77 Q_PROPERTY(QColor iconDisabledColor READ iconDisabledColor NOTIFY themeChanged FINAL)
78 Q_PROPERTY(QColor buttonColor READ buttonColor NOTIFY buttonColorChanged FINAL)
79 Q_PROPERTY(QColor buttonDisabledColor READ buttonDisabledColor NOTIFY buttonDisabledColorChanged FINAL)
80 Q_PROPERTY(QColor highlightedButtonColor READ highlightedButtonColor NOTIFY buttonColorChanged FINAL)
81 Q_PROPERTY(QColor frameColor READ frameColor NOTIFY themeChanged FINAL)
82 Q_PROPERTY(QColor rippleColor READ rippleColor NOTIFY themeChanged FINAL)
83 Q_PROPERTY(QColor highlightedRippleColor READ highlightedRippleColor NOTIFY themeOrAccentChanged FINAL)
84 Q_PROPERTY(QColor switchUncheckedTrackColor READ switchUncheckedTrackColor NOTIFY themeChanged FINAL)
85 Q_PROPERTY(QColor switchCheckedTrackColor READ switchCheckedTrackColor NOTIFY themeOrAccentChanged FINAL)
86 Q_PROPERTY(QColor switchUncheckedHandleColor READ switchUncheckedHandleColor NOTIFY themeChanged FINAL)
87 Q_PROPERTY(QColor switchCheckedHandleColor READ switchCheckedHandleColor NOTIFY themeOrAccentChanged FINAL)
88 Q_PROPERTY(QColor switchDisabledTrackColor READ switchDisabledTrackColor NOTIFY themeChanged FINAL)
89 Q_PROPERTY(QColor switchDisabledHandleColor READ switchDisabledHandleColor NOTIFY themeChanged FINAL)
90 Q_PROPERTY(QColor scrollBarColor READ scrollBarColor NOTIFY themeChanged FINAL)
91 Q_PROPERTY(QColor scrollBarHoveredColor READ scrollBarHoveredColor NOTIFY themeChanged FINAL)
92 Q_PROPERTY(QColor scrollBarPressedColor READ scrollBarPressedColor NOTIFY themeChanged FINAL)
93 Q_PROPERTY(QColor dialogColor READ dialogColor NOTIFY dialogColorChanged FINAL)
94 Q_PROPERTY(QColor backgroundDimColor READ backgroundDimColor NOTIFY themeChanged FINAL)
95 Q_PROPERTY(QColor listHighlightColor READ listHighlightColor NOTIFY themeChanged FINAL)
96 Q_PROPERTY(QColor tooltipColor READ tooltipColor NOTIFY tooltipColorChanged FINAL)
97 Q_PROPERTY(QColor toolBarColor READ toolBarColor NOTIFY toolBarColorChanged FINAL)
98 Q_PROPERTY(QColor toolTextColor READ toolTextColor NOTIFY toolTextColorChanged FINAL)
99 Q_PROPERTY(QColor spinBoxDisabledIconColor READ spinBoxDisabledIconColor NOTIFY themeChanged FINAL)
100 Q_PROPERTY(QColor sliderDisabledColor READ sliderDisabledColor NOTIFY themeChanged FINAL REVISION 15)
101
102 Q_PROPERTY(int touchTarget READ touchTarget CONSTANT FINAL)
103 Q_PROPERTY(int buttonHeight READ buttonHeight CONSTANT FINAL)
104 Q_PROPERTY(int delegateHeight READ delegateHeight CONSTANT FINAL)
105 Q_PROPERTY(int dialogButtonBoxHeight READ dialogButtonBoxHeight CONSTANT FINAL)
106 Q_PROPERTY(int frameVerticalPadding READ frameVerticalPadding CONSTANT FINAL)
107 Q_PROPERTY(int menuItemHeight READ menuItemHeight CONSTANT FINAL)
108 Q_PROPERTY(int menuItemVerticalPadding READ menuItemVerticalPadding CONSTANT FINAL)
109 Q_PROPERTY(int switchDelegateVerticalPadding READ switchDelegateVerticalPadding CONSTANT FINAL)
110 Q_PROPERTY(int tooltipHeight READ tooltipHeight CONSTANT FINAL)
111
112public:
113 enum Theme {
114 Light,
115 Dark,
116 System
117 };
118
119 enum Variant {
120 Normal,
121 Dense
122 };
123
124 enum Color {
125 Red,
126 Pink,
127 Purple,
128 DeepPurple,
129 Indigo,
130 Blue,
131 LightBlue,
132 Cyan,
133 Teal,
134 Green,
135 LightGreen,
136 Lime,
137 Yellow,
138 Amber,
139 Orange,
140 DeepOrange,
141 Brown,
142 Grey,
143 BlueGrey
144 };
145
146 enum Shade {
147 Shade50,
148 Shade100,
149 Shade200,
150 Shade300,
151 Shade400,
152 Shade500,
153 Shade600,
154 Shade700,
155 Shade800,
156 Shade900,
157 ShadeA100,
158 ShadeA200,
159 ShadeA400,
160 ShadeA700,
161 };
162
163 Q_ENUM(Theme)
164 Q_ENUM(Variant)
165 Q_ENUM(Color)
166 Q_ENUM(Shade)
167
168 explicit QQuickMaterialStyle(QObject *parent = nullptr);
169
170 static QQuickMaterialStyle *qmlAttachedProperties(QObject *object);
171
172 Theme theme() const;
173 void setTheme(Theme theme);
174 void inheritTheme(Theme theme);
175 void propagateTheme();
176 void resetTheme();
177 void themeChange();
178
179 QVariant primary() const;
180 void setPrimary(const QVariant &accent);
181 void inheritPrimary(uint primary, bool custom);
182 void propagatePrimary();
183 void resetPrimary();
184 void primaryChange();
185
186 QVariant accent() const;
187 void setAccent(const QVariant &accent);
188 void inheritAccent(uint accent, bool custom);
189 void propagateAccent();
190 void resetAccent();
191 void accentChange();
192
193 QVariant foreground() const;
194 void setForeground(const QVariant &foreground);
195 void inheritForeground(uint foreground, bool custom, bool has);
196 void propagateForeground();
197 void resetForeground();
198 void foregroundChange();
199
200 QVariant background() const;
201 void setBackground(const QVariant &background);
202 void inheritBackground(uint background, bool custom, bool has);
203 void propagateBackground();
204 void resetBackground();
205 void backgroundChange();
206
207 int elevation() const;
208 void setElevation(int elevation);
209 void resetElevation();
210 void elevationChange();
211
212 QColor primaryColor() const;
213 QColor accentColor() const;
214 QColor backgroundColor() const;
215 QColor primaryTextColor() const;
216 QColor primaryHighlightedTextColor() const;
217 QColor secondaryTextColor() const;
218 QColor hintTextColor() const;
219 QColor textSelectionColor() const;
220 QColor dropShadowColor() const;
221 QColor dividerColor() const;
222 QColor iconColor() const;
223 QColor iconDisabledColor() const;
224 QColor buttonColor() const;
225 QColor buttonDisabledColor() const;
226 QColor highlightedButtonColor() const;
227 QColor highlightedButtonDisabledColor() const;
228 QColor frameColor() const;
229 QColor rippleColor() const;
230 QColor highlightedRippleColor() const;
231 QColor switchUncheckedTrackColor() const;
232 QColor switchCheckedTrackColor() const;
233 QColor switchUncheckedHandleColor() const;
234 QColor switchCheckedHandleColor() const;
235 QColor switchDisabledTrackColor() const;
236 QColor switchDisabledHandleColor() const;
237 QColor scrollBarColor() const;
238 QColor scrollBarHoveredColor() const;
239 QColor scrollBarPressedColor() const;
240 QColor dialogColor() const;
241 QColor backgroundDimColor() const;
242 QColor listHighlightColor() const;
243 QColor tooltipColor() const;
244 QColor toolBarColor() const;
245 QColor toolTextColor() const;
246 QColor spinBoxDisabledIconColor() const;
247 QColor sliderDisabledColor() const;
248
249 Q_INVOKABLE QColor color(Color color, Shade shade = Shade500) const;
250 Q_INVOKABLE QColor shade(const QColor &color, Shade shade) const;
251
252 int touchTarget() const;
253 int buttonHeight() const;
254 int delegateHeight() const;
255 int dialogButtonBoxHeight() const;
256 int frameVerticalPadding() const;
257 int menuItemHeight() const;
258 int menuItemVerticalPadding() const;
259 int switchDelegateVerticalPadding() const;
260 int tooltipHeight() const;
261
262 static void initGlobals();
263
264 static Variant variant();
265
266Q_SIGNALS:
267 void themeChanged();
268 void primaryChanged();
269 void accentChanged();
270 void foregroundChanged();
271 void backgroundChanged();
272 void elevationChanged();
273
274 void themeOrAccentChanged();
275
276 void primaryHighlightedTextColorChanged();
277 void buttonColorChanged();
278 void buttonDisabledColorChanged();
279 void dialogColorChanged();
280 void tooltipColorChanged();
281 void toolBarColorChanged();
282 void toolTextColorChanged();
283
284protected:
285 void attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) override;
286
287private:
288 void init();
289 bool variantToRgba(const QVariant &var, const char *name, QRgb *rgba, bool *custom) const;
290
291 QColor backgroundColor(Shade shade) const;
292 QColor accentColor(Shade shade) const;
293 QColor buttonColor(bool highlighted) const;
294 Shade themeShade() const;
295
296 // These reflect whether a color value was explicitly set on the specific
297 // item that this attached style object represents.
298 bool m_explicitTheme = false;
299 bool m_explicitPrimary = false;
300 bool m_explicitAccent = false;
301 bool m_explicitForeground = false;
302 bool m_explicitBackground = false;
303 // These reflect whether the color value that was either inherited or
304 // explicitly set is in the form that QColor expects, rather than one of
305 // our pre-defined color enum values.
306 bool m_customPrimary = false;
307 bool m_customAccent = false;
308 bool m_customForeground = false;
309 bool m_customBackground = false;
310 // These will be true when this item has an explicit or inherited foreground/background
311 // color, or these colors were declared globally via settings (e.g. conf or env vars).
312 // Some color properties of the style will return different values depending on whether
313 // or not these are set.
314 bool m_hasForeground = false;
315 bool m_hasBackground = false;
316 // The actual values for this item, whether explicit, inherited or globally set.
317 Theme m_theme = Light;
318 uint m_primary = 0;
319 uint m_accent = 0;
320 uint m_foreground = 0;
321 uint m_background = 0;
322 int m_elevation = 0;
323};
324
325QT_END_NAMESPACE
326
327QML_DECLARE_TYPEINFO(QQuickMaterialStyle, QML_HAS_ATTACHED_PROPERTIES)
328
329#endif // QQUICKMATERIALSTYLE_P_H
330

source code of qtquickcontrols2/src/imports/controls/material/qquickmaterialstyle_p.h