qtmaterialtheme.cpp 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #include "lib/qtmaterialtheme.h"
  2. #include "lib/qtmaterialtheme_p.h"
  3. #include <QString>
  4. #include <QStringBuilder>
  5. #include <QDebug>
  6. /*!material
  7. * \class QtMaterialThemePrivate
  8. * \internal
  9. */
  10. QtMaterialThemePrivate::QtMaterialThemePrivate(QtMaterialTheme *q)
  11. : q_ptr(q)
  12. {
  13. }
  14. QtMaterialThemePrivate::~QtMaterialThemePrivate()
  15. {
  16. }
  17. QColor QtMaterialThemePrivate::rgba(int r, int g, int b, qreal a) const
  18. {
  19. QColor color(r, g, b);
  20. color.setAlphaF(a);
  21. return color;
  22. }
  23. /*!
  24. * \class QtMaterialTheme
  25. */
  26. QtMaterialTheme::QtMaterialTheme(QObject *parent)
  27. : QObject(parent),
  28. d_ptr(new QtMaterialThemePrivate(this))
  29. {
  30. setColor("primary1", Material::cyan500);
  31. setColor("primary2", Material::cyan700);
  32. setColor("primary3", Material::lightBlack);
  33. setColor("accent1", Material::pinkA200);
  34. setColor("accent2", Material::grey100);
  35. setColor("accent3", Material::grey500);
  36. setColor("text", Material::darkBlack);
  37. setColor("alternateText", Material::white);
  38. setColor("canvas", Material::white);
  39. setColor("border", Material::grey300);
  40. setColor("disabled", Material::minBlack);
  41. setColor("disabled2", Material::faintBlack);
  42. setColor("disabled3", Material::grey300);
  43. }
  44. QtMaterialTheme::~QtMaterialTheme()
  45. {
  46. }
  47. QColor QtMaterialTheme::getColor(const QString &key) const
  48. {
  49. Q_D(const QtMaterialTheme);
  50. if (!d->colors.contains(key)) {
  51. qWarning() << "A theme color matching the key '" << key << "' could not be found.";
  52. return QColor();
  53. }
  54. return d->colors.value(key);
  55. }
  56. void QtMaterialTheme::setColor(const QString &key, const QColor &color)
  57. {
  58. Q_D(QtMaterialTheme);
  59. d->colors.insert(key, color);
  60. }
  61. void QtMaterialTheme::setColor(const QString &key, Material::Color color)
  62. {
  63. Q_D(QtMaterialTheme);
  64. static const QColor palette[] = {
  65. QColor("#ffebee"), QColor("#ffcdd2"), QColor("#ef9a9a"), QColor("#e57373"),
  66. QColor("#ef5350"), QColor("#f44336"), QColor("#e53935"), QColor("#d32f2f"),
  67. QColor("#c62828"), QColor("#b71c1c"), QColor("#ff8a80"), QColor("#ff5252"),
  68. QColor("#ff1744"), QColor("#d50000"), QColor("#fce4ec"), QColor("#f8bbd0"),
  69. QColor("#f48fb1"), QColor("#f06292"), QColor("#ec407a"), QColor("#e91e63"),
  70. QColor("#d81b60"), QColor("#c2185b"), QColor("#ad1457"), QColor("#880e4f"),
  71. QColor("#ff80ab"), QColor("#ff4081"), QColor("#f50057"), QColor("#c51162"),
  72. QColor("#f3e5f5"), QColor("#e1bee7"), QColor("#ce93d8"), QColor("#ba68c8"),
  73. QColor("#ab47bc"), QColor("#9c27b0"), QColor("#8e24aa"), QColor("#7b1fa2"),
  74. QColor("#6a1b9a"), QColor("#4a148c"), QColor("#ea80fc"), QColor("#e040fb"),
  75. QColor("#d500f9"), QColor("#aa00ff"), QColor("#ede7f6"), QColor("#d1c4e9"),
  76. QColor("#b39ddb"), QColor("#9575cd"), QColor("#7e57c2"), QColor("#673ab7"),
  77. QColor("#5e35b1"), QColor("#512da8"), QColor("#4527a0"), QColor("#311b92"),
  78. QColor("#b388ff"), QColor("#7c4dff"), QColor("#651fff"), QColor("#6200ea"),
  79. QColor("#e8eaf6"), QColor("#c5cae9"), QColor("#9fa8da"), QColor("#7986cb"),
  80. QColor("#5c6bc0"), QColor("#3f51b5"), QColor("#3949ab"), QColor("#303f9f"),
  81. QColor("#283593"), QColor("#1a237e"), QColor("#8c9eff"), QColor("#536dfe"),
  82. QColor("#3d5afe"), QColor("#304ffe"), QColor("#e3f2fd"), QColor("#bbdefb"),
  83. QColor("#90caf9"), QColor("#64b5f6"), QColor("#42a5f5"), QColor("#2196f3"),
  84. QColor("#1e88e5"), QColor("#1976d2"), QColor("#1565c0"), QColor("#0d47a1"),
  85. QColor("#82b1ff"), QColor("#448aff"), QColor("#2979ff"), QColor("#2962ff"),
  86. QColor("#e1f5fe"), QColor("#b3e5fc"), QColor("#81d4fa"), QColor("#4fc3f7"),
  87. QColor("#29b6f6"), QColor("#03a9f4"), QColor("#039be5"), QColor("#0288d1"),
  88. QColor("#0277bd"), QColor("#01579b"), QColor("#80d8ff"), QColor("#40c4ff"),
  89. QColor("#00b0ff"), QColor("#0091ea"), QColor("#e0f7fa"), QColor("#b2ebf2"),
  90. QColor("#80deea"), QColor("#4dd0e1"), QColor("#26c6da"), QColor("#00bcd4"),
  91. QColor("#00acc1"), QColor("#0097a7"), QColor("#00838f"), QColor("#006064"),
  92. QColor("#84ffff"), QColor("#18ffff"), QColor("#00e5ff"), QColor("#00b8d4"),
  93. QColor("#e0f2f1"), QColor("#b2dfdb"), QColor("#80cbc4"), QColor("#4db6ac"),
  94. QColor("#26a69a"), QColor("#009688"), QColor("#00897b"), QColor("#00796b"),
  95. QColor("#00695c"), QColor("#004d40"), QColor("#a7ffeb"), QColor("#64ffda"),
  96. QColor("#1de9b6"), QColor("#00bfa5"), QColor("#e8f5e9"), QColor("#c8e6c9"),
  97. QColor("#a5d6a7"), QColor("#81c784"), QColor("#66bb6a"), QColor("#4caf50"),
  98. QColor("#43a047"), QColor("#388e3c"), QColor("#2e7d32"), QColor("#1b5e20"),
  99. QColor("#b9f6ca"), QColor("#69f0ae"), QColor("#00e676"), QColor("#00c853"),
  100. QColor("#f1f8e9"), QColor("#dcedc8"), QColor("#c5e1a5"), QColor("#aed581"),
  101. QColor("#9ccc65"), QColor("#8bc34a"), QColor("#7cb342"), QColor("#689f38"),
  102. QColor("#558b2f"), QColor("#33691e"), QColor("#ccff90"), QColor("#b2ff59"),
  103. QColor("#76ff03"), QColor("#64dd17"), QColor("#f9fbe7"), QColor("#f0f4c3"),
  104. QColor("#e6ee9c"), QColor("#dce775"), QColor("#d4e157"), QColor("#cddc39"),
  105. QColor("#c0ca33"), QColor("#afb42b"), QColor("#9e9d24"), QColor("#827717"),
  106. QColor("#f4ff81"), QColor("#eeff41"), QColor("#c6ff00"), QColor("#aeea00"),
  107. QColor("#fffde7"), QColor("#fff9c4"), QColor("#fff59d"), QColor("#fff176"),
  108. QColor("#ffee58"), QColor("#ffeb3b"), QColor("#fdd835"), QColor("#fbc02d"),
  109. QColor("#f9a825"), QColor("#f57f17"), QColor("#ffff8d"), QColor("#ffff00"),
  110. QColor("#ffea00"), QColor("#ffd600"), QColor("#fff8e1"), QColor("#ffecb3"),
  111. QColor("#ffe082"), QColor("#ffd54f"), QColor("#ffca28"), QColor("#ffc107"),
  112. QColor("#ffb300"), QColor("#ffa000"), QColor("#ff8f00"), QColor("#ff6f00"),
  113. QColor("#ffe57f"), QColor("#ffd740"), QColor("#ffc400"), QColor("#ffab00"),
  114. QColor("#fff3e0"), QColor("#ffe0b2"), QColor("#ffcc80"), QColor("#ffb74d"),
  115. QColor("#ffa726"), QColor("#ff9800"), QColor("#fb8c00"), QColor("#f57c00"),
  116. QColor("#ef6c00"), QColor("#e65100"), QColor("#ffd180"), QColor("#ffab40"),
  117. QColor("#ff9100"), QColor("#ff6d00"), QColor("#fbe9e7"), QColor("#ffccbc"),
  118. QColor("#ffab91"), QColor("#ff8a65"), QColor("#ff7043"), QColor("#ff5722"),
  119. QColor("#f4511e"), QColor("#e64a19"), QColor("#d84315"), QColor("#bf360c"),
  120. QColor("#ff9e80"), QColor("#ff6e40"), QColor("#ff3d00"), QColor("#dd2c00"),
  121. QColor("#efebe9"), QColor("#d7ccc8"), QColor("#bcaaa4"), QColor("#a1887f"),
  122. QColor("#8d6e63"), QColor("#795548"), QColor("#6d4c41"), QColor("#5d4037"),
  123. QColor("#4e342e"), QColor("#3e2723"), QColor("#eceff1"), QColor("#cfd8dc"),
  124. QColor("#b0bec5"), QColor("#90a4ae"), QColor("#78909c"), QColor("#607d8b"),
  125. QColor("#546e7a"), QColor("#455a64"), QColor("#37474f"), QColor("#263238"),
  126. QColor("#fafafa"), QColor("#f5f5f5"), QColor("#eeeeee"), QColor("#e0e0e0"),
  127. QColor("#bdbdbd"), QColor("#9e9e9e"), QColor("#757575"), QColor("#616161"),
  128. QColor("#424242"), QColor("#212121"), QColor("#000000"), QColor("#ffffff"),
  129. d->rgba(0, 0, 0, 0),
  130. d->rgba(0, 0, 0, 1),
  131. d->rgba(0, 0, 0, 0.87),
  132. d->rgba(0, 0, 0, 0.54),
  133. d->rgba(0, 0, 0, 0.26),
  134. d->rgba(0, 0, 0, 0.12),
  135. d->rgba(255, 255, 255, 1),
  136. d->rgba(255, 255, 255, 0.87),
  137. d->rgba(255, 255, 255, 0.54)
  138. };
  139. d->colors.insert(key, palette[color]);
  140. }
  141. QIcon QtMaterialTheme::icon(QString category, QString icon)
  142. {
  143. return QIcon(":/icons/icons/" % category % "/svg/production/ic_" % icon % "_24px.svg");
  144. }