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 54 QT_BEGIN_NAMESPACE 55 56 class 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 112 public: 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 266 Q_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 284 protected: 285 void attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) override; 286 287 private: 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 325 QT_END_NAMESPACE 326 327 QML_DECLARE_TYPEINFO(QQuickMaterialStyle, QML_HAS_ATTACHED_PROPERTIES) 328 329 #endif // QQUICKMATERIALSTYLE_P_H 330