diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-04-16 18:37:09 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-04-18 14:11:31 +0000 |
commit | b9c3f6b95e116354acc3f70c0811f4d2f4c68afe (patch) | |
tree | 3331ce65de4436f0f4ff98a7ae514efc18bc17eb /src/imports/controls | |
parent | 392d520ade77e6fb941e54fdaa8b23d34c745a8b (diff) |
Universal: add foreground and background attached properties
Same as b51e520f for Material.
This has been a common request on the mailing lists and forums. Users
want to customize the text color of various controls without having to
replace whole delegates. This change makes it possible to specify both
foreground (eg. Button text) and background (eg. ApplicationWindow,
Page and Pane background) colors so that they propagate to children in
the same way than accent and theme do.
Change-Id: I55084c58f0c62e8088b270ed98437241e382ca15
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
Diffstat (limited to 'src/imports/controls')
27 files changed, 234 insertions, 31 deletions
diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-attributes.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-attributes.png Binary files differnew file mode 100644 index 00000000..96e9abeb --- /dev/null +++ b/src/imports/controls/doc/images/qtquickcontrols2-universal-attributes.png diff --git a/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc index a1caceb8..00173694 100644 --- a/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc +++ b/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc @@ -38,6 +38,8 @@ \list \li \l {accent-attached-prop}{\b accent} : color + \li \l {background-attached-prop}{\b background} : color + \li \l {foreground-attached-prop}{\b foreground} : color \li \l {theme-attached-prop}{\b theme} : enumeration \endlist @@ -60,9 +62,13 @@ \section2 Customization - The Universal style allows customizing two attributes, \l {theme-attached-prop}{theme} - and \l {accent-attached-prop}{accent}. The following example illustrates how to create - a red \e stop button with light text: + The Universal style allows customizing four attributes, \l {theme-attached-prop}{theme}, + \l {accent-attached-prop}{accent}, \l {foreground-attached-prop}{foreground}, and + \l {background-attached-prop}{background}. + + \image qtquickcontrols2-universal-attributes.png + + The following example illustrates how to create a red \e stop button with light text: \table \row @@ -188,6 +194,22 @@ \endstyleproperty + \styleproperty {Universal.background} {color} {background-attached-prop} + \target background-attached-prop + This attached property holds the background color of the theme. The property + can be attached to any window or item. The value is propagated to children. + + The default value is theme-specific (light or dark). + + \endstyleproperty + + \styleproperty {Universal.foreground} {color} {foreground-attached-prop} + \target foreground-attached-prop + This attached property holds the foreground color of the theme. The property + can be attached to any window or item. The value is propagated to children. + + The default value is theme-specific (light or dark). + \styleproperty {Universal.theme} {enumeration} {theme-attached-prop} \target theme-attached-prop This attached property holds whether the theme is light or dark. The property diff --git a/src/imports/controls/universal/ApplicationWindow.qml b/src/imports/controls/universal/ApplicationWindow.qml index 80c75091..1f56bd8a 100644 --- a/src/imports/controls/universal/ApplicationWindow.qml +++ b/src/imports/controls/universal/ApplicationWindow.qml @@ -42,7 +42,7 @@ import Qt.labs.controls.universal.impl 1.0 T.ApplicationWindow { id: window - color: Universal.altHighColor + color: Universal.background overlay.background: Rectangle { color: window.Universal.baseLowColor diff --git a/src/imports/controls/universal/Button.qml b/src/imports/controls/universal/Button.qml index d0dbcf99..0741812d 100644 --- a/src/imports/controls/universal/Button.qml +++ b/src/imports/controls/universal/Button.qml @@ -62,7 +62,8 @@ T.Button { horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] diff --git a/src/imports/controls/universal/CheckBox.qml b/src/imports/controls/universal/CheckBox.qml index 78d45151..fbfb40b7 100644 --- a/src/imports/controls/universal/CheckBox.qml +++ b/src/imports/controls/universal/CheckBox.qml @@ -74,7 +74,8 @@ T.CheckBox { horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] } diff --git a/src/imports/controls/universal/CheckDelegate.qml b/src/imports/controls/universal/CheckDelegate.qml index 91f57b24..13cc0d90 100644 --- a/src/imports/controls/universal/CheckDelegate.qml +++ b/src/imports/controls/universal/CheckDelegate.qml @@ -75,7 +75,8 @@ T.CheckDelegate { horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] diff --git a/src/imports/controls/universal/ComboBox.qml b/src/imports/controls/universal/ComboBox.qml index 8b0133fe..9a859b1c 100644 --- a/src/imports/controls/universal/ComboBox.qml +++ b/src/imports/controls/universal/ComboBox.qml @@ -67,11 +67,13 @@ T.ComboBox { contentItem: Text { text: control.displayText font: control.font - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter elide: Text.ElideRight rightPadding: 12 + control.spacing + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] diff --git a/src/imports/controls/universal/GroupBox.qml b/src/imports/controls/universal/GroupBox.qml index 6e4c6ccd..3888f482 100644 --- a/src/imports/controls/universal/GroupBox.qml +++ b/src/imports/controls/universal/GroupBox.qml @@ -64,10 +64,12 @@ T.GroupBox { text: control.title font: control.font - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor elide: Text.ElideRight horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [label] diff --git a/src/imports/controls/universal/ItemDelegate.qml b/src/imports/controls/universal/ItemDelegate.qml index 7066bb3e..d32612f4 100644 --- a/src/imports/controls/universal/ItemDelegate.qml +++ b/src/imports/controls/universal/ItemDelegate.qml @@ -67,7 +67,8 @@ T.ItemDelegate { horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] diff --git a/src/imports/controls/universal/Label.qml b/src/imports/controls/universal/Label.qml index a575fcbc..db0fdea0 100644 --- a/src/imports/controls/universal/Label.qml +++ b/src/imports/controls/universal/Label.qml @@ -41,6 +41,7 @@ import Qt.labs.controls.universal 1.0 T.Label { id: control - color: !control.enabled ? Universal.baseLowColor : Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground linkColor: Universal.accent } diff --git a/src/imports/controls/universal/Page.qml b/src/imports/controls/universal/Page.qml index d84498fe..85b1ef8c 100644 --- a/src/imports/controls/universal/Page.qml +++ b/src/imports/controls/universal/Page.qml @@ -47,7 +47,7 @@ T.Page { //! [background] background: Rectangle { - color: control.Universal.altHighColor + color: control.Universal.background } //! [background] } diff --git a/src/imports/controls/universal/Pane.qml b/src/imports/controls/universal/Pane.qml index 2f17064b..97d1d140 100644 --- a/src/imports/controls/universal/Pane.qml +++ b/src/imports/controls/universal/Pane.qml @@ -55,7 +55,7 @@ T.Pane { //! [background] background: Rectangle { - color: control.Universal.altHighColor + color: control.Universal.background } //! [background] } diff --git a/src/imports/controls/universal/RadioButton.qml b/src/imports/controls/universal/RadioButton.qml index f0fc3975..2091e082 100644 --- a/src/imports/controls/universal/RadioButton.qml +++ b/src/imports/controls/universal/RadioButton.qml @@ -74,7 +74,8 @@ T.RadioButton { horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] } diff --git a/src/imports/controls/universal/RadioDelegate.qml b/src/imports/controls/universal/RadioDelegate.qml index 3ea37555..4aeeb7ce 100644 --- a/src/imports/controls/universal/RadioDelegate.qml +++ b/src/imports/controls/universal/RadioDelegate.qml @@ -77,7 +77,8 @@ T.RadioDelegate { horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] diff --git a/src/imports/controls/universal/SpinBox.qml b/src/imports/controls/universal/SpinBox.qml index 8088289c..4751b83c 100644 --- a/src/imports/controls/universal/SpinBox.qml +++ b/src/imports/controls/universal/SpinBox.qml @@ -73,7 +73,7 @@ T.SpinBox { font: control.font color: !enabled ? control.Universal.chromeDisabledLowColor : - activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor + activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground selectionColor: control.Universal.accent selectedTextColor: control.Universal.chromeWhiteColor horizontalAlignment: Qt.AlignHCenter @@ -145,7 +145,7 @@ T.SpinBox { border.width: 2 // TextControlBorderThemeThickness border.color: !control.enabled ? control.Universal.baseLowColor : control.activeFocus ? control.Universal.accent : control.Universal.chromeDisabledLowColor - color: control.enabled ? control.Universal.altHighColor : control.Universal.baseLowColor + color: control.enabled ? control.Universal.background : control.Universal.baseLowColor } //! [background] } diff --git a/src/imports/controls/universal/SwipeDelegate.qml b/src/imports/controls/universal/SwipeDelegate.qml index eace3045..6fe7dca0 100644 --- a/src/imports/controls/universal/SwipeDelegate.qml +++ b/src/imports/controls/universal/SwipeDelegate.qml @@ -68,7 +68,8 @@ T.SwipeDelegate { verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground Behavior on x { enabled: !control.down diff --git a/src/imports/controls/universal/Switch.qml b/src/imports/controls/universal/Switch.qml index f4b2e63d..929993a5 100644 --- a/src/imports/controls/universal/Switch.qml +++ b/src/imports/controls/universal/Switch.qml @@ -73,7 +73,8 @@ T.Switch { horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] } diff --git a/src/imports/controls/universal/SwitchDelegate.qml b/src/imports/controls/universal/SwitchDelegate.qml index c543f8e6..4deca436 100644 --- a/src/imports/controls/universal/SwitchDelegate.qml +++ b/src/imports/controls/universal/SwitchDelegate.qml @@ -75,7 +75,8 @@ T.SwitchDelegate { horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] diff --git a/src/imports/controls/universal/TabBar.qml b/src/imports/controls/universal/TabBar.qml index 16b248ed..185a1beb 100644 --- a/src/imports/controls/universal/TabBar.qml +++ b/src/imports/controls/universal/TabBar.qml @@ -73,7 +73,7 @@ T.TabBar { background: Rectangle { implicitWidth: 200 implicitHeight: 48 - color: control.Universal.altHighColor + color: control.Universal.background } //! [background] } diff --git a/src/imports/controls/universal/TabButton.qml b/src/imports/controls/universal/TabButton.qml index 149de82c..9192d64d 100644 --- a/src/imports/controls/universal/TabButton.qml +++ b/src/imports/controls/universal/TabButton.qml @@ -54,9 +54,11 @@ T.TabButton { text: control.text font: control.font elide: Text.ElideRight - color: control.checked || control.down ? control.Universal.baseHighColor : control.Universal.baseLowColor horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter + + opacity: control.checked || control.down ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] } diff --git a/src/imports/controls/universal/TextArea.qml b/src/imports/controls/universal/TextArea.qml index 63b81a0a..810fce82 100644 --- a/src/imports/controls/universal/TextArea.qml +++ b/src/imports/controls/universal/TextArea.qml @@ -57,7 +57,7 @@ T.TextArea { Universal.theme: activeFocus ? Universal.Light : undefined color: !enabled ? Universal.chromeDisabledLowColor : - activeFocus ? Universal.chromeBlackHighColor : Universal.baseHighColor + activeFocus ? Universal.chromeBlackHighColor : Universal.foreground selectionColor: Universal.accent selectedTextColor: Universal.chromeWhiteColor @@ -86,7 +86,7 @@ T.TextArea { border.width: 2 // TextControlBorderThemeThickness border.color: !control.enabled ? control.Universal.baseLowColor : control.activeFocus ? control.Universal.accent : control.Universal.chromeDisabledLowColor - color: control.enabled ? control.Universal.altHighColor : control.Universal.baseLowColor + color: control.enabled ? control.Universal.background : control.Universal.baseLowColor } //! [background] } diff --git a/src/imports/controls/universal/TextField.qml b/src/imports/controls/universal/TextField.qml index 9521b00e..bc891164 100644 --- a/src/imports/controls/universal/TextField.qml +++ b/src/imports/controls/universal/TextField.qml @@ -57,7 +57,7 @@ T.TextField { Universal.theme: activeFocus ? Universal.Light : undefined color: !enabled ? Universal.chromeDisabledLowColor : - activeFocus ? Universal.chromeBlackHighColor : Universal.baseHighColor + activeFocus ? Universal.chromeBlackHighColor : Universal.foreground selectionColor: Universal.accent selectedTextColor: Universal.chromeWhiteColor verticalAlignment: TextInput.AlignVCenter @@ -87,7 +87,7 @@ T.TextField { border.width: 2 // TextControlBorderThemeThickness border.color: !control.enabled ? control.Universal.baseLowColor : control.activeFocus ? control.Universal.accent : control.Universal.chromeDisabledLowColor - color: control.enabled ? control.Universal.altHighColor : control.Universal.baseLowColor + color: control.enabled ? control.Universal.background : control.Universal.baseLowColor } //! [background] } diff --git a/src/imports/controls/universal/ToolButton.qml b/src/imports/controls/universal/ToolButton.qml index 14d2d923..90bbd46e 100644 --- a/src/imports/controls/universal/ToolButton.qml +++ b/src/imports/controls/universal/ToolButton.qml @@ -55,10 +55,12 @@ T.ToolButton { contentItem: Text { text: control.text font: control.font - color: control.enabled ? control.Universal.baseHighColor : control.Universal.baseLowColor elide: Text.ElideRight horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] diff --git a/src/imports/controls/universal/ToolTip.qml b/src/imports/controls/universal/ToolTip.qml index 0b5e8cc0..3fec669f 100644 --- a/src/imports/controls/universal/ToolTip.qml +++ b/src/imports/controls/universal/ToolTip.qml @@ -61,7 +61,8 @@ T.ToolTip { text: control.text // TODO: font: control.font // TODO: wrapMode: Label.Wrap - color: control.Universal.baseHighColor + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground } //! [contentItem] diff --git a/src/imports/controls/universal/Tumbler.qml b/src/imports/controls/universal/Tumbler.qml index c6bafaa1..7e05c6df 100644 --- a/src/imports/controls/universal/Tumbler.qml +++ b/src/imports/controls/universal/Tumbler.qml @@ -48,9 +48,9 @@ T.Tumbler { //! [delegate] delegate: Text { text: modelData - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor font: control.font - opacity: 0.4 + Math.max(0, 1 - Math.abs(Tumbler.displacement)) * 0.6 + color: control.Universal.foreground + opacity: 0.4 + Math.max(0, 1 - Math.abs(Tumbler.displacement)) * (control.enabled ? 0.6 : 0.2) horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } diff --git a/src/imports/controls/universal/qquickuniversalstyle.cpp b/src/imports/controls/universal/qquickuniversalstyle.cpp index f156a80d..1cba474a 100644 --- a/src/imports/controls/universal/qquickuniversalstyle.cpp +++ b/src/imports/controls/universal/qquickuniversalstyle.cpp @@ -134,9 +134,13 @@ static QRgb qquickuniversal_accent_color(QQuickUniversalStyle::Color accent) static QQuickUniversalStyle::Theme DefaultTheme = QQuickUniversalStyle::Light; static QRgb DefaultAccent = qquickuniversal_accent_color(QQuickUniversalStyle::Cobalt); +static QRgb DefaultForeground = qquickuniversal_light_color(QQuickUniversalStyle::BaseHigh); +static QRgb DefaultBackground = qquickuniversal_light_color(QQuickUniversalStyle::AltHigh); QQuickUniversalStyle::QQuickUniversalStyle(QObject *parent) : QQuickStyleAttached(parent), - m_explicitTheme(false), m_explicitAccent(false), m_theme(DefaultTheme), m_accent(DefaultAccent) + m_explicitTheme(false), m_explicitAccent(false), m_explicitForeground(false), m_explicitBackground(false), + m_hasForeground(false), m_hasBackground(false), m_theme(DefaultTheme), + m_accent(DefaultAccent), m_foreground(DefaultForeground), m_background(DefaultBackground) { init(); } @@ -244,6 +248,116 @@ void QQuickUniversalStyle::resetAccent() inheritAccent(universal ? universal->m_accent : DefaultAccent); } +QVariant QQuickUniversalStyle::foreground() const +{ + if (m_hasForeground) + return QColor::fromRgba(m_foreground); + return baseHighColor(); +} + +void QQuickUniversalStyle::setForeground(const QVariant &var) +{ + QRgb foreground = 0; + if (!variantToRgba(var, "foreground", &foreground)) + return; + + m_hasForeground = true; + m_explicitForeground = true; + if (m_foreground == foreground) + return; + + m_foreground = foreground; + propagateForeground(); + emit foregroundChanged(); +} + +void QQuickUniversalStyle::inheritForeground(QRgb foreground, bool has) +{ + if (m_explicitForeground || m_foreground == foreground) + return; + + m_hasForeground = has; + m_foreground = foreground; + propagateForeground(); + emit foregroundChanged(); +} + +void QQuickUniversalStyle::propagateForeground() +{ + const auto styles = childStyles(); + for (QQuickStyleAttached *child : styles) { + QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(child); + if (universal) + universal->inheritForeground(m_foreground, m_hasForeground); + } +} + +void QQuickUniversalStyle::resetForeground() +{ + if (!m_explicitForeground) + return; + + m_hasForeground = false; + m_explicitForeground = false; + QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(parentStyle()); + inheritForeground(universal ? universal->m_foreground : DefaultForeground, universal ? universal->m_hasForeground : false); +} + +QVariant QQuickUniversalStyle::background() const +{ + if (m_hasBackground) + return QColor::fromRgba(m_background); + return altHighColor(); +} + +void QQuickUniversalStyle::setBackground(const QVariant &var) +{ + QRgb background = 0; + if (!variantToRgba(var, "background", &background)) + return; + + m_hasBackground = true; + m_explicitBackground = true; + if (m_background == background) + return; + + m_background = background; + propagateBackground(); + emit backgroundChanged(); +} + +void QQuickUniversalStyle::inheritBackground(QRgb background, bool has) +{ + if (m_explicitBackground || m_background == background) + return; + + m_hasBackground = has; + m_background = background; + propagateBackground(); + emit backgroundChanged(); +} + +void QQuickUniversalStyle::propagateBackground() +{ + const auto styles = childStyles(); + for (QQuickStyleAttached *child : styles) { + QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(child); + if (universal) + universal->inheritBackground(m_background, m_hasBackground); + } +} + +void QQuickUniversalStyle::resetBackground() +{ + if (!m_explicitBackground) + return; + + m_hasBackground = false; + m_explicitBackground = false; + QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(parentStyle()); + inheritBackground(universal ? universal->m_background : DefaultBackground, universal ? universal->m_hasBackground : false); +} + QColor QQuickUniversalStyle::color(Color color) const { return qquickuniversal_accent_color(color); @@ -381,6 +495,8 @@ void QQuickUniversalStyle::parentStyleChange(QQuickStyleAttached *newParent, QQu if (universal) { inheritTheme(universal->theme()); inheritAccent(universal->m_accent); + inheritForeground(universal->m_foreground, universal->m_hasForeground); + inheritBackground(universal->m_background, universal->m_hasBackground); } } @@ -425,6 +541,30 @@ void QQuickUniversalStyle::init() qWarning().nospace().noquote() << "Universal: unknown accent value: " << accentValue; } + QByteArray foregroundValue = resolveSetting("QT_LABS_CONTROLS_UNIVERSAL_FOREGROUND", settings, QStringLiteral("Foreground")); + Color foregroundEnum = toEnumValue<Color>(foregroundValue, &ok); + if (ok) { + DefaultForeground = m_foreground = qquickuniversal_accent_color(foregroundEnum); + } else if (!foregroundValue.isEmpty()) { + QColor color(foregroundValue.constData()); + if (color.isValid()) + DefaultForeground = m_foreground = color.rgba(); + else + qWarning().nospace().noquote() << "Universal: unknown foreground value: " << foregroundValue; + } + + QByteArray backgroundValue = resolveSetting("QT_LABS_CONTROLS_UNIVERSAL_BACKGROUND", settings, QStringLiteral("Background")); + Color backgroundEnum = toEnumValue<Color>(backgroundValue, &ok); + if (ok) { + DefaultBackground = m_background = qquickuniversal_accent_color(backgroundEnum); + } else if (!backgroundValue.isEmpty()) { + QColor color(backgroundValue.constData()); + if (color.isValid()) + DefaultBackground = m_background = color.rgba(); + else + qWarning().nospace().noquote() << "Universal: unknown background value: " << backgroundValue; + } + defaultsInitialized = true; } diff --git a/src/imports/controls/universal/qquickuniversalstyle_p.h b/src/imports/controls/universal/qquickuniversalstyle_p.h index f2e01f75..8e27215d 100644 --- a/src/imports/controls/universal/qquickuniversalstyle_p.h +++ b/src/imports/controls/universal/qquickuniversalstyle_p.h @@ -60,6 +60,8 @@ class QQuickUniversalStyle : public QQuickStyleAttached Q_OBJECT Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged 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(QColor altHighColor READ altHighColor NOTIFY paletteChanged FINAL) Q_PROPERTY(QColor altLowColor READ altLowColor NOTIFY paletteChanged FINAL) @@ -130,6 +132,18 @@ public: void propagateAccent(); void resetAccent(); + QVariant foreground() const; + void setForeground(const QVariant &foreground); + void inheritForeground(QRgb foreground, bool has); + void propagateForeground(); + void resetForeground(); + + QVariant background() const; + void setBackground(const QVariant &background); + void inheritBackground(QRgb background, bool has); + void propagateBackground(); + void resetBackground(); + Q_INVOKABLE QColor color(Color color) const; QColor altHighColor() const; @@ -189,6 +203,8 @@ public: Q_SIGNALS: void themeChanged(); void accentChanged(); + void foregroundChanged(); + void backgroundChanged(); void paletteChanged(); protected: @@ -200,8 +216,14 @@ private: bool m_explicitTheme; bool m_explicitAccent; + bool m_explicitForeground; + bool m_explicitBackground; + bool m_hasForeground; + bool m_hasBackground; QQuickUniversalStyle::Theme m_theme; QRgb m_accent; + QRgb m_foreground; + QRgb m_background; }; QT_END_NAMESPACE |