QmlMaterial 0.1.0
Loading...
Searching...
No Matches
color.hpp
1#pragma once
2
3#include <QtQml/QQmlEngine>
4#include <QtGui/QColor>
5#include <QProperty>
6
7#include "qml_material/core.hpp"
8#include "qml_material/core/enum.hpp"
9#include "qml_material/core/helper.hpp"
10
11namespace qml_material
12{
13
20class QML_MATERIAL_API MdColorMgr : public QObject {
21 Q_OBJECT
22 QML_ELEMENT
23public:
24 using Self = MdColorMgr;
25
26 MdColorMgr(QObject* = nullptr);
27
32 Q_PROPERTY(qml_material::Enum::ThemeMode mode READ mode WRITE setMode NOTIFY modeChanged FINAL)
33
34
38 Q_PROPERTY(qml_material::Enum::PaletteType paletteType READ paletteType WRITE setPaletteType
39 NOTIFY paletteTypeChanged FINAL)
40
41
45 Q_PROPERTY(
46 QColor accentColor READ accentColor WRITE setAccentColor NOTIFY accentColorChanged FINAL)
47
52 Q_PROPERTY(bool useSysColorSM READ useSysColorSM WRITE setUseSysColorSM NOTIFY
53 useSysColorSMChanged FINAL)
54
59 Q_PROPERTY(bool useSysAccentColor READ useSysAccentColor WRITE setUseSysAccentColor NOTIFY
60 useSysAccentColorChanged FINAL)
61
62#define X(_n_) \
63 Q_PROPERTY(QColor _n_ READ _n_ NOTIFY schemeChanged) \
64 QColor _n_() const { return m_scheme.value()._n_; }
65
67 X(primary)
69 X(on_primary)
71 X(primary_container)
73 X(on_primary_container)
75 X(primary_fixed)
77 X(primary_fixed_dim)
79 X(on_primary_fixed)
81 X(on_primary_fixed_variant)
83 X(secondary)
85 X(on_secondary)
87 X(secondary_container)
89 X(on_secondary_container)
91 X(secondary_fixed)
93 X(secondary_fixed_dim)
95 X(on_secondary_fixed)
97 X(on_secondary_fixed_variant)
99 X(tertiary)
101 X(on_tertiary)
103 X(tertiary_container)
105 X(on_tertiary_container)
107 X(tertiary_fixed)
109 X(tertiary_fixed_dim)
111 X(on_tertiary_fixed)
113 X(on_tertiary_fixed_variant)
115 X(error)
117 X(on_error)
119 X(error_container)
121 X(on_error_container)
123 X(background)
125 X(on_background)
127 X(surface)
129 X(on_surface)
131 X(surface_variant)
133 X(on_surface_variant)
135 X(outline)
137 X(outline_variant)
139 X(shadow)
141 X(scrim)
143 X(inverse_surface)
145 X(inverse_on_surface)
147 X(inverse_primary)
149 X(surface_1)
151 X(surface_2)
153 X(surface_3)
155 X(surface_4)
157 X(surface_5)
159 X(surface_dim)
161 X(surface_bright)
163 X(surface_container)
165 X(surface_container_low)
167 X(surface_container_lowest)
169 X(surface_container_high)
171 X(surface_container_highest)
172#undef X
173
174#define X(_n_) \
175 Q_INVOKABLE QColor get_##_n_(double tone) const { \
176 return m_scheme.value()._n_##_palette.get(tone); \
177 }
178
179 X(neutral)
180#undef X
181
182#define X(_n_, _tone_) \
183 Q_PROPERTY(QColor _n_##_##_tone_ READ _n_##_##_tone_ NOTIFY schemeChanged) \
184 QColor _n_##_##_tone_() const { return m_scheme.value()._n_##_palette.get(_tone_); }
185
186 X(neutral, 10)
187 X(neutral, 20)
188 X(neutral, 30)
189 X(neutral, 40)
190 X(neutral, 50)
191 X(neutral, 60)
192 X(neutral, 70)
193 X(neutral, 80)
194 X(neutral, 90)
195#undef X
196
197public:
198 auto mode() const -> Enum::ThemeMode;
199 auto sysColorScheme() const -> Enum::ThemeMode;
200
201 QColor sysAccentColor() const;
202 QColor accentColor() const;
203 bool useSysColorSM() const;
204 bool useSysAccentColor() const;
205 auto paletteType() const -> Enum::PaletteType;
206 void setPaletteType(Enum::PaletteType);
207
208 Q_INVOKABLE QColor getOn(QColor) const;
209
210 Q_SLOT void setMode(Enum::ThemeMode);
211 Q_SLOT void setAccentColor(QColor);
212 Q_SLOT void setUseSysColorSM(bool);
213 Q_SLOT void setUseSysAccentColor(bool);
214 Q_SLOT void genScheme();
215 Q_SLOT void refrehFromSystem();
216
217 Q_SLOT void selectFromImage(const QImage&);
218
219 Q_SIGNAL void modeChanged(Enum::ThemeMode);
220 Q_SIGNAL void schemeChanged();
221 Q_SIGNAL void paletteTypeChanged();
222 Q_SIGNAL void accentColorChanged(QColor);
223 Q_SIGNAL void useSysColorSMChanged();
224 Q_SIGNAL void useSysAccentColorChanged();
225
226private:
227 void genSchemeImpl(Enum::ThemeMode);
228
229 QColor m_accent_color;
230 Enum::ThemeMode m_mode;
231 Enum::ThemeMode m_last_mode;
232 Enum::PaletteType m_scheme_type;
233 QProperty<MdScheme> m_scheme;
234 bool m_use_sys_color_scheme;
235 bool m_use_sys_accent_color;
236};
237
238void sysNotifyInit(MdColorMgr&);
239auto sysColorScheme() -> Enum::ThemeMode;
240auto sysAccentColor() -> QColor;
241
242} // namespace qml_material
Enum.
Definition enum.hpp:13
ThemeMode
Definition enum.hpp:20
Material Design Color Manager class.
Definition color.hpp:20