Krita Source Code Documentation
Loading...
Searching...
No Matches
KisMultiChannelFilterConfiguration Class Referenceabstract

#include <kis_multichannel_filter_base.h>

+ Inheritance diagram for KisMultiChannelFilterConfiguration:

Public Member Functions

virtual bool compareTo (const KisPropertiesConfiguration *rhs) const override
 
const QList< KisCubicCurve > & curves () const
 
virtual void fromLegacyXML (const QDomElement &)
 
void fromLegacyXML (const QDomElement &root) override
 
void fromXML (const QDomElement &) override
 
void fromXML (const QDomElement &) override
 
void fromXML (const QDomElement &e) override
 
bool fromXML (const QString &xml, bool clear=true) override
 
bool isCompatible (const KisPaintDeviceSP) const override
 
 KisMultiChannelFilterConfiguration (const KisMultiChannelFilterConfiguration &rhs)
 
 KisMultiChannelFilterConfiguration (int channelCount, const QString &name, qint32 version, KisResourcesInterfaceSP resourcesInterface)
 
void setActiveCurve (int value)
 
void setCurves (QList< KisCubicCurve > &curves)
 
void setProperty (const QString &name, const QVariant &value) override
 
QString toXML () const override
 
void toXML (QDomDocument &, QDomElement &) const override
 
void toXML (QDomDocument &, QDomElement &) const override
 
void toXML (QDomDocument &doc, QDomElement &root) const override
 
const QVector< QVector< quint16 > > & transfers () const
 
 ~KisMultiChannelFilterConfiguration () override
 
- Public Member Functions inherited from KisColorTransformationConfiguration
KisFilterConfigurationSP clone () const override
 
KoColorTransformationcolorTransformation (const KoColorSpace *cs, const KisColorTransformationFilter *filter) const
 
void destroyCache ()
 
void invalidateColorTransformationCache ()
 Manually invalidate the cache. By default setProperty invalidates the cache but this method can be used in subclasses when setProperty is not used to set options. This forces the regeneration of the color transforms.
 
 KisColorTransformationConfiguration (const KisColorTransformationConfiguration &rhs)
 
 KisColorTransformationConfiguration (const QString &name, qint32 version, KisResourcesInterfaceSP resourcesInterface)
 
 Private ()
 
 ~KisColorTransformationConfiguration () override
 
 ~Private ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 
- Public Member Functions inherited from KisFilterConfiguration
QBitArray channelFlags () const
 
KisFilterConfigurationSP cloneWithResourcesSnapshot (KisResourcesInterfaceSP globalResourcesInterface=nullptr) const
 
void createLocalResourcesSnapshot (KisResourcesInterfaceSP globalResourcesInterface=nullptr)
 
virtual QList< KoResourceLoadResultembeddedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
bool hasLocalResourcesSnapshot () const
 
 KisFilterConfiguration (const QString &name, qint32 version, KisResourcesInterfaceSP resourcesInterface)
 
virtual QList< KoResourceLoadResultlinkedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
const QString & name () const
 
 Private (const Private &rhs)
 
 Private (const QString &_name, qint32 _version, KisResourcesInterfaceSP _resourcesInterface)
 
QList< KoResourceLoadResultrequiredResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
KisResourcesInterfaceSP resourcesInterface () const
 
void setChannelFlags (QBitArray channelFlags)
 
virtual void setResourcesInterface (KisResourcesInterfaceSP resourcesInterface)
 
qint32 version () const
 
 ~KisFilterConfiguration () override
 
- Public Member Functions inherited from KisPropertiesConfiguration
void clearProperties ()
 Clear the map of properties.
 
virtual void dump () const
 
void fromXML (const QDomElement &) override
 
bool fromXML (const QString &xml, bool clear=true) override
 
bool getBool (const QString &name, bool def=false) const
 
KoColor getColor (const QString &name, const KoColor &color=KoColor()) const
 getColor fetch the given property as a KoColor.
 
KisCubicCurve getCubicCurve (const QString &name, const KisCubicCurve &curve=KisCubicCurve()) const
 
double getDouble (const QString &name, double def=0.0) const
 
float getFloat (const QString &name, float def=0.0) const
 
