// Copyright (C) 2017 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only // Qt-Security score:significant reason:default #ifndef QQUICKMATERIALSTYLE_P_H #define QQUICKMATERIALSTYLE_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include QT_BEGIN_NAMESPACE class Q_QUICKCONTROLS2MATERIAL_EXPORT QQuickMaterialStyle : public QQuickAttachedPropertyPropagator { Q_OBJECT Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL) Q_PROPERTY(QVariant primary READ primary WRITE setPrimary RESET resetPrimary NOTIFY primaryChanged FINAL) Q_PROPERTY(QVariant accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL) Q_PROPERTY(QVariant foreground READ foreground WRITE setForeground RESET resetForeground NOTIFY foregroundChanged FINAL) Q_PROPERTY(QVariant background READ background WRITE setBackground RESET resetBackground NOTIFY backgroundChanged FINAL) Q_PROPERTY(int elevation READ elevation WRITE setElevation RESET resetElevation NOTIFY elevationChanged FINAL) Q_PROPERTY(RoundedScale roundedScale READ roundedScale WRITE setRoundedScale RESET resetRoundedScale NOTIFY roundedScaleChanged FINAL) Q_PROPERTY(ContainerStyle containerStyle READ containerStyle WRITE setContainerStyle RESET resetContainerStyle NOTIFY containerStyleChanged FINAL) Q_PROPERTY(QColor primaryColor READ primaryColor NOTIFY primaryChanged FINAL) // TODO: remove? Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentChanged FINAL) // TODO: remove? Q_PROPERTY(QColor backgroundColor READ backgroundColor NOTIFY backgroundChanged FINAL) Q_PROPERTY(QColor primaryTextColor READ primaryTextColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor primaryHighlightedTextColor READ primaryHighlightedTextColor NOTIFY primaryHighlightedTextColorChanged FINAL) Q_PROPERTY(QColor secondaryTextColor READ secondaryTextColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor hintTextColor READ hintTextColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor textSelectionColor READ textSelectionColor NOTIFY themeOrAccentChanged FINAL) Q_PROPERTY(QColor dropShadowColor READ dropShadowColor CONSTANT FINAL) Q_PROPERTY(QColor dividerColor READ dividerColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor iconColor READ iconColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor iconDisabledColor READ iconDisabledColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor frameColor READ frameColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor rippleColor READ rippleColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor highlightedRippleColor READ highlightedRippleColor NOTIFY themeOrAccentChanged FINAL) Q_PROPERTY(QColor switchUncheckedTrackColor READ switchUncheckedTrackColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor switchCheckedTrackColor READ switchCheckedTrackColor NOTIFY themeOrAccentChanged FINAL) Q_PROPERTY(QColor switchUncheckedHandleColor READ switchUncheckedHandleColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor switchUncheckedHoveredHandleColor READ switchUncheckedHoveredHandleColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor switchDisabledUncheckedTrackColor READ switchDisabledUncheckedTrackColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor switchDisabledCheckedTrackColor READ switchDisabledCheckedTrackColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor switchDisabledUncheckedTrackBorderColor READ switchDisabledUncheckedTrackBorderColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor switchCheckedHandleColor READ switchCheckedHandleColor NOTIFY themeOrAccentChanged FINAL) Q_PROPERTY(QColor switchDisabledUncheckedHandleColor READ switchDisabledUncheckedHandleColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor switchDisabledCheckedHandleColor READ switchDisabledCheckedHandleColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor switchDisabledCheckedIconColor READ switchDisabledCheckedIconColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor switchDisabledUncheckedIconColor READ switchDisabledUncheckedIconColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor scrollBarColor READ scrollBarColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor scrollBarHoveredColor READ scrollBarHoveredColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor scrollBarPressedColor READ scrollBarPressedColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor dialogColor READ dialogColor NOTIFY dialogColorChanged FINAL) Q_PROPERTY(QColor backgroundDimColor READ backgroundDimColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor listHighlightColor READ listHighlightColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor tooltipColor READ tooltipColor NOTIFY tooltipColorChanged FINAL) Q_PROPERTY(QColor toolBarColor READ toolBarColor NOTIFY toolBarColorChanged FINAL) Q_PROPERTY(QColor toolTextColor READ toolTextColor NOTIFY toolTextColorChanged FINAL) Q_PROPERTY(QColor spinBoxDisabledIconColor READ spinBoxDisabledIconColor NOTIFY themeChanged FINAL) Q_PROPERTY(QColor sliderDisabledColor READ sliderDisabledColor NOTIFY themeChanged FINAL REVISION(2, 15)) Q_PROPERTY(QColor textFieldFilledContainerColor READ textFieldFilledContainerColor NOTIFY themeChanged FINAL) Q_PROPERTY(int touchTarget READ touchTarget CONSTANT FINAL) Q_PROPERTY(int buttonVerticalPadding READ buttonVerticalPadding CONSTANT FINAL) Q_PROPERTY(int buttonHeight READ buttonHeight CONSTANT FINAL) Q_PROPERTY(int delegateHeight READ delegateHeight CONSTANT FINAL) Q_PROPERTY(int dialogButtonBoxHeight READ dialogButtonBoxHeight CONSTANT FINAL) Q_PROPERTY(int dialogTitleFontPixelSize READ dialogTitleFontPixelSize CONSTANT FINAL) Q_PROPERTY(RoundedScale dialogRoundedScale READ dialogRoundedScale CONSTANT FINAL) Q_PROPERTY(int frameVerticalPadding READ frameVerticalPadding CONSTANT FINAL) Q_PROPERTY(int menuItemHeight READ menuItemHeight CONSTANT FINAL) Q_PROPERTY(int menuItemVerticalPadding READ menuItemVerticalPadding CONSTANT FINAL) Q_PROPERTY(int switchIndicatorWidth READ switchIndicatorWidth CONSTANT FINAL) Q_PROPERTY(int switchIndicatorHeight READ switchIndicatorHeight CONSTANT FINAL) Q_PROPERTY(int switchNormalHandleHeight READ switchNormalHandleHeight CONSTANT FINAL) Q_PROPERTY(int switchCheckedHandleHeight READ switchCheckedHandleHeight CONSTANT FINAL) Q_PROPERTY(int switchLargestHandleHeight READ switchLargestHandleHeight CONSTANT FINAL) Q_PROPERTY(int switchDelegateVerticalPadding READ switchDelegateVerticalPadding CONSTANT FINAL) Q_PROPERTY(int textFieldHeight READ textFieldHeight CONSTANT FINAL) Q_PROPERTY(int textFieldHorizontalPadding READ textFieldHorizontalPadding CONSTANT FINAL) Q_PROPERTY(int textFieldVerticalPadding READ textFieldVerticalPadding CONSTANT FINAL) Q_PROPERTY(int tooltipHeight READ tooltipHeight CONSTANT FINAL) QML_NAMED_ELEMENT(Material) QML_ATTACHED(QQuickMaterialStyle) QML_UNCREATABLE("") QML_ADDED_IN_VERSION(2, 0) public: enum Theme { Light, Dark, System }; enum Variant { Normal, Dense }; enum Color { Red, Pink, Purple, DeepPurple, Indigo, Blue, LightBlue, Cyan, Teal, Green, LightGreen, Lime, Yellow, Amber, Orange, DeepOrange, Brown, Grey, BlueGrey }; enum Shade { Shade50, Shade100, Shade200, Shade300, Shade400, Shade500, Shade600, Shade700, Shade800, Shade900, ShadeA100, ShadeA200, ShadeA400, ShadeA700, }; enum class RoundedScale { NotRounded, ExtraSmallScale = 4, SmallScale = 8, MediumScale = 12, LargeScale = 16, ExtraLargeScale = 28, FullScale = 0xFF // For full we use half the height of the item. }; enum class ContainerStyle { Filled, Outlined }; Q_ENUM(Theme) Q_ENUM(Variant) Q_ENUM(Color) Q_ENUM(Shade) Q_ENUM(RoundedScale) Q_ENUM(ContainerStyle) explicit QQuickMaterialStyle(QObject *parent = nullptr); static QQuickMaterialStyle *qmlAttachedProperties(QObject *object); Theme theme() const; void setTheme(Theme theme); void inheritTheme(Theme theme); void propagateTheme(); void resetTheme(); void themeChange(); QVariant primary() const; void setPrimary(const QVariant &accent); void inheritPrimary(uint primary, bool custom); void propagatePrimary(); void resetPrimary(); void primaryChange(); QVariant accent() const; void setAccent(const QVariant &accent); void inheritAccent(uint accent, bool custom); void propagateAccent(); void resetAccent(); void accentChange(); QVariant foreground() const; void setForeground(const QVariant &foreground); void inheritForeground(uint foreground, bool custom, bool has); void propagateForeground(); void resetForeground(); void foregroundChange(); QVariant background() const; void setBackground(const QVariant &background); void inheritBackground(uint background, bool custom, bool has); void propagateBackground(); void resetBackground(); void backgroundChange(); int elevation() const; void setElevation(int elevation); void resetElevation(); void elevationChange(); RoundedScale roundedScale() const; void setRoundedScale(RoundedScale roundedScale); void resetRoundedScale(); ContainerStyle containerStyle() const; void setContainerStyle(ContainerStyle containerStyle); void resetContainerStyle(); QColor primaryColor() const; QColor accentColor() const; QColor backgroundColor() const; QColor primaryTextColor() const; QColor primaryHighlightedTextColor() const; QColor secondaryTextColor() const; QColor hintTextColor() const; QColor textSelectionColor() const; QColor dropShadowColor() const; QColor dividerColor() const; QColor iconColor() const; QColor iconDisabledColor() const; Q_INVOKABLE QColor buttonColor(Theme theme, const QVariant &background, const QVariant &accent, bool enabled, bool flat, bool highlighted, bool checked) const; QColor frameColor() const; QColor rippleColor() const; QColor highlightedRippleColor() const; QColor switchUncheckedTrackColor() const; QColor switchCheckedTrackColor() const; QColor switchDisabledUncheckedTrackColor() const; QColor switchDisabledCheckedTrackColor() const; QColor switchDisabledUncheckedTrackBorderColor() const; QColor switchUncheckedHandleColor() const; QColor switchUncheckedHoveredHandleColor() const; QColor switchCheckedHandleColor() const; QColor switchDisabledUncheckedHandleColor() const; QColor switchDisabledCheckedHandleColor() const; QColor switchDisabledCheckedIconColor() const; QColor switchDisabledUncheckedIconColor() const; QColor scrollBarColor() const; QColor scrollBarHoveredColor() const; QColor scrollBarPressedColor() const; QColor dialogColor() const; QColor backgroundDimColor() const; QColor listHighlightColor() const; QColor tooltipColor() const; QColor toolBarColor() const; QColor toolTextColor() const; QColor spinBoxDisabledIconColor() const; QColor sliderDisabledColor() const; QColor textFieldFilledContainerColor() const; Q_INVOKABLE QColor color(Color color, Shade shade = Shade500) const; Q_INVOKABLE QColor shade(const QColor &color, Shade shade) const; int touchTarget() const; int buttonVerticalPadding() const; Q_INVOKABLE int buttonLeftPadding(bool flat, bool hasIcon) const; Q_INVOKABLE int buttonRightPadding(bool flat, bool hasIcon, bool hasText) const; int buttonHeight() const; int delegateHeight() const; int dialogButtonBoxHeight() const; int dialogTitleFontPixelSize() const; RoundedScale dialogRoundedScale() const; int frameVerticalPadding() const; int menuItemHeight() const; int menuItemVerticalPadding() const; int switchIndicatorWidth() const; int switchIndicatorHeight() const; int switchNormalHandleHeight() const; int switchCheckedHandleHeight() const; int switchLargestHandleHeight() const; int switchDelegateVerticalPadding() const; int textFieldHeight() const; int textFieldHorizontalPadding() const; int textFieldVerticalPadding() const; int tooltipHeight() const; static void initGlobals(); static Variant variant(); Q_SIGNALS: void themeChanged(); void primaryChanged(); void accentChanged(); void foregroundChanged(); void backgroundChanged(); void elevationChanged(); void themeOrAccentChanged(); void primaryHighlightedTextColorChanged(); void dialogColorChanged(); void tooltipColorChanged(); void toolBarColorChanged(); void toolTextColorChanged(); void roundedScaleChanged(); void containerStyleChanged(); protected: void attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent) override; private: void init(); bool variantToRgba(const QVariant &var, const char *name, QRgb *rgba, bool *custom) const; QColor backgroundColor(Shade shade) const; QColor accentColor(Shade shade) const; Shade themeShade() const; // These reflect whether a color value was explicitly set on the specific // item that this attached style object represents. bool m_explicitTheme = false; bool m_explicitPrimary = false; bool m_explicitAccent = false; bool m_explicitForeground = false; bool m_explicitBackground = false; // These reflect whether the color value that was either inherited or // explicitly set is in the form that QColor expects, rather than one of // our pre-defined color enum values. bool m_customPrimary = false; bool m_customAccent = false; bool m_customForeground = false; bool m_customBackground = false; // These will be true when this item has an explicit or inherited foreground/background // color, or these colors were declared globally via settings (e.g. conf or env vars). // Some color properties of the style will return different values depending on whether // or not these are set. bool m_hasForeground = false; bool m_hasBackground = false; // The actual values for this item, whether explicit, inherited or globally set. bool m_systemTheme = false; Theme m_theme = Light; uint m_primary = 0; uint m_accent = 0; uint m_foreground = 0; uint m_background = 0; int m_elevation = 0; RoundedScale m_roundedScale = RoundedScale::NotRounded; ContainerStyle m_containerStyle = ContainerStyle::Filled; }; QT_END_NAMESPACE #endif // QQUICKMATERIALSTYLE_P_H