aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Krupenko <krnekit@gmail.com>2016-03-17 00:26:03 +0200
committerNikita Krupenko <krnekit@gmail.com>2016-03-17 14:44:14 +0000
commit2f476c5818878c7f2ba94522f805cd140e33989e (patch)
treea5ac15ad66809d8fe33349ba88b1b8a4ba1043a3
parent5b4093e415d5a2d49ef396d89b3262339b0651a4 (diff)
Material: use proper shades for dark theme colors
This fixes colors for checked switch dark theme and raised highlighted button in both themes. Change-Id: I3c485fb1b779104d6d7f682921b34cb535312f7c Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
-rw-r--r--examples/controls/gallery/pages/ButtonPage.qml1
-rw-r--r--src/imports/controls/material/qquickmaterialstyle.cpp44
2 files changed, 29 insertions, 16 deletions
diff --git a/examples/controls/gallery/pages/ButtonPage.qml b/examples/controls/gallery/pages/ButtonPage.qml
index 329b53a7..4ac657d2 100644
--- a/examples/controls/gallery/pages/ButtonPage.qml
+++ b/examples/controls/gallery/pages/ButtonPage.qml
@@ -76,6 +76,7 @@ Flickable {
id: button
text: "Second"
width: itemWidth
+ highlighted: true
}
Button {
text: "Third"
diff --git a/src/imports/controls/material/qquickmaterialstyle.cpp b/src/imports/controls/material/qquickmaterialstyle.cpp
index 57b74d62..7355c2d6 100644
--- a/src/imports/controls/material/qquickmaterialstyle.cpp
+++ b/src/imports/controls/material/qquickmaterialstyle.cpp
@@ -405,6 +405,16 @@ static const QRgb switchDisabledTrackColorDark = 0x19FFFFFF;
static const QRgb checkBoxUncheckedRippleColorLight = 0x10000000;
static const QRgb checkBoxUncheckedRippleColorDark = 0x20FFFFFF;
+static QColor alphaBlend(const QColor &bg, const QColor &fg)
+{
+ 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;
+}
+
QQuickMaterialStyle::QQuickMaterialStyle(QObject *parent) : QQuickStyle(parent),
m_explicitTheme(false),
m_explicitPrimary(false),
@@ -695,12 +705,14 @@ QColor QQuickMaterialStyle::raisedHighlightedButtonColor() const
QColor QQuickMaterialStyle::raisedHighlightedButtonHoverColor() const
{
- return shade(accentColor(), Shade600);
+ // Add overlaying black shadow 12% opacity
+ return alphaBlend(accentColor(), QColor::fromRgba(0x1F000000));
}
QColor QQuickMaterialStyle::raisedHighlightedButtonPressColor() const
{
- return shade(accentColor(), Shade700);
+ // Add overlaying black shadow 12% opacity
+ return alphaBlend(shade(accentColor(), m_theme == Light ? Shade700 : Shade100), QColor::fromRgba(0x1F000000));
}
QColor QQuickMaterialStyle::raisedHighlightedButtonDisabledColor() const
@@ -854,33 +866,33 @@ QColor QQuickMaterialStyle::shade(const QColor &color, Shade shade) const
{
switch (shade) {
case Shade50:
- return lighterShade(color, 0.52);
+ return lighterShade(color, m_theme == Light ? 0.52 : 0.26);
case Shade100:
- return lighterShade(color, 0.37);
+ return lighterShade(color, m_theme == Light ? 0.37 : 0.11);
case Shade200:
- return lighterShade(color, 0.26);
+ return m_theme == Light ? lighterShade(color, 0.26) : color;
case Shade300:
- return lighterShade(color, 0.12);
+ return m_theme == Light ? lighterShade(color, 0.12) : darkerShade(color, 0.14);
case Shade400:
- return lighterShade(color, 0.06);
+ return m_theme == Light ? lighterShade(color, 0.06) : darkerShade(color, 0.20);
case Shade500:
- return color;
+ return m_theme == Light ? color : darkerShade(color, 0.26);
case Shade600:
- return darkerShade(color, 0.06);
+ return darkerShade(color, m_theme == Light ? 0.06 : 0.32);
case Shade700:
- return darkerShade(color, 0.12);
+ return darkerShade(color, m_theme == Light ? 0.12 : 0.38);
case Shade800:
- return darkerShade(color, 0.18);
+ return darkerShade(color, m_theme == Light ? 0.18 : 0.44);
case Shade900:
- return darkerShade(color, 0.24);
+ return darkerShade(color, m_theme == Light ? 0.24 : 0.50);
case ShadeA100:
- return lighterShade(color, 0.54);
+ return lighterShade(color, m_theme == Light ? 0.54 : 0.28);
case ShadeA200:
- return lighterShade(color, 0.37);
+ return lighterShade(color, m_theme == Light ? 0.37 : 0.11);
case ShadeA400:
- return lighterShade(color, 0.06);
+ return m_theme == Light ? lighterShade(color, 0.06) : darkerShade(color, 0.20);
case ShadeA700:
- return darkerShade(color, 0.12);
+ return darkerShade(color, m_theme == Light ? 0.12 : 0.38);
default:
Q_UNREACHABLE();
return QColor();