int getInt (const QString &name, int def=0) const
 
void getPrefixedProperties (const QString &prefix, KisPropertiesConfiguration *config) const
 
void getPrefixedProperties (const QString &prefix, KisPropertiesConfigurationSP config) const
 
virtual QMap< QString, QVariant > getProperties () const
 
virtual QList< QString > getPropertiesKeys () const
 
virtual QVariant getProperty (const QString &name) const
 
virtual bool getProperty (const QString &name, QVariant &value) const
 
QString getPropertyLazy (const QString &name, const char *defaultValue) const
 
QStringList getPropertyLazy (const QString &name, const QStringList &defaultValue) const
 
template<typename T >
getPropertyLazy (const QString &name, const T &defaultValue) const
 
QString getString (const QString &name, const QString &def=QString()) const
 
QStringList getStringList (const QString &name, const QStringList &defaultValue=QStringList()) const
 
virtual bool hasProperty (const QString &name) const
 
 KisPropertiesConfiguration ()
 
 KisPropertiesConfiguration (const KisPropertiesConfiguration &rhs)
 
KisPropertiesConfigurationoperator= (const KisPropertiesConfiguration &rhs)
 
void removeProperty (const QString &name)
 
void setPrefixedProperties (const QString &prefix, const KisPropertiesConfiguration *config)
 
void setPrefixedProperties (const QString &prefix, const KisPropertiesConfigurationSP config)
 
void setProperty (const QString &name, const QStringList &value)
 
void setPropertyNotSaved (const QString &name)
 Marks a property that should not be saved by toXML.
 
QString toXML () const override
 
void toXML (QDomDocument &, QDomElement &) const override
 
 ~KisPropertiesConfiguration () override
 
- Public Member Functions inherited from KisSerializableConfiguration
 KisSerializableConfiguration ()
 
 KisSerializableConfiguration (const KisSerializableConfiguration &rhs)
 
virtual ~KisSerializableConfiguration ()
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Protected Member Functions

bool curveIndexFromCurvePropertyName (const QString &name, int &curveIndex) const
 Takes a curve property name with format "curve#", where # is the index of the channel and puts the index on the "curveIndex" parameter.
 
virtual KisCubicCurve getDefaultCurve ()=0
 
void init ()
 
void updateTransfer (int index)
 
void updateTransfers ()
 
- Protected Member Functions inherited from KisFilterConfiguration
 KisFilterConfiguration (const KisFilterConfiguration &rhs)
 
void setVersion (qint32 version)
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Protected Attributes

int m_activeCurve {-1}
 
int m_channelCount {0}
 
QList< KisCubicCurvem_curves
 
QVector< QVector< quint16 > > m_transfers
 

Additional Inherited Members

- Static Public Member Functions inherited from KisPropertiesConfiguration
static QString escapeString (const QString &string)
 
static QString extractedPrefixKey ()
 
static QString unescapeString (const QString &string)
 
- Public Attributes inherited from KisColorTransformationConfiguration
QMap< QThread *, KoColorTransformation * > colorTransformation
 
QMutex mutex
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 
- Public Attributes inherited from KisFilterConfiguration
QBitArray channelFlags
 
QString name
 
KisResourcesInterfaceSP resourcesInterface = 0
 
qint32 version
 
- Public Attributes inherited from KisPropertiesConfiguration
QSet< QString > notSavedProperties
 
QMap< QString, QVariant > properties
 

Detailed Description

Base class for configurations of KisMultiChannelFilter subclasses

Definition at line 46 of file kis_multichannel_filter_base.h.

Constructor & Destructor Documentation

◆ KisMultiChannelFilterConfiguration() [1/2]

KisMultiChannelFilterConfiguration::KisMultiChannelFilterConfiguration ( int channelCount,
const QString & name,
qint32 version,
KisResourcesInterfaceSP resourcesInterface )

◆ KisMultiChannelFilterConfiguration() [2/2]

KisMultiChannelFilterConfiguration::KisMultiChannelFilterConfiguration ( const KisMultiChannelFilterConfiguration & rhs)

◆ ~KisMultiChannelFilterConfiguration()

