Changeset View
Changeset View
Standalone View
Standalone View
plugins/dockers/artisticcolorselector/kis_color.cpp
Show All 13 Lines | 1 | /* | |||
---|---|---|---|---|---|
14 | You should have received a copy of the GNU General Public License along | 14 | You should have received a copy of the GNU General Public License along | ||
15 | with this program; if not, write to the Free Software Foundation, Inc., | 15 | with this program; if not, write to the Free Software Foundation, Inc., | ||
16 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 16 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
17 | */ | 17 | */ | ||
18 | 18 | | |||
19 | #include <KoColor.h> | 19 | #include <KoColor.h> | ||
20 | #include "kis_color.h" | 20 | #include "kis_color.h" | ||
21 | #include <kis_arcs_constants.h> | 21 | #include <kis_arcs_constants.h> | ||
22 | #include <kis_canvas2.h> | ||||
22 | 23 | | |||
23 | 24 | | |||
24 | KisColor::KisColor(KisDisplayColorConverter* converter, Type type, | 25 | KisColor::KisColor(KisCanvas2* canvas, Type type, | ||
25 | qreal lR, qreal lG, qreal lB, qreal lGamma) | 26 | qreal lR, qreal lG, qreal lB, qreal lGamma) | ||
26 | { | 27 | { | ||
27 | m_colorConverter = converter; | 28 | m_canvas = canvas; | ||
28 | m_type = type; | 29 | m_type = type; | ||
29 | m_lumaR = lR; | 30 | m_lumaR = lR; | ||
30 | m_lumaG = lG; | 31 | m_lumaG = lG; | ||
31 | m_lumaB = lB; | 32 | m_lumaB = lB; | ||
32 | m_lumaGamma = lGamma; | 33 | m_lumaGamma = lGamma; | ||
33 | 34 | | |||
34 | initHSX(type, 0.0, 0.0, 0.0); | 35 | initHSX(type, 0.0, 0.0, 0.0); | ||
35 | } | 36 | } | ||
36 | 37 | | |||
37 | KisColor::KisColor(qreal hue, KisDisplayColorConverter* converter, Type type, | 38 | KisColor::KisColor(qreal hue, KisCanvas2* canvas, Type type, | ||
38 | qreal lR, qreal lG, qreal lB, qreal lGamma) | 39 | qreal lR, qreal lG, qreal lB, qreal lGamma) | ||
39 | { | 40 | { | ||
40 | m_colorConverter = converter; | 41 | m_canvas = canvas; | ||
41 | m_type = type; | 42 | m_type = type; | ||
42 | m_lumaR = lR; | 43 | m_lumaR = lR; | ||
43 | m_lumaG = lG; | 44 | m_lumaG = lG; | ||
44 | m_lumaB = lB; | 45 | m_lumaB = lB; | ||
45 | m_lumaGamma = lGamma; | 46 | m_lumaGamma = lGamma; | ||
46 | 47 | | |||
47 | initHSX(type, hue, 0.0, 0.0); | 48 | initHSX(type, hue, 0.0, 0.0); | ||
48 | } | 49 | } | ||
49 | 50 | | |||
50 | KisColor::KisColor(const QColor& color, KisDisplayColorConverter* converter, Type type, | 51 | KisColor::KisColor(const QColor& color, KisCanvas2* canvas, Type type, | ||
51 | qreal lR, qreal lG, qreal lB, qreal lGamma) | 52 | qreal lR, qreal lG, qreal lB, qreal lGamma) | ||
52 | { | 53 | { | ||
53 | m_colorConverter = converter; | 54 | m_canvas = canvas; | ||
54 | m_type = type; | 55 | m_type = type; | ||
55 | m_lumaR = lR; | 56 | m_lumaR = lR; | ||
56 | m_lumaG = lG; | 57 | m_lumaG = lG; | ||
57 | m_lumaB = lB; | 58 | m_lumaB = lB; | ||
58 | m_lumaGamma = lGamma; | 59 | m_lumaGamma = lGamma; | ||
59 | 60 | | |||
60 | KoColor koColor = m_colorConverter->approximateFromRenderedQColor(color); | 61 | KoColor koColor = colorConverter()->approximateFromRenderedQColor(color); | ||
61 | fromKoColor(koColor); | 62 | fromKoColor(koColor); | ||
62 | } | 63 | } | ||
63 | 64 | | |||
64 | KisColor::KisColor(Qt::GlobalColor color, KisDisplayColorConverter* converter, | 65 | KisColor::KisColor(Qt::GlobalColor color, KisCanvas2* canvas, | ||
65 | Type type, qreal lR, qreal lG, qreal lB, qreal lGamma) | 66 | Type type, qreal lR, qreal lG, qreal lB, qreal lGamma) | ||
66 | { | 67 | { | ||
67 | QColor c(color); | 68 | QColor c(color); | ||
68 | m_colorConverter = converter; | 69 | m_canvas = canvas; | ||
69 | m_type = type; | 70 | m_type = type; | ||
70 | m_lumaR = lR; | 71 | m_lumaR = lR; | ||
71 | m_lumaG = lG; | 72 | m_lumaG = lG; | ||
72 | m_lumaB = lB; | 73 | m_lumaB = lB; | ||
73 | m_lumaGamma = lGamma; | 74 | m_lumaGamma = lGamma; | ||
74 | 75 | | |||
75 | KoColor koColor = m_colorConverter->approximateFromRenderedQColor(c); | 76 | KoColor koColor = colorConverter()->approximateFromRenderedQColor(c); | ||
76 | fromKoColor(koColor); | 77 | fromKoColor(koColor); | ||
77 | } | 78 | } | ||
78 | 79 | | |||
79 | KisColor::KisColor(const KisColor& color) | 80 | KisColor::KisColor(const KoColor &color, KisCanvas2* canvas, KisColor::Type type, | ||
80 | { | | |||
81 | m_colorConverter = color.colorConverter(); | | |||
82 | m_lumaR = color.lumaR(); | | |||
83 | m_lumaG = color.lumaG(); | | |||
84 | m_lumaB = color.lumaB(); | | |||
85 | m_lumaGamma = color.lumaGamma(); | | |||
86 | initHSX(color.getType(), color.getH(), color.getS(), color.getX()); | | |||
87 | } | | |||
88 | | ||||
89 | KisColor::KisColor(const KoColor &color, KisDisplayColorConverter* converter, KisColor::Type type, | | |||
90 | qreal lR, qreal lG, qreal lB, qreal lGamma) | 81 | qreal lR, qreal lG, qreal lB, qreal lGamma) | ||
91 | { | 82 | { | ||
92 | m_colorConverter = converter; | 83 | m_canvas = canvas; | ||
93 | m_type = type; | 84 | m_type = type; | ||
94 | m_lumaR = lR; | 85 | m_lumaR = lR; | ||
95 | m_lumaG = lG; | 86 | m_lumaG = lG; | ||
96 | m_lumaB = lB; | 87 | m_lumaB = lB; | ||
97 | m_lumaGamma = lGamma; | 88 | m_lumaGamma = lGamma; | ||
98 | fromKoColor(color); | 89 | fromKoColor(color); | ||
99 | } | 90 | } | ||
100 | 91 | | |||
101 | KisColor::KisColor(const KisColor& color, KisColor::Type type, | 92 | KisColor::KisColor(const KisColor& color, KisCanvas2 *canvas, KisColor::Type type, | ||
102 | qreal lR, qreal lG, qreal lB, qreal lGamma) | 93 | qreal lR, qreal lG, qreal lB, qreal lGamma) | ||
103 | { | 94 | { | ||
104 | m_colorConverter = color.colorConverter(); | 95 | m_canvas = canvas; | ||
105 | m_type = type; | 96 | m_type = type; | ||
106 | m_lumaR = lR; | 97 | m_lumaR = lR; | ||
107 | m_lumaG = lG; | 98 | m_lumaG = lG; | ||
108 | m_lumaB = lB; | 99 | m_lumaB = lB; | ||
109 | m_lumaGamma = lGamma; | 100 | m_lumaGamma = lGamma; | ||
110 | initHSX(type, color.getH(), color.getS(), color.getX()); | 101 | initHSX(type, color.getH(), color.getS(), color.getX()); | ||
111 | } | 102 | } | ||
112 | 103 | | |||
113 | KisColor::~KisColor() | 104 | KisColor::~KisColor() | ||
114 | { | 105 | { | ||
115 | } | 106 | } | ||
116 | 107 | | |||
117 | QColor KisColor::toQColor() const | 108 | QColor KisColor::toQColor() const | ||
118 | { | 109 | { | ||
119 | return m_colorConverter->toQColor(toKoColor()); | 110 | return colorConverter()->toQColor(toKoColor()); | ||
120 | } | 111 | } | ||
121 | 112 | | |||
122 | KoColor KisColor::toKoColor() const | 113 | KoColor KisColor::toKoColor() const | ||
123 | { | 114 | { | ||
124 | KoColor color; | 115 | KoColor color(Qt::transparent, colorConverter()->paintingColorSpace()); | ||
125 | 116 | | |||
126 | switch (m_type) { | 117 | switch (m_type) { | ||
127 | case HSV: | 118 | case HSV: | ||
128 | color = m_colorConverter->fromHsvF(m_hue, m_saturation, m_value); | 119 | color = colorConverter()->fromHsvF(m_hue, m_saturation, m_value); | ||
129 | break; | 120 | break; | ||
130 | case HSI: | 121 | case HSI: | ||
131 | color = m_colorConverter->fromHsiF(m_hue, m_saturation, m_value); | 122 | color = colorConverter()->fromHsiF(m_hue, m_saturation, m_value); | ||
132 | break; | 123 | break; | ||
133 | case HSL: | 124 | case HSL: | ||
134 | color = m_colorConverter->fromHslF(m_hue, m_saturation, m_value); | 125 | color = colorConverter()->fromHslF(m_hue, m_saturation, m_value); | ||
135 | break; | 126 | break; | ||
136 | case HSY: | 127 | case HSY: | ||
137 | color = m_colorConverter->fromHsyF(m_hue, m_saturation, m_value, m_lumaR, m_lumaG, m_lumaB, m_lumaGamma); | 128 | color = colorConverter()->fromHsyF(m_hue, m_saturation, m_value, m_lumaR, m_lumaG, m_lumaB, m_lumaGamma); | ||
138 | break; | 129 | break; | ||
139 | } | 130 | } | ||
140 | 131 | | |||
141 | return color; | 132 | return color; | ||
142 | } | 133 | } | ||
143 | 134 | | |||
144 | void KisColor::fromKoColor(const KoColor& color) | 135 | void KisColor::fromKoColor(const KoColor& color) | ||
145 | { | 136 | { | ||
146 | switch (m_type) { | 137 | switch (m_type) { | ||
147 | case HSV: | 138 | case HSV: | ||
148 | m_colorConverter->getHsvF(color, &m_hue, &m_saturation, &m_value); | 139 | colorConverter()->getHsvF(color, &m_hue, &m_saturation, &m_value); | ||
149 | break; | 140 | break; | ||
150 | case HSI: | 141 | case HSI: | ||
151 | m_colorConverter->getHsiF(color, &m_hue, &m_saturation, &m_value); | 142 | colorConverter()->getHsiF(color, &m_hue, &m_saturation, &m_value); | ||
152 | break; | 143 | break; | ||
153 | case HSL: | 144 | case HSL: | ||
154 | m_colorConverter->getHsvF(color, &m_hue, &m_saturation, &m_value); | 145 | colorConverter()->getHsvF(color, &m_hue, &m_saturation, &m_value); | ||
155 | break; | 146 | break; | ||
156 | case HSY: | 147 | case HSY: | ||
157 | m_colorConverter->getHsyF(color, &m_hue, &m_saturation, &m_value, m_lumaR, m_lumaG, m_lumaB, m_lumaGamma); | 148 | colorConverter()->getHsyF(color, &m_hue, &m_saturation, &m_value, m_lumaR, m_lumaG, m_lumaB, m_lumaGamma); | ||
158 | break; | 149 | break; | ||
159 | } | 150 | } | ||
160 | } | 151 | } | ||
161 | 152 | | |||
153 | KisDisplayColorConverter* KisColor::colorConverter() const | ||||
154 | { | ||||
155 | return m_canvas ? | ||||
156 | m_canvas->displayColorConverter() : | ||||
157 | KisDisplayColorConverter::dumbConverterInstance(); | ||||
158 | } | ||||
159 | | ||||
162 | void KisColor::initHSX(Type type, qreal h, qreal s, qreal x) | 160 | void KisColor::initHSX(Type type, qreal h, qreal s, qreal x) | ||
163 | { | 161 | { | ||
164 | m_type = type; | 162 | m_type = type; | ||
165 | m_hue = h; | 163 | m_hue = h; | ||
166 | m_saturation = s; | 164 | m_saturation = s; | ||
167 | m_value = x; | 165 | m_value = x; | ||
168 | } | 166 | } |