aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/controls/material/qquickmaterialstyle.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-01-13 17:34:27 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-01-14 10:40:01 +0000
commitc08c717225e3c5387dd5f03cf42a7473403142ae (patch)
tree92c8e4f371a34f8ffd7a19c78b825f03fe8fc1ea /src/imports/controls/material/qquickmaterialstyle.cpp
parent15c9d7d07d0427a2fd41dd31f1ce3b620a9f7364 (diff)
Material: add support for user-defined accent colors
Change-Id: Ia88cfcb307d03977c45bff32ad2b1d290d183a57 Task-number: QTBUG-50178 Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/imports/controls/material/qquickmaterialstyle.cpp')
-rw-r--r--src/imports/controls/material/qquickmaterialstyle.cpp710
1 files changed, 416 insertions, 294 deletions
diff --git a/src/imports/controls/material/qquickmaterialstyle.cpp b/src/imports/controls/material/qquickmaterialstyle.cpp
index 67519008..ca2b653c 100644
--- a/src/imports/controls/material/qquickmaterialstyle.cpp
+++ b/src/imports/controls/material/qquickmaterialstyle.cpp
@@ -36,6 +36,7 @@
#include "qquickmaterialstyle_p.h"
+#include <QtCore/qdebug.h>
#include <QtCore/qsettings.h>
#include <QtLabsControls/private/qquickstyle_p.h>
@@ -59,331 +60,332 @@ QT_BEGIN_NAMESPACE
static const QRgb colors[][14] = {
// Red
{
- 0xFFEBEE, // Shade50
- 0xFFCDD2, // Shade100
- 0xEF9A9A, // Shade200
- 0xE57373, // Shade300
- 0xEF5350, // Shade400
- 0xF44336, // Shade500
- 0xE53935, // Shade600
- 0xD32F2F, // Shade700
- 0xC62828, // Shade800
- 0xB71C1C, // Shade900
- 0xFF8A80, // ShadeA100
- 0xFF5252, // ShadeA200
- 0xFF1744, // ShadeA400
- 0xD50000 // ShadeA700
+ 0xFFFFEBEE, // Shade50
+ 0xFFFFCDD2, // Shade100
+ 0xFFEF9A9A, // Shade200
+ 0xFFE57373, // Shade300
+ 0xFFEF5350, // Shade400
+ 0xFFF44336, // Shade500
+ 0xFFE53935, // Shade600
+ 0xFFD32F2F, // Shade700
+ 0xFFC62828, // Shade800
+ 0xFFB71C1C, // Shade900
+ 0xFFFF8A80, // ShadeA100
+ 0xFFFF5252, // ShadeA200
+ 0xFFFF1744, // ShadeA400
+ 0xFFD50000 // ShadeA700
},
// Pink
{
- 0xFCE4EC, // Shade50
- 0xF8BBD0, // Shade100
- 0xF48FB1, // Shade200
- 0xF06292, // Shade300
- 0xEC407A, // Shade400
- 0xE91E63, // Shade500
- 0xD81B60, // Shade600
- 0xC2185B, // Shade700
- 0xAD1457, // Shade800
- 0x880E4F, // Shade900
- 0xFF80AB, // ShadeA100
- 0xFF4081, // ShadeA200
- 0xF50057, // ShadeA400
- 0xC51162 // ShadeA700
+ 0xFFFCE4EC, // Shade50
+ 0xFFF8BBD0, // Shade100
+ 0xFFF48FB1, // Shade200
+ 0xFFF06292, // Shade300
+ 0xFFEC407A, // Shade400
+ 0xFFE91E63, // Shade500
+ 0xFFD81B60, // Shade600
+ 0xFFC2185B, // Shade700
+ 0xFFAD1457, // Shade800
+ 0xFF880E4F, // Shade900
+ 0xFFFF80AB, // ShadeA100
+ 0xFFFF4081, // ShadeA200
+ 0xFFF50057, // ShadeA400
+ 0xFFC51162 // ShadeA700
},
// Purple
{
- 0xF3E5F5, // Shade50
- 0xE1BEE7, // Shade100
- 0xCE93D8, // Shade200
- 0xBA68C8, // Shade300
- 0xAB47BC, // Shade400
- 0x9C27B0, // Shade500
- 0x8E24AA, // Shade600
- 0x7B1FA2, // Shade700
- 0x6A1B9A, // Shade800
- 0x4A148C, // Shade900
- 0xEA80FC, // ShadeA100
- 0xE040FB, // ShadeA200
- 0xD500F9, // ShadeA400
- 0xAA00FF // ShadeA700
+ 0xFFF3E5F5, // Shade50
+ 0xFFE1BEE7, // Shade100
+ 0xFFCE93D8, // Shade200
+ 0xFFBA68C8, // Shade300
+ 0xFFAB47BC, // Shade400
+ 0xFF9C27B0, // Shade500
+ 0xFF8E24AA, // Shade600
+ 0xFF7B1FA2, // Shade700
+ 0xFF6A1B9A, // Shade800
+ 0xFF4A148C, // Shade900
+ 0xFFEA80FC, // ShadeA100
+ 0xFFE040FB, // ShadeA200
+ 0xFFD500F9, // ShadeA400
+ 0xFFAA00FF // ShadeA700
},
// DeepPurple
{
- 0xEDE7F6, // Shade50
- 0xD1C4E9, // Shade100
- 0xB39DDB, // Shade200
- 0x9575CD, // Shade300
- 0x7E57C2, // Shade400
- 0x673AB7, // Shade500
- 0x5E35B1, // Shade600
- 0x512DA8, // Shade700
- 0x4527A0, // Shade800
- 0x311B92, // Shade900
- 0xB388FF, // ShadeA100
- 0x7C4DFF, // ShadeA200
- 0x651FFF, // ShadeA400
- 0x6200EA // ShadeA700
+ 0xFFEDE7F6, // Shade50
+ 0xFFD1C4E9, // Shade100
+ 0xFFB39DDB, // Shade200
+ 0xFF9575CD, // Shade300
+ 0xFF7E57C2, // Shade400
+ 0xFF673AB7, // Shade500
+ 0xFF5E35B1, // Shade600
+ 0xFF512DA8, // Shade700
+ 0xFF4527A0, // Shade800
+ 0xFF311B92, // Shade900
+ 0xFFB388FF, // ShadeA100
+ 0xFF7C4DFF, // ShadeA200
+ 0xFF651FFF, // ShadeA400
+ 0xFF6200EA // ShadeA700
},
// Indigo
{
- 0xE8EAF6, // Shade50
- 0xC5CAE9, // Shade100
- 0x9FA8DA, // Shade200
- 0x7986CB, // Shade300
- 0x5C6BC0, // Shade400
- 0x3F51B5, // Shade500
- 0x3949AB, // Shade600
- 0x303F9F, // Shade700
- 0x283593, // Shade800
- 0x1A237E, // Shade900
- 0x8C9EFF, // ShadeA100
- 0x536DFE, // ShadeA200
- 0x3D5AFE, // ShadeA400
- 0x304FFE // ShadeA700
+ 0xFFE8EAF6, // Shade50
+ 0xFFC5CAE9, // Shade100
+ 0xFF9FA8DA, // Shade200
+ 0xFF7986CB, // Shade300
+ 0xFF5C6BC0, // Shade400
+ 0xFF3F51B5, // Shade500
+ 0xFF3949AB, // Shade600
+ 0xFF303F9F, // Shade700
+ 0xFF283593, // Shade800
+ 0xFF1A237E, // Shade900
+ 0xFF8C9EFF, // ShadeA100
+ 0xFF536DFE, // ShadeA200
+ 0xFF3D5AFE, // ShadeA400
+ 0xFF304FFE // ShadeA700
},
// Blue
{
- 0xE3F2FD, // Shade50
- 0xBBDEFB, // Shade100
- 0x90CAF9, // Shade200
- 0x64B5F6, // Shade300
- 0x42A5F5, // Shade400
- 0x2196F3, // Shade500
- 0x1E88E5, // Shade600
- 0x1976D2, // Shade700
- 0x1565C0, // Shade800
- 0x0D47A1, // Shade900
- 0x82B1FF, // ShadeA100
- 0x448AFF, // ShadeA200
- 0x2979FF, // ShadeA400
- 0x2962FF // ShadeA700
+ 0xFFE3F2FD, // Shade50
+ 0xFFBBDEFB, // Shade100
+ 0xFF90CAF9, // Shade200
+ 0xFF64B5F6, // Shade300
+ 0xFF42A5F5, // Shade400
+ 0xFF2196F3, // Shade500
+ 0xFF1E88E5, // Shade600
+ 0xFF1976D2, // Shade700
+ 0xFF1565C0, // Shade800
+ 0xFF0D47A1, // Shade900
+ 0xFF82B1FF, // ShadeA100
+ 0xFF448AFF, // ShadeA200
+ 0xFF2979FF, // ShadeA400
+ 0xFF2962FF // ShadeA700
},
// LightBlue
{
- 0xE1F5FE, // Shade50
- 0xB3E5FC, // Shade100
- 0x81D4FA, // Shade200
- 0x4FC3F7, // Shade300
- 0x29B6F6, // Shade400
- 0x03A9F4, // Shade500
- 0x039BE5, // Shade600
- 0x0288D1, // Shade700
- 0x0277BD, // Shade800
- 0x01579B, // Shade900
- 0x80D8FF, // ShadeA100
- 0x40C4FF, // ShadeA200
- 0x00B0FF, // ShadeA400
- 0x0091EA // ShadeA700
+ 0xFFE1F5FE, // Shade50
+ 0xFFB3E5FC, // Shade100
+ 0xFF81D4FA, // Shade200
+ 0xFF4FC3F7, // Shade300
+ 0xFF29B6F6, // Shade400
+ 0xFF03A9F4, // Shade500
+ 0xFF039BE5, // Shade600
+ 0xFF0288D1, // Shade700
+ 0xFF0277BD, // Shade800
+ 0xFF01579B, // Shade900
+ 0xFF80D8FF, // ShadeA100
+ 0xFF40C4FF, // ShadeA200
+ 0xFF00B0FF, // ShadeA400
+ 0xFF0091EA // ShadeA700
},
// Cyan
{
- 0xE0F7FA, // Shade50
- 0xB2EBF2, // Shade100
- 0x80DEEA, // Shade200
- 0x4DD0E1, // Shade300
- 0x26C6DA, // Shade400
- 0x00BCD4, // Shade500
- 0x00ACC1, // Shade600
- 0x0097A7, // Shade700
- 0x00838F, // Shade800
- 0x006064, // Shade900
- 0x84FFFF, // ShadeA100
- 0x18FFFF, // ShadeA200
- 0x00E5FF, // ShadeA400
- 0x00B8D4 // ShadeA700
+ 0xFFE0F7FA, // Shade50
+ 0xFFB2EBF2, // Shade100
+ 0xFF80DEEA, // Shade200
+ 0xFF4DD0E1, // Shade300
+ 0xFF26C6DA, // Shade400
+ 0xFF00BCD4, // Shade500
+ 0xFF00ACC1, // Shade600
+ 0xFF0097A7, // Shade700
+ 0xFF00838F, // Shade800
+ 0xFF006064, // Shade900
+ 0xFF84FFFF, // ShadeA100
+ 0xFF18FFFF, // ShadeA200
+ 0xFF00E5FF, // ShadeA400
+ 0xFF00B8D4 // ShadeA700
},
// Teal
{
- 0xE0F2F1, // Shade50
- 0xB2DFDB, // Shade100
- 0x80CBC4, // Shade200
- 0x4DB6AC, // Shade300
- 0x26A69A, // Shade400
- 0x009688, // Shade500
- 0x00897B, // Shade600
- 0x00796B, // Shade700
- 0x00695C, // Shade800
- 0x004D40, // Shade900
- 0xA7FFEB, // ShadeA100
- 0x64FFDA, // ShadeA200
- 0x1DE9B6, // ShadeA400
- 0x00BFA5 // ShadeA700
+ 0xFFE0F2F1, // Shade50
+ 0xFFB2DFDB, // Shade100
+ 0xFF80CBC4, // Shade200
+ 0xFF4DB6AC, // Shade300
+ 0xFF26A69A, // Shade400
+ 0xFF009688, // Shade500
+ 0xFF00897B, // Shade600
+ 0xFF00796B, // Shade700
+ 0xFF00695C, // Shade800
+ 0xFF004D40, // Shade900
+ 0xFFA7FFEB, // ShadeA100
+ 0xFF64FFDA, // ShadeA200
+ 0xFF1DE9B6, // ShadeA400
+ 0xFF00BFA5 // ShadeA700
},
// Green
{
- 0xE8F5E9, // Shade50
- 0xC8E6C9, // Shade100
- 0xA5D6A7, // Shade200
- 0x81C784, // Shade300
- 0x66BB6A, // Shade400
- 0x4CAF50, // Shade500
- 0x43A047, // Shade600
- 0x388E3C, // Shade700
- 0x2E7D32, // Shade800
- 0x1B5E20, // Shade900
- 0xB9F6CA, // ShadeA100
- 0x69F0AE, // ShadeA200
- 0x00E676, // ShadeA400
- 0x00C853 // ShadeA700
+ 0xFFE8F5E9, // Shade50
+ 0xFFC8E6C9, // Shade100
+ 0xFFA5D6A7, // Shade200
+ 0xFF81C784, // Shade300
+ 0xFF66BB6A, // Shade400
+ 0xFF4CAF50, // Shade500
+ 0xFF43A047, // Shade600
+ 0xFF388E3C, // Shade700
+ 0xFF2E7D32, // Shade800
+ 0xFF1B5E20, // Shade900
+ 0xFFB9F6CA, // ShadeA100
+ 0xFF69F0AE, // ShadeA200
+ 0xFF00E676, // ShadeA400
+ 0xFF00C853 // ShadeA700
},
// LightGreen
{
- 0xF1F8E9, // Shade50
- 0xDCEDC8, // Shade100
- 0xC5E1A5, // Shade200
- 0xAED581, // Shade300
- 0x9CCC65, // Shade400
- 0x8BC34A, // Shade500
- 0x7CB342, // Shade600
- 0x689F38, // Shade700
- 0x558B2F, // Shade800
- 0x33691E, // Shade900
- 0xCCFF90, // ShadeA100
- 0xB2FF59, // ShadeA200
- 0x76FF03, // ShadeA400
- 0x64DD17 // ShadeA700
+ 0xFFF1F8E9, // Shade50
+ 0xFFDCEDC8, // Shade100
+ 0xFFC5E1A5, // Shade200
+ 0xFFAED581, // Shade300
+ 0xFF9CCC65, // Shade400
+ 0xFF8BC34A, // Shade500
+ 0xFF7CB342, // Shade600
+ 0xFF689F38, // Shade700
+ 0xFF558B2F, // Shade800
+ 0xFF33691E, // Shade900
+ 0xFFCCFF90, // ShadeA100
+ 0xFFB2FF59, // ShadeA200
+ 0xFF76FF03, // ShadeA400
+ 0xFF64DD17 // ShadeA700
},
// Lime
{
- 0xF9FBE7, // Shade50
- 0xF0F4C3, // Shade100
- 0xE6EE9C, // Shade200
- 0xDCE775, // Shade300
- 0xD4E157, // Shade400
- 0xCDDC39, // Shade500
- 0xC0CA33, // Shade600
- 0xAFB42B, // Shade700
- 0x9E9D24, // Shade800
- 0x827717, // Shade900
- 0xF4FF81, // ShadeA100
- 0xEEFF41, // ShadeA200
- 0xC6FF00, // ShadeA400
- 0xAEEA00 // ShadeA700
+ 0xFFF9FBE7, // Shade50
+ 0xFFF0F4C3, // Shade100
+ 0xFFE6EE9C, // Shade200
+ 0xFFDCE775, // Shade300
+ 0xFFD4E157, // Shade400
+ 0xFFCDDC39, // Shade500
+ 0xFFC0CA33, // Shade600
+ 0xFFAFB42B, // Shade700
+ 0xFF9E9D24, // Shade800
+ 0xFF827717, // Shade900
+ 0xFFF4FF81, // ShadeA100
+ 0xFFEEFF41, // ShadeA200
+ 0xFFC6FF00, // ShadeA400
+ 0xFFAEEA00 // ShadeA700
},
// Yellow
{
- 0xFFFDE7, // Shade50
- 0xFFF9C4, // Shade100
- 0xFFF59D, // Shade200
- 0xFFF176, // Shade300
- 0xFFEE58, // Shade400
- 0xFFEB3B, // Shade500
- 0xFDD835, // Shade600
- 0xFBC02D, // Shade700
- 0xF9A825, // Shade800
- 0xF57F17, // Shade900
- 0xFFFF8D, // ShadeA100
- 0xFFFF00, // ShadeA200
- 0xFFEA00, // ShadeA400
- 0xFFD600 // ShadeA700
+ 0xFFFFFDE7, // Shade50
+ 0xFFFFF9C4, // Shade100
+ 0xFFFFF59D, // Shade200
+ 0xFFFFF176, // Shade300
+ 0xFFFFEE58, // Shade400
+ 0xFFFFEB3B, // Shade500
+ 0xFFFDD835, // Shade600
+ 0xFFFBC02D, // Shade700
+ 0xFFF9A825, // Shade800
+ 0xFFF57F17, // Shade900
+ 0xFFFFFF8D, // ShadeA100
+ 0xFFFFFF00, // ShadeA200
+ 0xFFFFEA00, // ShadeA400
+ 0xFFFFD600 // ShadeA700
},
// Amber
{
- 0xFFF8E1, // Shade50
- 0xFFECB3, // Shade100
- 0xFFE082, // Shade200
- 0xFFD54F, // Shade300
- 0xFFCA28, // Shade400
- 0xFFC107, // Shade500
- 0xFFB300, // Shade600
- 0xFFA000, // Shade700
- 0xFF8F00, // Shade800
- 0xFF6F00, // Shade900
- 0xFFE57F, // ShadeA100
- 0xFFD740, // ShadeA200
- 0xFFC400, // ShadeA400
- 0xFFAB00 // ShadeA700
+ 0xFFFFF8E1, // Shade50
+ 0xFFFFECB3, // Shade100
+ 0xFFFFE082, // Shade200
+ 0xFFFFD54F, // Shade300
+ 0xFFFFCA28, // Shade400
+ 0xFFFFC107, // Shade500
+ 0xFFFFB300, // Shade600
+ 0xFFFFA000, // Shade700
+ 0xFFFF8F00, // Shade800
+ 0xFFFF6F00, // Shade900
+ 0xFFFFE57F, // ShadeA100
+ 0xFFFFD740, // ShadeA200
+ 0xFFFFC400, // ShadeA400
+ 0xFFFFAB00 // ShadeA700
},
// Orange
{
- 0xFFF3E0, // Shade50
- 0xFFE0B2, // Shade100
- 0xFFCC80, // Shade200
- 0xFFB74D, // Shade300
- 0xFFA726, // Shade400
- 0xFF9800, // Shade500
- 0xFB8C00, // Shade600
- 0xF57C00, // Shade700
- 0xEF6C00, // Shade800
- 0xE65100, // Shade900
- 0xFFD180, // ShadeA100
- 0xFFAB40, // ShadeA200
- 0xFF9100, // ShadeA400
- 0xFF6D00 // ShadeA700
+ 0xFFFFF3E0, // Shade50
+ 0xFFFFE0B2, // Shade100
+ 0xFFFFCC80, // Shade200
+ 0xFFFFB74D, // Shade300
+ 0xFFFFA726, // Shade400
+ 0xFFFF9800, // Shade500
+ 0xFFFB8C00, // Shade600
+ 0xFFF57C00, // Shade700
+ 0xFFEF6C00, // Shade800
+ 0xFFE65100, // Shade900
+ 0xFFFFD180, // ShadeA100
+ 0xFFFFAB40, // ShadeA200
+ 0xFFFF9100, // ShadeA400
+ 0xFFFF6D00 // ShadeA700
},
// DeepOrange
{
- 0xFBE9E7, // Shade50
- 0xFFCCBC, // Shade100
- 0xFFAB91, // Shade200
- 0xFF8A65, // Shade300
- 0xFF7043, // Shade400
- 0xFF5722, // Shade500
- 0xF4511E, // Shade600
- 0xE64A19, // Shade700
- 0xD84315, // Shade800
- 0xBF360C, // Shade900
- 0xFF9E80, // ShadeA100
- 0xFF6E40, // ShadeA200
- 0xFF3D00, // ShadeA400
- 0xDD2C00 // ShadeA700
+ 0xFFFBE9E7, // Shade50
+ 0xFFFFCCBC, // Shade100
+ 0xFFFFAB91, // Shade200
+ 0xFFFF8A65, // Shade300
+ 0xFFFF7043, // Shade400
+ 0xFFFF5722, // Shade500
+ 0xFFF4511E, // Shade600
+ 0xFFE64A19, // Shade700
+ 0xFFD84315, // Shade800
+ 0xFFBF360C, // Shade900
+ 0xFFFF9E80, // ShadeA100
+ 0xFFFF6E40, // ShadeA200
+ 0xFFFF3D00, // ShadeA400
+ 0xFFDD2C00 // ShadeA700
},
// Brown
{
- 0xEFEBE9, // Shade50
- 0xD7CCC8, // Shade100
- 0xBCAAA4, // Shade200
- 0xA1887F, // Shade300
- 0x8D6E63, // Shade400
- 0x795548, // Shade500
- 0x6D4C41, // Shade600
- 0x5D4037, // Shade700
- 0x4E342E, // Shade800
- 0x3E2723, // Shade900
- 0x000000, // ShadeA100
- 0x000000, // ShadeA200
- 0x000000, // ShadeA400
- 0x000000 // ShadeA700
+ 0xFFEFEBE9, // Shade50
+ 0xFFD7CCC8, // Shade100
+ 0xFFBCAAA4, // Shade200
+ 0xFFA1887F, // Shade300
+ 0xFF8D6E63, // Shade400
+ 0xFF795548, // Shade500
+ 0xFF6D4C41, // Shade600
+ 0xFF5D4037, // Shade700
+ 0xFF4E342E, // Shade800
+ 0xFF3E2723, // Shade900
+ 0xFF000000, // ShadeA100
+ 0xFF000000, // ShadeA200
+ 0xFF000000, // ShadeA400
+ 0xFF000000 // ShadeA700
},
// Grey
{
- 0xFAFAFA, // Shade50
- 0xF5F5F5, // Shade100
- 0xEEEEEE, // Shade200
- 0xE0E0E0, // Shade300
- 0xBDBDBD, // Shade400
- 0x9E9E9E, // Shade500
- 0x757575, // Shade600
- 0x616161, // Shade700
- 0x424242, // Shade800
- 0x212121, // Shade900
- 0x000000, // ShadeA100
- 0x000000, // ShadeA200
- 0x000000, // ShadeA400
- 0x000000 // ShadeA700
+ 0xFFFAFAFA, // Shade50
+ 0xFFF5F5F5, // Shade100
+ 0xFFEEEEEE, // Shade200
+ 0xFFE0E0E0, // Shade300
+ 0xFFBDBDBD, // Shade400
+ 0xFF9E9E9E, // Shade500
+ 0xFF757575, // Shade600
+ 0xFF616161, // Shade700
+ 0xFF424242, // Shade800
+ 0xFF212121, // Shade900
+ 0xFF000000, // ShadeA100
+ 0xFF000000, // ShadeA200
+ 0xFF000000, // ShadeA400
+ 0xFF000000 // ShadeA700
},
// BlueGrey
{
- 0xECEFF1, // Shade50
- 0xCFD8DC, // Shade100
- 0xB0BEC5, // Shade200
- 0x90A4AE, // Shade300
- 0x78909C, // Shade400
- 0x607D8B, // Shade500
- 0x546E7A, // Shade600
- 0x455A64, // Shade700
- 0x37474F, // Shade800
- 0x263238, // Shade900
- 0x000000, // ShadeA100
- 0x000000, // ShadeA200
- 0x000000, // ShadeA400
- 0x000000 // ShadeA700
+ 0xFFECEFF1, // Shade50
+ 0xFFCFD8DC, // Shade100
+ 0xFFB0BEC5, // Shade200
+ 0xFF90A4AE, // Shade300
+ 0xFF78909C, // Shade400
+ 0xFF607D8B, // Shade500
+ 0xFF546E7A, // Shade600
+ 0xFF455A64, // Shade700
+ 0xFF37474F, // Shade800
+ 0xFF263238, // Shade900
+ 0xFF000000, // ShadeA100
+ 0xFF000000, // ShadeA200
+ 0xFF000000, // ShadeA400
+ 0xFF000000 // ShadeA700
}
};
static QQuickMaterialStyle::Theme defaultTheme = QQuickMaterialStyle::Light;
-static QQuickMaterialStyle::Color defaultAccent = QQuickMaterialStyle::Teal;
+static uint defaultAccent = QQuickMaterialStyle::Teal;
+static bool defaultCustom = false;
static const QRgb backgroundColorLight = 0xFFFAFAFA;
static const QRgb backgroundColorDark = 0xFF303030;
static const QRgb dialogColorLight = 0xFFFFFFFF;
@@ -418,6 +420,7 @@ static const QRgb checkBoxUncheckedRippleColorDark = 0x20FFFFFF;
QQuickMaterialStyle::QQuickMaterialStyle(QObject *parent) : QQuickStyle(parent),
m_explicitTheme(false),
m_explicitAccent(false),
+ m_customAccent(defaultCustom),
m_theme(defaultTheme),
m_accent(defaultAccent)
{
@@ -473,26 +476,52 @@ void QQuickMaterialStyle::resetTheme()
}
}
-QQuickMaterialStyle::Color QQuickMaterialStyle::accent() const
+QVariant QQuickMaterialStyle::accent() const
{
- return m_accent;
+ return accentColor();
}
-void QQuickMaterialStyle::setAccent(QQuickMaterialStyle::Color color)
+void QQuickMaterialStyle::setAccent(const QVariant &var)
{
+ QRgb accent = 0;
+ bool custom = false;
+ if (var.type() == QVariant::Int) {
+ int val = var.toInt();
+ if (val > BlueGrey) {
+ qWarning() << "QQuickMaterialStyle: unknown accent" << val;
+ return;
+ }
+ accent = val;
+ } else {
+ int val = QMetaEnum::fromType<Color>().keyToValue(var.toByteArray());
+ if (val != -1) {
+ accent = val;
+ } else {
+ QColor color(var.toString());
+ if (!color.isValid()) {
+ qWarning() << "QQuickMaterialStyle: unknown accent" << var.toString();
+ return;
+ }
+ custom = true;
+ accent = color.rgba();
+ }
+ }
+
m_explicitAccent = true;
- if (m_accent != color) {
- m_accent = color;
+ if (m_accent != accent) {
+ m_customAccent = custom;
+ m_accent = accent;
propagateAccent();
emit accentChanged();
emit paletteChanged();
}
}
-void QQuickMaterialStyle::inheritAccent(QQuickMaterialStyle::Color color)
+void QQuickMaterialStyle::inheritAccent(uint accent, bool custom)
{
- if (!m_explicitAccent && m_accent != color) {
- m_accent = color;
+ if (!m_explicitAccent && m_accent != accent) {
+ m_customAccent = custom;
+ m_accent = accent;
propagateAccent();
emit accentChanged();
}
@@ -503,22 +532,27 @@ void QQuickMaterialStyle::propagateAccent()
foreach (QQuickStyle *child, childStyles()) {
QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(child);
if (material)
- material->inheritAccent(m_accent);
+ material->inheritAccent(m_accent, m_customAccent);
}
}
void QQuickMaterialStyle::resetAccent()
{
if (m_explicitAccent) {
+ m_customAccent = false;
m_explicitAccent = false;
QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(parentStyle());
- inheritAccent(material ? material->accent() : defaultAccent);
+ inheritAccent(material ? material->m_accent : defaultAccent, true);
}
}
QColor QQuickMaterialStyle::accentColor() const
{
- return color(m_accent, Shade500);
+ if (m_customAccent)
+ return QColor::fromRgba(m_accent);
+ if (m_accent > BlueGrey)
+ return QColor();
+ return colors[m_accent][Shade500];
}
QColor QQuickMaterialStyle::backgroundColor() const
@@ -591,12 +625,12 @@ QColor QQuickMaterialStyle::raisedHighlightedButtonColor() const
QColor QQuickMaterialStyle::raisedHighlightedButtonHoverColor() const
{
- return color(m_accent, Shade600);
+ return shade(accentColor(), Shade600);
}
QColor QQuickMaterialStyle::raisedHighlightedButtonPressColor() const
{
- return color(m_accent, Shade700);
+ return shade(accentColor(), Shade700);
}
QColor QQuickMaterialStyle::raisedHighlightedButtonDisabledColor() const
@@ -626,7 +660,7 @@ QColor QQuickMaterialStyle::checkBoxUncheckedRippleColor() const
QColor QQuickMaterialStyle::checkBoxCheckedRippleColor() const
{
- QColor pressColor = color(m_accent, Shade500);
+ QColor pressColor = accentColor();
// TODO: find out actual value
pressColor.setAlpha(30);
return pressColor;
@@ -639,7 +673,7 @@ QColor QQuickMaterialStyle::switchUncheckedTrackColor() const
QColor QQuickMaterialStyle::switchCheckedTrackColor() const
{
- QColor trackColor = m_theme == Light ? accentColor() : color(m_accent, Shade200);
+ QColor trackColor = m_theme == Light ? accentColor() : shade(accentColor(), Shade200);
trackColor.setAlphaF(0.5);
return trackColor;
}
@@ -651,7 +685,7 @@ QColor QQuickMaterialStyle::switchUncheckedHandleColor() const
QColor QQuickMaterialStyle::switchCheckedHandleColor() const
{
- return m_theme == Light ? accentColor() : color(m_accent, Shade200);
+ return m_theme == Light ? accentColor() : shade(accentColor(), Shade200);
}
QColor QQuickMaterialStyle::switchDisabledTrackColor() const
@@ -702,28 +736,102 @@ QColor QQuickMaterialStyle::color(QQuickMaterialStyle::Color color, QQuickMateri
return colors[color][shade];
}
+static QColor lighterShade(const QColor &color, qreal amount)
+{
+ QColor hsl = color.toHsl();
+ hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound<qreal>(0.0, hsl.lightnessF() + amount, 1.0), color.alphaF());
+ return hsl.convertTo(color.spec());
+}
+
+QColor darkerShade(const QColor &color, qreal amount)
+{
+ QColor hsl = color.toHsl();
+ hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound<qreal>(0.0, hsl.lightnessF() - amount, 1.0), color.alphaF());
+ return hsl.convertTo(color.spec());
+}
+
+/*
+ * The following lightness values originate from the Material Design Color Generator project.
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015 mbitson
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+QColor QQuickMaterialStyle::shade(const QColor &color, Shade shade) const
+{
+ switch (shade) {
+ case Shade50:
+ return lighterShade(color, 0.52);
+ case Shade100:
+ return lighterShade(color, 0.37);
+ case Shade200:
+ return lighterShade(color, 0.26);
+ case Shade300:
+ return lighterShade(color, 0.12);
+ case Shade400:
+ return lighterShade(color, 0.06);
+ case Shade500:
+ return color;
+ case Shade600:
+ return darkerShade(color, 0.06);
+ case Shade700:
+ return darkerShade(color, 0.12);
+ case Shade800:
+ return darkerShade(color, 0.18);
+ case Shade900:
+ return darkerShade(color, 0.24);
+ case ShadeA100:
+ return lighterShade(color, 0.54);
+ case ShadeA200:
+ return lighterShade(color, 0.37);
+ case ShadeA400:
+ return lighterShade(color, 0.06);
+ case ShadeA700:
+ return darkerShade(color, 0.12);
+ default:
+ Q_UNREACHABLE();
+ return QColor();
+ }
+}
+
void QQuickMaterialStyle::parentStyleChange(QQuickStyle *newParent, QQuickStyle *oldParent)
{
Q_UNUSED(oldParent);
QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(newParent);
if (material) {
- inheritAccent(material->accent());
+ inheritAccent(material->m_accent, material->m_customAccent);
inheritTheme(material->theme());
}
}
template <typename Enum>
-static Enum readEnumValue(QSettings *settings, const QString &name, Enum fallback)
+static Enum readEnumValue(QSettings *settings, const QString &name, bool *ok)
{
- Enum result = fallback;
- if (settings->contains(name)) {
+ int value = -1;
+ *ok = settings->contains(name);
+ if (*ok) {
QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
- bool ok = false;
- int value = enumeration.keyToValue(settings->value(name).toByteArray(), &ok);
- if (ok)
- result = static_cast<Enum>(value);
+ value = enumeration.keyToValue(settings->value(name).toByteArray(), ok);
}
- return result;
+ return static_cast<Enum>(value);
}
void QQuickMaterialStyle::init()
@@ -732,8 +840,22 @@ void QQuickMaterialStyle::init()
if (!defaultsInitialized) {
QSharedPointer<QSettings> settings = QQuickStyle::settings(QStringLiteral("Material"));
if (!settings.isNull()) {
- defaultTheme = m_theme = readEnumValue<Theme>(settings.data(), QStringLiteral("Theme"), m_theme);
- defaultAccent = m_accent = readEnumValue<Color>(settings.data(), QStringLiteral("Accent"), m_accent);
+ bool ok = false;
+ Theme theme = readEnumValue<Theme>(settings.data(), QStringLiteral("Theme"), &ok);
+ if (ok)
+ defaultTheme = m_theme = theme;
+
+ Color accent = readEnumValue<Color>(settings.data(), QStringLiteral("Accent"), &ok);
+ if (ok) {
+ defaultCustom = m_customAccent = false;
+ defaultAccent = m_accent = accent;
+ } else {
+ QColor color(settings->value(QStringLiteral("Accent")).toString());
+ if (color.isValid()) {
+ defaultCustom = m_customAccent = true;
+ defaultAccent = m_accent = color.rgba();
+ }
+ }
}
defaultsInitialized = true;
}