KisMultiChannelFilterConfiguration::~KisMultiChannelFilterConfiguration ( )
override

Definition at line 84 of file kis_multichannel_filter_base.cpp.

85{}

Member Function Documentation

◆ compareTo()

bool KisMultiChannelFilterConfiguration::compareTo ( const KisPropertiesConfiguration * rhs) const
overridevirtual

Structural comparison between two instances.

Reimplemented from KisFilterConfiguration.

Reimplemented in KisCrossChannelFilterConfiguration.

Definition at line 306 of file kis_multichannel_filter_base.cpp.

307{
308 const KisMultiChannelFilterConfiguration *otherConfig = dynamic_cast<const KisMultiChannelFilterConfiguration *>(rhs);
309
310 return otherConfig
312 && m_channelCount == otherConfig->m_channelCount
313 && m_curves == otherConfig->m_curves
314 && m_transfers == otherConfig->m_transfers
315 && m_activeCurve == otherConfig->m_activeCurve;
316}
virtual bool compareTo(const KisPropertiesConfiguration *rhs) const override

References KisFilterConfiguration::compareTo(), m_activeCurve, m_channelCount, m_curves, and m_transfers.

◆ curveIndexFromCurvePropertyName()

bool KisMultiChannelFilterConfiguration::curveIndexFromCurvePropertyName ( const QString & name,
int & curveIndex ) const
protected

Takes a curve property name with format "curve#", where # is the index of the channel and puts the index on the "curveIndex" parameter.

Parameters
nameA string with format "curve#"
curveIndexAn int where the decoded channel index is stored
Returns
true if "name" had a valid format
false if "name" had an invalid format

Definition at line 377 of file kis_multichannel_filter_base.cpp.

378{
379 QRegularExpression rx("curve(\\d+)");
380 QRegularExpressionMatch match;
381 if (!name.contains(rx, &match)) {
382 return false;
383 }
384
385 curveIndex = match.captured(1).toUShort();
386 return true;
387}

References KisFilterConfiguration::name.

◆ curves()

const QList< KisCubicCurve > & KisMultiChannelFilterConfiguration::curves ( ) const

Definition at line 163 of file kis_multichannel_filter_base.cpp.

164{
165 return m_curves;
166}

References m_curves.

◆ fromLegacyXML() [1/2]

void KisFilterConfiguration::fromLegacyXML ( const QDomElement & root)
virtual

This function is use to convert from legacy XML as used in .kra file.

Reimplemented from KisFilterConfiguration.

Definition at line 72 of file kis_filter_configuration.cc.

73{
75 d->name = root.attribute("name");
76 d->version = root.attribute("version").toInt();
77
78 QDomElement e;
79 for (e = root.firstChildElement("property"); !e.isNull(); e = e.nextSiblingElement()) {
80 QString name = e.attribute("name");
81 QString type = e.attribute("type");
82 QString value = e.text();
83
84 // XXX: Convert the variant pro-actively to the right type?
85 setProperty(name, QVariant(value));
86 }
87}
float value(const T *src, size_t ch)
void setProperty(const QString &name, const QVariant &value) override
void clearProperties()
Clear the map of properties.

◆ fromLegacyXML() [2/2]

void KisMultiChannelFilterConfiguration::fromLegacyXML ( const QDomElement & root)
overridevirtual

This function is use to convert from legacy XML as used in .kra file.

Reimplemented from KisFilterConfiguration.

Definition at line 168 of file kis_multichannel_filter_base.cpp.

169{
170 fromXML(root);
171}
void fromXML(const QDomElement &e) override

References fromXML().

◆ fromXML() [1/4]

void KisPropertiesConfiguration::fromXML ( const QDomElement & root)
overridevirtual

Fill the properties configuration object from the XML encoded representation in s. This function use the "Legacy" style XML of the 1.x .kra file format.

Note: the existing properties will not be cleared

Reimplemented from KisFilterConfiguration.

Definition at line 74 of file kis_properties_configuration.cc.

