Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_filter_configuration.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8#include "filter/kis_filter.h"
9
10#include <kis_debug.h>
11#include <QDomDocument>
12#include <QString>
13
15#include "kis_transaction.h"
16#include "kis_undo_adapter.h"
17#include "kis_painter.h"
18#include "kis_selection.h"
19#include "KoID.h"
20#include "kis_types.h"
22
23#include "kis_config_widget.h"
24
25struct Q_DECL_HIDDEN KisFilterConfiguration::Private {
26 QString name;
27 qint32 version;
28 QBitArray channelFlags;
29 KisResourcesInterfaceSP resourcesInterface = 0;
30
31 Private(const QString & _name, qint32 _version, KisResourcesInterfaceSP _resourcesInterface)
32 : name(_name),
33 version(_version),
34 resourcesInterface(_resourcesInterface)
35 {
36 }
37
38 Private(const Private &rhs)
39 : name(rhs.name),
40 version(rhs.version),
41 channelFlags(rhs.channelFlags),
42 resourcesInterface(rhs.resourcesInterface)
43 {
44 }
45
46#ifdef SANITY_CHECK_FILTER_CONFIGURATION_OWNER
47 QAtomicInt sanityUsageCounter;
48#endif /* SANITY_CHECK_FILTER_CONFIGURATION_OWNER */
49};
50
51KisFilterConfiguration::KisFilterConfiguration(const QString & name, qint32 version, KisResourcesInterfaceSP resourcesInterface)
52 : d(new Private(name, version, resourcesInterface))
53{
54}
55
60
66
71
72void KisFilterConfiguration::fromLegacyXML(const QDomElement& root)
73{
75 d->name = root.attribute("name");
76 d->version = root.attribute("version").toInt();
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}
88
89void KisFilterConfiguration::fromXML(const QDomElement& elt)
90{
91 d->version = elt.attribute("version").toInt();
93}
94
95void KisFilterConfiguration::toXML(QDomDocument& doc, QDomElement& elt) const
96{
97 elt.setAttribute("version", d->version);
99}
100
101
102const QString & KisFilterConfiguration::name() const
103{
104 return d->name;
105}
106
108{
109 return d->version;
110}
111
113{
114 d->version = version;
115}
116
118{
119 return d->resourcesInterface;
120}
121
123{
124 d->resourcesInterface = resourcesInterface;
125}
126
131
136
138{
139 return KisRequiredResourcesOperators::cloneWithResourcesSnapshot<KisFilterConfigurationSP>(this, globalResourcesInterface);
140}
141
143{
144 return linkedResources(globalResourcesInterface) + embeddedResources(globalResourcesInterface);
145}
146
148{
149 Q_UNUSED(globalResourcesInterface);
150 return {};
151}
152
154{
155 Q_UNUSED(globalResourcesInterface);
156 return {};
157}
158
160{
161 return true;
162}
163
165{
166 const KisFilterConfiguration *otherConfig = dynamic_cast<const KisFilterConfiguration *>(rhs);
167
168 return otherConfig
170 && name() == otherConfig->name()
171 && version() == otherConfig->version()
172 && channelFlags() == otherConfig->channelFlags();
173}
174
176{
177 return d->channelFlags;
178}
179
180void KisFilterConfiguration::setChannelFlags(QBitArray channelFlags)
181{
182 d->channelFlags = channelFlags;
183}
184
185#ifdef SANITY_CHECK_FILTER_CONFIGURATION_OWNER
186
188{
189 return d->sanityUsageCounter.ref();
190}
191
193{
194 return d->sanityUsageCounter.deref();
195}
196
197#endif /* SANITY_CHECK_FILTER_CONFIGURATION_OWNER */
float value(const T *src, size_t ch)
void createLocalResourcesSnapshot(T *object, KisResourcesInterfaceSP globalResourcesInterface=nullptr)
void setChannelFlags(QBitArray channelFlags)
QList< KoResourceLoadResult > requiredResources(KisResourcesInterfaceSP globalResourcesInterface) const
KisFilterConfiguration(const QString &name, qint32 version, KisResourcesInterfaceSP resourcesInterface)
KisFilterConfigurationSP cloneWithResourcesSnapshot(KisResourcesInterfaceSP globalResourcesInterface=nullptr) const
virtual void setResourcesInterface(KisResourcesInterfaceSP resourcesInterface)
Private(const QString &_name, qint32 _version, KisResourcesInterfaceSP _resourcesInterface)
virtual bool isCompatible(const KisPaintDeviceSP) const
virtual QList< KoResourceLoadResult > linkedResources(KisResourcesInterfaceSP globalResourcesInterface) const
virtual QList< KoResourceLoadResult > embeddedResources(KisResourcesInterfaceSP globalResourcesInterface) const
void createLocalResourcesSnapshot(KisResourcesInterfaceSP globalResourcesInterface=nullptr)
virtual KisFilterConfigurationSP clone() const
virtual bool compareTo(const KisPropertiesConfiguration *rhs) const override
void fromXML(const QDomElement &) override
virtual void fromLegacyXML(const QDomElement &)
KisResourcesInterfaceSP resourcesInterface
bool fromXML(const QString &xml, bool clear=true) override
void clearProperties()
Clear the map of properties.
virtual void setProperty(const QString &name, const QVariant &value)
virtual bool compareTo(const KisPropertiesConfiguration *rhs) const