Krita Source Code Documentation
Loading...
Searching...
No Matches
KoColor.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2005 Boudewijn Rempt <boud@valdyas.org>
3 * SPDX-FileCopyrightText: 2007 Thomas Zander <zander@kde.org>
4 *
5 * SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7#ifndef KOCOLOR_H
8#define KOCOLOR_H
9
10#include <QColor>
11#include <QMetaType>
12#include <QtGlobal>
13#include "kritapigment_export.h"
16#include "KoColorSpaceTraits.h"
17#include <boost/operators.hpp>
18
19
20class QDomDocument;
21class QDomElement;
22
23class KoColorProfile;
24class KoColorSpace;
25
30class KRITAPIGMENT_EXPORT KoColor : public boost::equality_comparable<KoColor>
31{
32
33public:
35 KoColor();
36
38 explicit KoColor(const KoColorSpace * colorSpace);
39
42 KoColor(const QColor & color, const KoColorSpace * colorSpace);
43
45 KoColor(const quint8 * data, const KoColorSpace * colorSpace);
46
48 KoColor(const KoColor &src, const KoColorSpace * colorSpace);
49
51 KoColor(const KoColor &rhs)
52 : m_colorSpace(rhs.m_colorSpace)
53 , m_size(rhs.m_size)
54 , m_metadata(rhs.m_metadata)
55 {
56 memcpy(m_data, rhs.m_data, m_size);
57 }
58
64 inline KoColor &operator=(const KoColor &rhs) {
65 if (&rhs == this) {
66 return *this;
67 }
68
69 m_colorSpace = rhs.m_colorSpace;
70 m_metadata = rhs.m_metadata;
71 m_size = rhs.m_size;
72 memcpy(m_data, rhs.m_data, m_size);
73
74 assertPermanentColorspace();
75
76 return *this;
77 }
78
79 bool operator==(const KoColor &other) const;
80
82 const KoColorSpace * colorSpace() const {
83 return m_colorSpace;
84 }
85
87 const KoColorProfile *profile() const;
88
91 void convertTo(const KoColorSpace * cs,
93 KoColorConversionTransformation::ConversionFlags conversionFlags);
94
95 void convertTo(const KoColorSpace * cs);
96
99 KoColor convertedTo(const KoColorSpace * cs,
101 KoColorConversionTransformation::ConversionFlags conversionFlags) const;
102
105 KoColor convertedTo(const KoColorSpace * cs) const;
106
107
108
110 void setProfile(const KoColorProfile *profile);
111
114 void setColor(const quint8 * data, const KoColorSpace * colorSpace = 0);
115
118 void fromKoColor(const KoColor& src);
119
121 void toQColor(QColor *c) const;
123 QColor toQColor() const;
124
128 void setOpacity(quint8 alpha);
129 void setOpacity(qreal alpha);
133 quint8 opacityU8() const;
134 qreal opacityF() const;
135
137 void fromQColor(const QColor& c);
138
144 quint8 * data() {
145 return m_data;
146 }
147
153 const quint8 * data() const {
154 return m_data;
155 }
156
157
163 void subtract(const KoColor &value);
164
170 KoColor subtracted(const KoColor &value) const;
171
177 void add(const KoColor &value);
178
184 KoColor added(const KoColor &value) const;
185
198 void toXML(QDomDocument& doc, QDomElement& colorElt) const;
199
212 static KoColor fromXML(const QDomElement& elt, const QString & channelDepthId);
213
227 static KoColor fromXML(const QDomElement& elt, const QString & channelDepthId, bool* ok);
228
229
236 QString toXML() const;
237
244 static KoColor fromXML(const QString &xml);
245
251 QString toSVG11(QHash<QString, const KoColorProfile *> *profileList) const;
252
271 static KoColor fromSVG11(const QString value, QHash<QString, const KoColorProfile*> profileList, KoColor current = KoColor());
272
278 static QString toQString(const KoColor &color);
279
283 void addMetadata(QString key, QVariant value);
284
290 QMap<QString, QVariant> metadata() const;
291
296 void clearMetadata();
297
304 static KoColor createTransparent(const KoColorSpace *cs);
305
306#ifndef NODEBUG
308 void dump() const;
309#endif
310
311private:
313#ifndef NODEBUG
314 if (m_colorSpace) {
315 Q_ASSERT(*m_colorSpace == *KoColorSpaceRegistry::instance()->permanentColorspace(m_colorSpace));
316 }
317#endif
318 }
319
321 quint8 m_data[MAX_PIXEL_SIZE];
322 quint8 m_size;
323 QMap<QString, QVariant> m_metadata;
324};
325
327
328KRITAPIGMENT_EXPORT QDebug operator<<(QDebug dbg, const KoColor &color);
329
330
331#endif
float value(const T *src, size_t ch)
bool operator==(const KisRegion &lhs, const KisRegion &rhs)
const int MAX_PIXEL_SIZE
KRITAPIGMENT_EXPORT QDebug operator<<(QDebug dbg, const KoColor &color)
Definition KoColor.cpp:692
QMap< QString, QVariant > m_metadata
Definition KoColor.h:323
quint8 m_size
Definition KoColor.h:322
quint8 * data()
Definition KoColor.h:144
void assertPermanentColorspace()
Definition KoColor.h:312
const KoColorSpace * m_colorSpace
Definition KoColor.h:320
const quint8 * data() const
Definition KoColor.h:153
const KoColorSpace * colorSpace() const
return the current colorSpace
Definition KoColor.h:82
KoColor(const KoColor &rhs)
Copy constructor – deep copies the colors.
Definition KoColor.h:51
quint8 m_data[MAX_PIXEL_SIZE]
Definition KoColor.h:321
KoColor & operator=(const KoColor &rhs)
Definition KoColor.h:64
Q_DECLARE_METATYPE(KisPaintopLodLimitations)
static KoColorSpaceRegistry * instance()