71{
72 QDomElement e;
73 for (e = root.firstChildElement("param"); !e.isNull(); e = e.nextSiblingElement("param")) {
74 QString name = e.attribute("name");
75 QString value = e.text();
76
77 // Older versions didn't have a "type" parameter,
78 // so fall back to the old behavior if it's missing.
79 if (!e.hasAttribute("type")) {
80 d->properties[name] = QVariant(value);
81 } else if (e.attribute("type") == "bytearray") {
82 d->properties[name] = QVariant(QByteArray::fromBase64(value.toLatin1()));
83 } else {
84 d->properties[name] = value;
85 }
86 }
87}

◆ fromXML() [2/4]

void KisFilterConfiguration::fromXML ( const QDomElement & )
overridevirtual

Fill the object from the XML encoded representation in s.

Reimplemented from KisFilterConfiguration.

Definition at line 77 of file kis_filter_configuration.cc.

90{
91 d->version = elt.attribute("version").toInt();
93}
bool fromXML(const QString &xml, bool clear=true) override

◆ fromXML() [3/4]

void KisMultiChannelFilterConfiguration::fromXML ( const QDomElement & )
overridevirtual

Fill the object from the XML encoded representation in s.

In Krita 2.9 we stored alpha channel under a separate tag, so we should addend it separately if present

Reimplemented from KisFilterConfiguration.

Definition at line 173 of file kis_multichannel_filter_base.cpp.

174{
176 quint16 numTransfers = 0;
177 quint16 numTransfersWithAlpha = 0;
178 int activeCurve = -1;
179 int version;
180 version = root.attribute("version").toInt();
181
182 QDomElement e = root.firstChild().toElement();
183 QString attributeName;
184 KisCubicCurve curve;
185 quint16 index;
186 QRegularExpression curveRegexp("curve(\\d+)");
187 QRegularExpressionMatch match;
188
189 while (!e.isNull()) {
190 if ((attributeName = e.attribute("name")) == "activeCurve") {
191 activeCurve = e.text().toInt();
192 } else if ((attributeName = e.attribute("name")) == "nTransfers") {
193 numTransfers = e.text().toUShort();
194 } else if ((attributeName = e.attribute("name")) == "nTransfersWithAlpha") {
195 numTransfersWithAlpha = e.text().toUShort();
196 } else {
197 if (attributeName.contains(curveRegexp, &match)) {
198
199 index = match.captured(1).toUShort();
200 index = qMin(index, quint16(curves.count()));
201
202 if (!e.text().isEmpty()) {
203 curve = KisCubicCurve(e.text());
204 }
205 curves.insert(index, curve);
206 }
207 }
208 e = e.nextSiblingElement();
209 }
210
215 if (numTransfersWithAlpha > numTransfers) {
216 e = root.firstChild().toElement();
217 while (!e.isNull()) {
218 if ((attributeName = e.attribute("name")) == "alphaCurve") {
219 if (!e.text().isEmpty()) {
220 curves.append(KisCubicCurve(e.text()));
221 }
222 }
223 e = e.nextSiblingElement();
224 }
225 }
226
227 //prepend empty curves for the brightness contrast filter.
228 if(getString("legacy") == "brightnesscontrast") {
229 if (getString("colorModel") == LABAColorModelID.id()) {
230 curves.append(KisCubicCurve());
231 curves.append(KisCubicCurve());
232 curves.append(KisCubicCurve());
233 } else {
234 int extraChannels = 5;
235 if (getString("colorModel") == CMYKAColorModelID.id()) {
236 extraChannels = 6;
237 } else if (getString("colorModel") == GrayAColorModelID.id()) {
238 extraChannels = 0;
239 }
240 for(int c = 0; c < extraChannels; c ++) {
241 curves.insert(0, KisCubicCurve());
242 }
243 }
244 }
245 if (!numTransfers)
246 return;
247
250 setActiveCurve(activeCurve);
251}
const KoID GrayAColorModelID("GRAYA", ki18n("Grayscale/Alpha"))
const KoID CMYKAColorModelID("CMYKA", ki18n("CMYK/Alpha"))
const KoID LABAColorModelID("LABA", ki18n("L*a*b*/Alpha"))
void setCurves(QList< KisCubicCurve > &curves)
const QList< KisCubicCurve > & curves() const
QString id() const
Definition KoID.cpp:63
QString getString(const QString &name, const QString &def=QString()) const

