diff options
Diffstat (limited to 'src/imports/controls/material/qquickmaterialstyle.cpp')
-rw-r--r-- | src/imports/controls/material/qquickmaterialstyle.cpp | 133 |
1 files changed, 33 insertions, 100 deletions
diff --git a/src/imports/controls/material/qquickmaterialstyle.cpp b/src/imports/controls/material/qquickmaterialstyle.cpp index 1c19bbd3..08203482 100644 --- a/src/imports/controls/material/qquickmaterialstyle.cpp +++ b/src/imports/controls/material/qquickmaterialstyle.cpp @@ -408,37 +408,24 @@ static const QRgb raisedButtonColorLight = 0xFFD6D7D7; static const QRgb raisedButtonColorDark = 0x3FCCCCCC; static const QRgb raisedButtonDisabledColorLight = dividerColorLight; static const QRgb raisedButtonDisabledColorDark = dividerColorDark; -static const QRgb flatButtonPressColorLight = 0x66999999; -static const QRgb flatButtonPressColorDark = 0x3FCCCCCC; -static const QRgb flatButtonFocusColorLight = 0x33CCCCCC; -static const QRgb flatButtonFocusColorDark = 0x26CCCCCC; -static const QRgb swipeDelegateColorLight = 0xFFD6D7D7; -static const QRgb swipeDelegateColorDark = 0xFF525252; -static const QRgb swipeDelegateHoverColorLight = 0xFFDFDFDF; -static const QRgb swipeDelegateHoverColorDark = 0xFF5D5D5D; -static const QRgb swipeDelegatePressColorLight = 0xFFCFCFCF; -static const QRgb swipeDelegatePressColorDark = 0xFF484848; -static const QRgb swipeDelegateDisabledColorLight = 0xFFEFEFEF; -static const QRgb swipeDelegateDisabledColorDark = 0xFF7C7C7C; static const QRgb frameColorLight = hintTextColorLight; static const QRgb frameColorDark = hintTextColorDark; static const QRgb switchUncheckedTrackColorLight = 0x42000000; static const QRgb switchUncheckedTrackColorDark = 0x4CFFFFFF; static const QRgb switchDisabledTrackColorLight = 0x1E000000; static const QRgb switchDisabledTrackColorDark = 0x19FFFFFF; -static const QRgb checkBoxUncheckedRippleColorLight = 0x10000000; -static const QRgb checkBoxUncheckedRippleColorDark = 0x20FFFFFF; +static const QRgb rippleColorLight = 0x10000000; +static const QRgb rippleColorDark = 0x20FFFFFF; static const QRgb spinBoxDisabledIconColorLight = 0xFFCCCCCC; static const QRgb spinBoxDisabledIconColorDark = 0xFF666666; -static QColor alphaBlend(const QColor &bg, const QColor &fg) +extern bool qt_is_dark_system_theme(); + +static QQuickMaterialStyle::Theme effectiveTheme(QQuickMaterialStyle::Theme theme) { - QColor result; - result.setRedF(fg.redF() * fg.alphaF() + bg.redF() * (1.0 - fg.alphaF())); - result.setGreenF(fg.greenF() * fg.alphaF() + bg.greenF() * (1.0 - fg.alphaF())); - result.setBlueF(fg.blueF() * fg.alphaF() + bg.blueF() * (1.0 - fg.alphaF())); - result.setAlphaF(bg.alphaF() + fg.alphaF() * (1.0 - bg.alphaF())); - return result; + if (theme == QQuickMaterialStyle::System) + theme = qt_is_dark_system_theme() ? QQuickMaterialStyle::Dark : QQuickMaterialStyle::Light; + return theme; } QQuickMaterialStyle::QQuickMaterialStyle(QObject *parent) : QQuickStyleAttached(parent), @@ -475,6 +462,9 @@ QQuickMaterialStyle::Theme QQuickMaterialStyle::theme() const void QQuickMaterialStyle::setTheme(Theme theme) { + if (theme == System) + theme = qt_is_dark_system_theme() ? Dark : Light; + m_explicitTheme = true; if (m_theme == theme) return; @@ -648,7 +638,13 @@ void QQuickMaterialStyle::resetAccent() QVariant QQuickMaterialStyle::foreground() const { - return primaryTextColor(); + if (!m_hasForeground) + return QColor::fromRgba(m_theme == Light ? primaryTextColorLight : primaryTextColorDark); + if (m_customForeground) + return QColor::fromRgba(m_foreground); + if (m_foreground > BlueGrey) + return QColor(); + return QColor::fromRgba(colors[m_foreground][Shade500]); } void QQuickMaterialStyle::setForeground(const QVariant &var) @@ -824,13 +820,7 @@ QColor QQuickMaterialStyle::backgroundColor() const QColor QQuickMaterialStyle::primaryTextColor() const { - if (!m_hasForeground) - return QColor::fromRgba(m_theme == Light ? primaryTextColorLight : primaryTextColorDark); - if (m_customForeground) - return QColor::fromRgba(m_foreground); - if (m_foreground > BlueGrey) - return QColor(); - return colors[m_foreground][Shade500]; + return QColor::fromRgba(m_theme == Light ? primaryTextColorLight : primaryTextColorDark); } QColor QQuickMaterialStyle::primaryHighlightedTextColor() const @@ -877,10 +867,9 @@ QColor QQuickMaterialStyle::iconDisabledColor() const return QColor::fromRgba(m_theme == Light ? iconDisabledColorLight : iconDisabledColorDark); } -QColor QQuickMaterialStyle::buttonColor(bool highlighted, bool pressed, bool hover) const +QColor QQuickMaterialStyle::buttonColor(bool highlighted) const { - Shade shade = pressed ? (m_theme == Light ? Shade700 : Shade100) - : themeShade(); + Shade shade = themeShade(); QColor color = Qt::transparent; @@ -891,45 +880,14 @@ QColor QQuickMaterialStyle::buttonColor(bool highlighted, bool pressed, bool hov } else if (elevation() > 0) { color = QColor::fromRgba(m_theme == Light ? raisedButtonColorLight : raisedButtonColorDark); - - if (pressed) { - color = this->shade(color, shade); - } } - if (color == Qt::transparent) { - if (pressed) { - return QColor::fromRgba(m_theme == Light ? flatButtonPressColorLight - : flatButtonPressColorDark); - } else if (hover) { - return QColor::fromRgba(m_theme == Light ? flatButtonFocusColorLight - : flatButtonFocusColorDark); - } else { - return color; - } - } - - if (pressed || hover) { - // Add overlaying black shadow 12% opacity - return alphaBlend(color, QColor::fromRgba(0x1F000000)); - } else { - return color; - } + return color; } QColor QQuickMaterialStyle::buttonColor() const { - return buttonColor(false, false, false); -} - -QColor QQuickMaterialStyle::buttonHoverColor() const -{ - return buttonColor(false, false, true); -} - -QColor QQuickMaterialStyle::buttonPressColor() const -{ - return buttonColor(false, true, false); + return buttonColor(false); } QColor QQuickMaterialStyle::buttonDisabledColor() const @@ -944,37 +902,7 @@ QColor QQuickMaterialStyle::buttonDisabledColor() const QColor QQuickMaterialStyle::highlightedButtonColor() const { - return buttonColor(true, false, false); -} - -QColor QQuickMaterialStyle::highlightedButtonHoverColor() const -{ - return buttonColor(true, false, true); -} - -QColor QQuickMaterialStyle::highlightedButtonPressColor() const -{ - return buttonColor(true, true, false); -} - -QColor QQuickMaterialStyle::swipeDelegateColor() const -{ - return QColor::fromRgba(m_theme == Light ? swipeDelegateColorLight : swipeDelegateColorDark); -} - -QColor QQuickMaterialStyle::swipeDelegateHoverColor() const -{ - return QColor::fromRgba(m_theme == Light ? swipeDelegateHoverColorLight : swipeDelegateHoverColorDark); -} - -QColor QQuickMaterialStyle::swipeDelegatePressColor() const -{ - return QColor::fromRgba(m_theme == Light ? swipeDelegatePressColorLight : swipeDelegatePressColorDark); -} - -QColor QQuickMaterialStyle::swipeDelegateDisabledColor() const -{ - return QColor::fromRgba(m_theme == Light ? swipeDelegateDisabledColorLight : swipeDelegateDisabledColorDark); + return buttonColor(true); } QColor QQuickMaterialStyle::frameColor() const @@ -982,12 +910,12 @@ QColor QQuickMaterialStyle::frameColor() const return QColor::fromRgba(m_theme == Light ? frameColorLight : frameColorDark); } -QColor QQuickMaterialStyle::checkBoxUncheckedRippleColor() const +QColor QQuickMaterialStyle::rippleColor() const { - return QColor::fromRgba(m_theme == Light ? checkBoxUncheckedRippleColorLight : checkBoxUncheckedRippleColorDark); + return QColor::fromRgba(m_theme == Light ? rippleColorLight : rippleColorDark); } -QColor QQuickMaterialStyle::checkBoxCheckedRippleColor() const +QColor QQuickMaterialStyle::highlightedRippleColor() const { QColor pressColor = accentColor(); pressColor.setAlpha(m_theme == Light ? 30 : 50); @@ -1031,6 +959,11 @@ QColor QQuickMaterialStyle::scrollBarColor() const return QColor::fromRgba(m_theme == Light ? 0x40000000 : 0x40FFFFFF); } +QColor QQuickMaterialStyle::scrollBarHoveredColor() const +{ + return QColor::fromRgba(m_theme == Light ? 0x60000000 : 0x60FFFFFF); +} + QColor QQuickMaterialStyle::scrollBarPressedColor() const { return QColor::fromRgba(m_theme == Light ? 0x80000000 : 0x80FFFFFF); @@ -1242,7 +1175,7 @@ void QQuickMaterialStyle::init() QByteArray themeValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_THEME", settings, QStringLiteral("Theme")); Theme themeEnum = toEnumValue<Theme>(themeValue, &ok); if (ok) - globalTheme = m_theme = themeEnum; + globalTheme = m_theme = effectiveTheme(themeEnum); else if (!themeValue.isEmpty()) qWarning().nospace().noquote() << "Material: unknown theme value: " << themeValue; |