Krita Source Code Documentation
Loading...
Searching...
No Matches
KisHalftoneFilterConfiguration.cpp
Go to the documentation of this file.
1/*
2 * KDE. Krita Project.
3 *
4 * SPDX-FileCopyrightText: 2020 Deif Lou <ginoba@gmail.com>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
12
14
16 qint32 version,
17 KisResourcesInterfaceSP resourcesInterface)
18 : KisFilterConfiguration(name, version, resourcesInterface)
19{}
20
23{
24 QHashIterator<QString, KisFilterConfigurationSP> it(rhs.m_generatorConfigurationsCache);
25 while (it.hasNext()) {
26 it.next();
27 m_generatorConfigurationsCache[it.key()] = it.value()->clone();
28 }
29}
30
33
38
40{
42
44 const QString prefix = colorModelId() + "_channel";
45 for (int i = 0; i < 4; ++i) {
46 const QString fullPrefix = prefix + QString::number(i) + "_";
47 KisFilterConfigurationSP generatorConfig = generatorConfiguration(fullPrefix);
48 if (generatorConfig) {
49 m_generatorConfigurationsCache[fullPrefix]->setResourcesInterface(resourcesInterface);
50 }
51 }
52 } else {
53 const QString prefix = mode() + "_";
54 KisFilterConfigurationSP generatorConfig = generatorConfiguration(prefix);
55 if (generatorConfig) {
56 m_generatorConfigurationsCache[prefix]->setResourcesInterface(resourcesInterface);
57 }
58 }
59}
60
62{
63 QList<KoResourceLoadResult> resourcesList;
64
66 const QString prefix = colorModelId() + "_channel";
67 for (int i = 0; i < 4; ++i) {
68 const QString fullPrefix = prefix + QString::number(i) + "_";
69 KisFilterConfigurationSP generatorConfig = generatorConfiguration(fullPrefix);
70 if (generatorConfig) {
71 resourcesList += generatorConfig->linkedResources(globalResourcesInterface);
72 }
73 }
74 } else {
75 const QString prefix = mode() + "_";
76 KisFilterConfigurationSP generatorConfig = generatorConfiguration(prefix);
77 if (generatorConfig) {
78 resourcesList += generatorConfig->linkedResources(globalResourcesInterface);
79 }
80 }
81
82 return resourcesList;
83}
84
86{
87 QList<KoResourceLoadResult> resourcesList;
88
90 const QString prefix = colorModelId() + "_channel";
91 for (int i = 0; i < 4; ++i) {
92 const QString fullPrefix = prefix + QString::number(i) + "_";
93 KisFilterConfigurationSP generatorConfig = generatorConfiguration(fullPrefix);
94 if (generatorConfig) {
95 resourcesList += generatorConfig->embeddedResources(globalResourcesInterface);
96 }
97 }
98 } else {
99 const QString prefix = mode() + "_";
100 KisFilterConfigurationSP generatorConfig = generatorConfiguration(prefix);
101 if (generatorConfig) {
102 resourcesList += generatorConfig->embeddedResources(globalResourcesInterface);
103 }
104 }
105
106 return resourcesList;
107}
108
110{
111 return getString("color_model_id", "");
112}
113
115{
116 return getString("mode", "");
117}
118
119QString KisHalftoneFilterConfiguration::generatorId(const QString &prefix) const
120{
121 return getString(prefix + "generator", "");
122}
123
125{
126 if (m_generatorConfigurationsCache.contains(prefix)) {
127 return m_generatorConfigurationsCache[prefix];
128 } else {
130 QString generatorId = this->generatorId(prefix);
131 if (generatorIds.indexOf(generatorId) != -1) {
132 QString fullGeneratorId = prefix + "generator_" + generatorId;
135 getPrefixedProperties(fullGeneratorId + "_", generatorConfig);
136 m_generatorConfigurationsCache[prefix] = generatorConfig;
137 return generatorConfig;
138 }
139 }
140 return nullptr;
141}
142
143qreal KisHalftoneFilterConfiguration::hardness(const QString &prefix) const
144{
145 return getDouble(prefix + "hardness", defaultHardness());
146}
147
148bool KisHalftoneFilterConfiguration::invert(const QString &prefix) const
149{
150 return getBool(prefix + "invert", defaultInvert());
151}
152
154{
155 return getColor(prefix + "foreground_color", defaultForegroundColor());
156}
157
159{
160 return getInt(prefix + "foreground_opacity", defaultForegroundOpacity());
161}
162
164{
165 return getColor(prefix + "background_color", defaultBackgroundColor());
166}
167
169{
170 return getInt(prefix + "background_opacity", defaultForegroundOpacity());
171}
172
173void KisHalftoneFilterConfiguration::setColorModelId(const QString &newColorModelId)
174{
175 setProperty("color_model_id", newColorModelId);
176}
177
178void KisHalftoneFilterConfiguration::setMode(const QString &newMode)
179{
180 setProperty("mode", newMode);
181}
182
183void KisHalftoneFilterConfiguration::setGeneratorId(const QString &prefix, const QString &id)
184{
185 setProperty(prefix + "generator", id);
186}
187
189{
190 if (!config) {
191 return;
192 }
193
194 QString generatorId = this->generatorId(prefix);
195 QString fullGeneratorId = prefix + "generator_" + generatorId;
196 setPrefixedProperties(fullGeneratorId + "_", config);
197 m_generatorConfigurationsCache[prefix] = config;
198}
199
200void KisHalftoneFilterConfiguration::setHardness(const QString & prefix, qreal newHardness)
201{
202 setProperty(prefix + "hardness", newHardness);
203}
204
205void KisHalftoneFilterConfiguration::setInvert(const QString & prefix, bool newInvert)
206{
207 setProperty(prefix + "invert", newInvert);
208}
209
210void KisHalftoneFilterConfiguration::setForegroundColor(const QString & prefix, const KoColor & newForegroundColor)
211{
212 QVariant v;
213 v.setValue(newForegroundColor);
214 setProperty(prefix + "foreground_color", v);
215}
216
217void KisHalftoneFilterConfiguration::setForegroundOpacity(const QString & prefix, int newForegroundOpacity)
218{
219 setProperty(prefix + "foreground_opacity", newForegroundOpacity);
220}
221void KisHalftoneFilterConfiguration::setBackgroundColor(const QString & prefix, const KoColor & newBackgroundColor)
222{
223 QVariant v;
224 v.setValue(newBackgroundColor);
225 setProperty(prefix + "background_color", v);
226}
227
228void KisHalftoneFilterConfiguration::setBackgroundOpacity(const QString & prefix, int newBackgroundOpacity)
229{
230 setProperty(prefix + "background_opacity", newBackgroundOpacity);
231}
232
233void KisHalftoneFilterConfiguration::setProperty(const QString &name, const QVariant &value)
234{
236
237 // The generator configurations are cached, so we need to check if the
238 // property name of a property being set represents a property of a
239 // generator configuration, and in that case we must remove the cache entry
240 // that property belongs to, so that the configuration can be regenerated
241 // later. This is an issue mainly when setting the properties directly
242 // (through python for example) instead of using the high level methods.
243 const QStringList nameParts = name.split('_');
244 if (nameParts.size() < 3) {
245 return;
246 }
247 const int generatorKeywordIndex = nameParts[0] == "alpha" || nameParts[0] == "intensity" ? 1 : 2;
248 if (nameParts[generatorKeywordIndex] != "generator") {
249 return;
250 }
251 if (generatorKeywordIndex == 1) {
252 m_generatorConfigurationsCache.remove(nameParts[0] + "_");
253 } else {
254 m_generatorConfigurationsCache.remove(nameParts[0] + "_" + nameParts[1] + "_");
255 }
256}
float value(const T *src, size_t ch)
qreal v
static KisGeneratorRegistry * instance()
void setBackgroundColor(const QString &prefix, const KoColor &newBackgroundColor)
void setGeneratorConfiguration(const QString &prefix, KisFilterConfigurationSP config)
KisHalftoneFilterConfiguration(const QString &name, qint32 version, KisResourcesInterfaceSP resourcesInterface)
void setGeneratorId(const QString &prefix, const QString &id)
static constexpr const char * HalftoneMode_IndependentChannels
void setColorModelId(const QString &newColorModelId)
KoColor backgroundColor(const QString &prefix) const
QString generatorId(const QString &prefix) const
int backgroundOpacity(const QString &prefix) const
int foregroundOpacity(const QString &prefix) const
KisFilterConfigurationSP clone() const override
KisFilterConfigurationSP generatorConfiguration(const QString &prefix) const
QHash< QString, KisFilterConfigurationSP > m_generatorConfigurationsCache
QList< KoResourceLoadResult > embeddedResources(KisResourcesInterfaceSP globalResourcesInterface) const override
QList< KoResourceLoadResult > linkedResources(KisResourcesInterfaceSP globalResourcesInterface) const override
void setHardness(const QString &prefix, qreal newHardness)
qreal hardness(const QString &prefix) const
void setForegroundColor(const QString &prefix, const KoColor &newForegroundColor)
void setProperty(const QString &name, const QVariant &value) override
void setResourcesInterface(KisResourcesInterfaceSP resourcesInterface) override
void setBackgroundOpacity(const QString &prefix, int newBackgroundOpacity)
void setForegroundOpacity(const QString &prefix, int newOpacity)
void setInvert(const QString &prefix, bool newInvert)
KoColor foregroundColor(const QString &prefix) const
bool invert(const QString &prefix) const
T get(const QString &id) const
QList< QString > keys() const
virtual KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const
virtual void setResourcesInterface(KisResourcesInterfaceSP resourcesInterface)
KisResourcesInterfaceSP resourcesInterface
void setPrefixedProperties(const QString &prefix, const KisPropertiesConfiguration *config)
QString getString(const QString &name, const QString &def=QString()) const
virtual void setProperty(const QString &name, const QVariant &value)
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.
int getInt(const QString &name, int def=0) const
double getDouble(const QString &name, double def=0.0) const
void getPrefixedProperties(const QString &prefix, KisPropertiesConfiguration *config) const