References CMYKAColorModelID, curves(), KisPropertiesConfiguration::getString(), GrayAColorModelID, KoID::id(), LABAColorModelID, setActiveCurve(), setCurves(), KisFilterConfiguration::setVersion(), and KisFilterConfiguration::version.

◆ fromXML() [4/4]

bool KisPropertiesConfiguration::fromXML ( const QString & xml,
bool clear = true )
overridevirtual

Fill the properties configuration object from the XML encoded representation in s. This function use the "Legacy" style XML of the 1.x .kra file format.

Parameters
xmlthe string that will be parsed as xml
clearif true, the properties map will be emptied.
Returns
true is the xml document could be parsed

Reimplemented from KisFilterConfiguration.

Definition at line 74 of file kis_properties_configuration.cc.

56{
57 if (clear) {
59 }
60
61 QDomDocument doc;
62 bool retval = bool(doc.setContent(xml));
63 if (retval) {
64 QDomElement e = doc.documentElement();
65 fromXML(e);
66 }
67 return retval;
68}

◆ getDefaultCurve()

virtual KisCubicCurve KisMultiChannelFilterConfiguration::getDefaultCurve ( )
protectedpure virtual

◆ init()

void KisMultiChannelFilterConfiguration::init ( )
protected

Definition at line 87 of file kis_multichannel_filter_base.cpp.

88{
89 m_curves.clear();
90
92
93 for (int i = 0; i < m_channelCount; ++i) {
94 m_curves.append(getDefaultCurve());
95
96 const QString name = QLatin1String("curve") + QString::number(i);
97 const QString value = m_curves.last().toString();
99 }
100
102}
virtual KisCubicCurve getDefaultCurve()=0
void setProperty(const QString &name, const QVariant &value) override

References getDefaultCurve(), m_channelCount, m_curves, KisFilterConfiguration::name, KisColorTransformationConfiguration::setProperty(), updateTransfers(), and value().

◆ isCompatible()

bool KisMultiChannelFilterConfiguration::isCompatible ( const KisPaintDeviceSP ) const
overridevirtual

Check if that configuration is compatible with this paint device. The default implementation always return true.

Reimplemented from KisFilterConfiguration.

Definition at line 104 of file kis_multichannel_filter_base.cpp.

105{
106 return (int)dev->compositionSourceColorSpace()->channelCount() == m_channelCount;
107}

References KoColorSpace::channelCount(), KisPaintDevice::compositionSourceColorSpace(), and m_channelCount.

◆ setActiveCurve()

void KisMultiChannelFilterConfiguration::setActiveCurve ( int value)

◆ setCurves()

void KisMultiChannelFilterConfiguration::setCurves ( QList< KisCubicCurve > & curves)

Definition at line 109 of file kis_multichannel_filter_base.cpp.

110{
111 // Clean unused properties
112 if (curves.size() < m_curves.size()) {
113 for (int i = curves.size(); i < m_curves.size(); ++i) {
114 const QString name = QLatin1String("curve") + QString::number(i);
116 }
117 }
118
119 m_curves.clear();
121 m_channelCount = curves.size();
123
125
126 // Update properties for python
128
129 for (int i = 0; i < m_curves.size(); ++i) {
130 const QString name = QLatin1String("curve") + QString::number(i);
131 const QString value = m_curves[i].toString();
133 }
134}

References curves(), m_activeCurve, m_channelCount, m_curves, KisFilterConfiguration::name, KisPropertiesConfiguration::removeProperty(), KisColorTransformationConfiguration::setProperty(), updateTransfers(), and value().

◆ setProperty()

void KisMultiChannelFilterConfiguration::setProperty ( const QString & name,
const QVariant & value )
overridevirtual

Invalidate the cache by default when setProperty is called. This forces regenerating the color transforms also when a property of this object changes, not only when the object is copied

Reimplemented from KisColorTransformationConfiguration.

Definition at line 318 of file kis_multichannel_filter_base.cpp.

