QmlMaterial 0.1.0
Loading...
Searching...
No Matches
hct.hpp
1#pragma once
2
3#include <QtQml/QQmlEngine>
4#include <QtGui/QColor>
5
6#include "qml_material/export.hpp"
7
8namespace qml_material
9{
10
11class QML_MATERIAL_API Hct : public QObject {
12 Q_OBJECT
13 QML_ELEMENT
14
15 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged FINAL)
16 Q_PROPERTY(double hue READ hue WRITE setHue NOTIFY hctChanged FINAL)
17 Q_PROPERTY(double chroma READ chroma WRITE setChroma NOTIFY hctChanged FINAL)
18 Q_PROPERTY(double tone READ tone WRITE setTone NOTIFY hctChanged FINAL)
19
20public:
21 explicit Hct(QObject* parent = nullptr);
22 ~Hct() override;
23
24 QColor color() const noexcept;
25 double hue() const noexcept;
26 double chroma() const noexcept;
27 double tone() const noexcept;
28
29 void setColor(QColor);
30 void setHue(double);
31 void setChroma(double);
32 void setTone(double);
33
34 Q_SIGNAL void colorChanged();
35 Q_SIGNAL void hctChanged();
36
37private:
38 void rebuildFromHct();
39 void rebuildFromColor(QColor);
40
41 QColor m_color;
42 double m_hue { 0.0 };
43 double m_chroma { 0.0 };
44 double m_tone { 0.0 };
45 bool m_blocked { false };
46};
47
48class QML_MATERIAL_API HctUtil : public QObject {
49 Q_OBJECT
50 QML_ELEMENT
51 QML_SINGLETON
52public:
53 explicit HctUtil(QObject* parent = nullptr);
54
55 Q_INVOKABLE QColor fromHct(double hue, double chroma, double tone) const;
56 Q_INVOKABLE QColor paletteTone(QColor seed, double tone) const;
57 Q_INVOKABLE double hueOf(QColor c) const;
58 Q_INVOKABLE double chromaOf(QColor c) const;
59 Q_INVOKABLE double toneOf(QColor c) const;
60};
61
62} // namespace qml_material