319{
320 if (name == "nTransfers") {
321 KIS_SAFE_ASSERT_RECOVER_RETURN(value.canConvert<int>());
322
323 const qint32 newChannelCount = value.toInt();
324
325 if (newChannelCount == m_channelCount) {
326 return;
327 }
328
330
331 m_transfers.resize(newChannelCount);
332 if (newChannelCount > m_channelCount) {
333 for (qint32 i = m_channelCount; i < newChannelCount; ++i) {
334 m_curves.append(getDefaultCurve());
336
337 const QString name = QLatin1String("curve") + QString::number(i);
338 const QString value = m_curves.last().toString();
340 }
341 } else {
342 for (qint32 i = newChannelCount; i < m_channelCount; ++i) {
343 m_curves.removeLast();
344
345 const QString name = QLatin1String("curve") + QString::number(i);
347 }
348 }
349
350 m_channelCount = newChannelCount;
352
353
354 return;
355 }
356
357 if (name == "activeCurve") {
358 setActiveCurve(qBound(0, value.toInt(), m_channelCount));
359 }
360
361 int curveIndex;
362 if (!curveIndexFromCurvePropertyName(name, curveIndex) ||
363 curveIndex < 0 || curveIndex >= m_channelCount) {
364 return;
365 }
366
367 KIS_SAFE_ASSERT_RECOVER_RETURN(value.canConvert<QString>());
368
369 m_curves[curveIndex] = KisCubicCurve(value.toString());
370 updateTransfer(curveIndex);
372
373 // Query the curve instead of using the value directly, in case of not valid curve string
375}
bool curveIndexFromCurvePropertyName(const QString &name, int &curveIndex) const
Takes a curve property name with format "curve#", where # is the index of the channel and puts the in...
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
QString toString(const QString &value)
void invalidateColorTransformationCache()
Manually invalidate the cache. By default setProperty invalidates the cache but this method can be us...

References curveIndexFromCurvePropertyName(), getDefaultCurve(), KisColorTransformationConfiguration::invalidateColorTransformationCache(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_channelCount, m_curves, m_transfers, KisFilterConfiguration::name, KisPropertiesConfiguration::removeProperty(), setActiveCurve(), KisColorTransformationConfiguration::setProperty(), updateTransfer(), and value().

◆ toXML() [1/4]

QString KisPropertiesConfiguration::toXML ( ) const
overridevirtual

Create a serialized version of this properties config This function use the "Legacy" style XML of the 1.x .kra file format.

Reimplemented from KisFilterConfiguration.

Definition at line 75 of file kis_properties_configuration.cc.

128{
129 QDomDocument doc = QDomDocument("params");
130 QDomElement root = doc.createElement("params");
131 doc.appendChild(root);
132 toXML(doc, root);
133 return doc.toString();
134}

◆ toXML() [2/4]

void KisFilterConfiguration::toXML ( QDomDocument & ,
QDomElement &  ) const
overridevirtual

Create a serialized version of this object

Reimplemented from KisFilterConfiguration.

Definition at line 78 of file kis_filter_configuration.cc.

96{
97 elt.setAttribute("version", d->version);
99}

◆ toXML() [3/4]

void KisPropertiesConfiguration::toXML ( QDomDocument & doc,
QDomElement & root ) const
overridevirtual

Create a serialized version of this properties config This function use the "Legacy" style XML of the 1.x .kra file format.

Reimplemented from KisFilterConfiguration.

Definition at line 75 of file kis_properties_configuration.cc.

90{
91 QMap<QString, QVariant>::ConstIterator it;
92 for (it = d->properties.constBegin(); it != d->properties.constEnd(); ++it) {
93 if (d->notSavedProperties.contains(it.key())) {
94 continue;
95 }
96
97 QDomElement e = doc.createElement("param");
98 e.setAttribute("name", QString(it.key().toLatin1()));
99 QString type = "string";
100 QVariant v = it.value();
101 QDomText text;
102 if (v.userType() == qMetaTypeId<KisCubicCurve>()) {
103 text = doc.createCDATASection(v.value<KisCubicCurve>().toString());
104 } else if (v.userType() == qMetaTypeId<KoColor>()) {
105 QDomDocument cdataDoc = QDomDocument("color");
106 QDomElement cdataRoot = cdataDoc.createElement("color");
107 cdataDoc.appendChild(cdataRoot);
108 v.value<KoColor>().toXML(cdataDoc, cdataRoot);
109 text = cdataDoc.createCDATASection(cdataDoc.toString());
110 type = "color";
111 } else if(v.type() == QMetaType::QString ) {
112 text = doc.createCDATASection(v.toString()); // XXX: Unittest this!
113 type = "string";
114 } else if(v.type() == QMetaType::QByteArray ) {
115 text = doc.createTextNode(QString::fromLatin1(v.toByteArray().toBase64())); // Arbitrary Data
116 type = "bytearray";
117 } else {
118 text = doc.createTextNode(v.toString());
119 type = "internal";
120 }
121 e.setAttribute("type", type);
122 e.appendChild(text);
123 root.appendChild(e);
124 }
125}
qreal v
QString toString() const

◆ toXML() [4/4]

void KisMultiChannelFilterConfiguration::toXML ( QDomDocument & ,
QDomElement &  ) const
overridevirtual

Create a serialized version of this object

<params version=1>
<param name="nTransfers">3</param>
<param name="curve0">0,0;0.5,0.5;1,1;</param>
<param name="curve1">0,0;1,1;</param>
<param name="curve2">0,0;1,1;</param>
</params>

Reimplemented from KisFilterConfiguration.

Definition at line 270 of file kis_multichannel_filter_base.cpp.

271{
283 root.setAttribute("version", version());
284
285 QDomText text;
286 QDomElement t;
287
288 addParamNode(doc, root, "nTransfers", QString::number(m_channelCount));
289
290 if (m_activeCurve >= 0) {
291 // save active curve if only it has non-default value
292 addParamNode(doc, root, "activeCurve", QString::number(m_activeCurve));
293 }
294
295 KisCubicCurve curve;
296 QString paramName;
297
298 for (int i = 0; i < m_curves.size(); ++i) {
299 QString name = QLatin1String("curve") + QString::number(i);
300 QString value = m_curves[i].toString();
301
302 addParamNode(doc, root, name, value);
303 }
304}
void addParamNode(QDomDocument &doc, QDomElement &root, const QString &name, const QString &value)

References addParamNode(), m_activeCurve, m_channelCount, m_curves, KisFilterConfiguration::name, value(), and KisFilterConfiguration::version.

◆ transfers()

const QVector< QVector< quint16 > > & KisMultiChannelFilterConfiguration::transfers ( ) const

Definition at line 157 of file kis_multichannel_filter_base.cpp.

158{
159 return m_transfers;
160}

References m_transfers.

◆ updateTransfer()

void KisMultiChannelFilterConfiguration::updateTransfer ( int index)
protected

Definition at line 142 of file kis_multichannel_filter_base.cpp.

143{
144 KIS_SAFE_ASSERT_RECOVER_RETURN(index >= 0 && index < m_curves.size());
145 m_transfers[index] = m_curves[index].uint16Transfer();
146}

References KIS_SAFE_ASSERT_RECOVER_RETURN, m_curves, and m_transfers.

◆ updateTransfers()

void KisMultiChannelFilterConfiguration::updateTransfers ( )
protected

Definition at line 148 of file kis_multichannel_filter_base.cpp.

149{
151 for (int i = 0; i < m_channelCount; i++) {
152 m_transfers[i] = m_curves[i].uint16Transfer();
153 }
154}

References m_channelCount, m_curves, and m_transfers.

Member Data Documentation

◆ m_activeCurve

int KisMultiChannelFilterConfiguration::m_activeCurve {-1}
protected

Definition at line 75 of file kis_multichannel_filter_base.h.

75{-1};

◆ m_channelCount

int KisMultiChannelFilterConfiguration::m_channelCount {0}
protected

Definition at line 74 of file kis_multichannel_filter_base.h.

74{0};

◆ m_curves

QList<KisCubicCurve> KisMultiChannelFilterConfiguration::m_curves
protected

Definition at line 76 of file kis_multichannel_filter_base.h.

◆ m_transfers

QVector<QVector<quint16> > KisMultiChannelFilterConfiguration::m_transfers
protected

Definition at line 77 of file kis_multichannel_filter_base.h.


The documentation for this class was generated from the following files: