Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_asl_callback_object_catcher.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <QHash>
10
11#include <QColor>
12#include <QPointF>
13#include <QString>
14
15#include <KoColor.h>
16
17#include "kis_debug.h"
18
19typedef QHash<QString, ASLCallbackDouble> MapHashDouble;
20typedef QHash<QString, ASLCallbackInteger> MapHashInt;
21
23 EnumMapping(const QString &_typeId, ASLCallbackString _map)
24 : typeId(_typeId)
25 , map(_map)
26 {
27 }
28
29 QString typeId;
31};
32
33typedef QHash<QString, EnumMapping> MapHashEnum;
34
37
38 }
39 UnitFloatMapping(const QString &_unit, ASLCallbackDouble _map)
40 {
41 unitMap.insert(_unit, _map);
42 }
43
44 QMap<QString, ASLCallbackDouble> unitMap;
45};
46
48 UnitRectMapping(const QString &_unit, ASLCallbackRect _map)
49 : unit(_unit)
50 , map(_map)
51 {
52 }
53
54 QString unit;
56};
57
58typedef QHash<QString, UnitFloatMapping> MapHashUnitFloat;
59typedef QHash<QString, UnitRectMapping> MapHashUnitRect;
60
61typedef QHash<QString, ASLCallbackString> MapHashText;
62typedef QHash<QString, ASLCallbackBoolean> MapHashBoolean;
63typedef QHash<QString, ASLCallbackColor> MapHashColor;
64typedef QHash<QString, ASLCallbackPoint> MapHashPoint;
65typedef QHash<QString, ASLCallbackCurve> MapHashCurve;
66typedef QHash<QString, ASLCallbackPattern> MapHashPattern;
67typedef QHash<QString, ASLCallbackPatternRef> MapHashPatternRef;
68typedef QHash<QString, ASLCallbackGradient> MapHashGradient;
69typedef QHash<QString, ASLCallbackRawData> MapHashRawData;
70typedef QHash<QString, ASLCallbackTransform> MapHashTransform;
71typedef QHash<QString, ASLCallbackRect> MapHashRect;
72
93
98
102
103template<class HashType, typename T>
104inline void passToCallback(const QString &path, const HashType &hash, const T &value)
105{
106 typename HashType::const_iterator it = hash.constFind(path);
107 if (it != hash.constEnd()) {
108 (*it)(value);
109 } else {
110 warnKrita << "Unhandled:" << path << typeid(hash).name() << value;
111 }
112}
113
114template<class HashType, typename T1, typename T2>
115inline void passToCallback(const QString &path, const HashType &hash, const T1 &value1, const T2 &value2)
116{
117 typename HashType::const_iterator it = hash.constFind(path);
118 if (it != hash.constEnd()) {
119 (*it)(value1, value2);
120 } else {
121 warnKrita << "Unhandled:" << path << typeid(hash).name() << value1 << value2;
122 }
123}
124
125void KisAslCallbackObjectCatcher::addDouble(const QString &path, double value)
126{
127 passToCallback(path, m_d->mapDouble, value);
128}
129
130void KisAslCallbackObjectCatcher::addInteger(const QString &path, int value)
131{
132 passToCallback(path, m_d->mapInteger, value);
133}
134
135void KisAslCallbackObjectCatcher::addEnum(const QString &path, const QString &typeId, const QString &value)
136{
137 MapHashEnum::const_iterator it = m_d->mapEnum.constFind(path);
138 if (it != m_d->mapEnum.constEnd()) {
139 if (it->typeId == typeId) {
140 it->map(value);
141 } else {
142 warnKrita << "KisAslCallbackObjectCatcher::addEnum: inconsistent typeId" << ppVar(typeId) << ppVar(it->typeId);
143 }
144 }
145}
146
147void KisAslCallbackObjectCatcher::addUnitFloat(const QString &path, const QString &unit, double value)
148{
149 MapHashUnitFloat::const_iterator it = m_d->mapUnitFloat.constFind(path);
150 if (it != m_d->mapUnitFloat.constEnd()) {
151 if (it->unitMap.contains(unit)) {
152 ASLCallbackDouble map = it->unitMap.value(unit);
153 map(value);
154 } else {
155 warnKrita << "KisAslCallbackObjectCatcher::addUnitFloat: inconsistent unit" << ppVar(unit) << ppVar(it->unitMap.keys());
156 }
157 }
158}
159
160void KisAslCallbackObjectCatcher::addText(const QString &path, const QString &value)
161{
162 passToCallback(path, m_d->mapText, value);
163}
164
165void KisAslCallbackObjectCatcher::addBoolean(const QString &path, bool value)
166{
167 passToCallback(path, m_d->mapBoolean, value);
168}
169
170void KisAslCallbackObjectCatcher::addColor(const QString &path, const KoColor &value)
171{
172 passToCallback(path, m_d->mapColor, value);
173}
174
175void KisAslCallbackObjectCatcher::addPoint(const QString &path, const QPointF &value)
176{
177 passToCallback(path, m_d->mapPoint, value);
178}
179
180void KisAslCallbackObjectCatcher::addCurve(const QString &path, const QString &name, const QVector<QPointF> &points)
181{
182 MapHashCurve::const_iterator it = m_d->mapCurve.constFind(path);
183 if (it != m_d->mapCurve.constEnd()) {
184 (*it)(name, points);
185 }
186}
187
188void KisAslCallbackObjectCatcher::addPattern(const QString &path, const KoPatternSP value, const QString &patternUuid)
189{
190 passToCallback(path, m_d->mapPattern, value, patternUuid);
191}
192
193void KisAslCallbackObjectCatcher::addPatternRef(const QString &path, const QString &patternUuid, const QString &patternName)
194{
195 MapHashPatternRef::const_iterator it = m_d->mapPatternRef.constFind(path);
196 if (it != m_d->mapPatternRef.constEnd()) {
197 (*it)(patternUuid, patternName);
198 }
199}
200
202{
203 passToCallback(path, m_d->mapGradient, value);
204}
205
207{
208 if (m_d->newStyleCallback) {
209 m_d->newStyleCallback();
210 }
211}
212
213void KisAslCallbackObjectCatcher::addRawData(const QString &path, QByteArray ba)
214{
215 passToCallback(path, m_d->mapRawData, ba);
216}
217
218void KisAslCallbackObjectCatcher::addTransform(const QString &path, const QTransform &transform)
219{
220 passToCallback(path, m_d->mapTransform, transform);
221}
222
223void KisAslCallbackObjectCatcher::addRect(const QString &path, const QRectF &rect)
224{
225 passToCallback(path, m_d->mapRect, rect);
226}
227
228void KisAslCallbackObjectCatcher::addUnitRect(const QString &path, const QString &unit, const QRectF &rect)
229{
230 MapHashUnitRect::const_iterator it = m_d->mapUnitRect.constFind(path);
231 if (it != m_d->mapUnitRect.constEnd()) {
232 if (it->unit == unit) {
233 it->map(rect);
234 } else {
235 warnKrita << "KisAslCallbackObjectCatcher::addUnitRect: inconsistent unit" << ppVar(unit) << ppVar(it->unit);
236 }
237 }
238}
239
240/*****************************************************************/
241/* Subscription methods */
242/*****************************************************************/
243
245{
246 m_d->mapDouble.insert(path, callback);
247}
248
250{
251 m_d->mapInteger.insert(path, callback);
252}
253
254void KisAslCallbackObjectCatcher::subscribeEnum(const QString &path, const QString &typeId, ASLCallbackString callback)
255{
256 m_d->mapEnum.insert(path, EnumMapping(typeId, callback));
257}
258
259void KisAslCallbackObjectCatcher::subscribeUnitFloat(const QString &path, const QString &unit, ASLCallbackDouble callback)
260{
261 if (m_d->mapUnitFloat.contains(path)) {
262 UnitFloatMapping mapping = m_d->mapUnitFloat.value(path);
263 mapping.unitMap.insert(unit, callback);
264 m_d->mapUnitFloat.insert(path, mapping);
265 } else {
266 m_d->mapUnitFloat.insert(path, UnitFloatMapping(unit, callback));
267 }
268}
269
271{
272 m_d->mapText.insert(path, callback);
273}
274
276{
277 m_d->mapBoolean.insert(path, callback);
278}
279
281{
282 m_d->mapColor.insert(path, callback);
283}
284
286{
287 m_d->mapPoint.insert(path, callback);
288}
289
291{
292 m_d->mapCurve.insert(path, callback);
293}
294
296{
297 m_d->mapPattern.insert(path, callback);
298}
299
301{
302 m_d->mapPatternRef.insert(path, callback);
303}
304
306{
307 m_d->mapGradient.insert(path, callback);
308}
309
311{
312 m_d->newStyleCallback = callback;
313}
314
316{
317 m_d->mapRawData.insert(path, callback);
318}
319
321{
322 m_d->mapTransform.insert(path, callback);
323}
324
326{
327 m_d->mapRect.insert(path, callback);
328}
329
330void KisAslCallbackObjectCatcher::subscribeUnitRect(const QString &path, const QString &unit, ASLCallbackRect callback)
331{
332 m_d->mapUnitRect.insert(path, UnitRectMapping(unit, callback));
333}
float value(const T *src, size_t ch)
void addGradient(const QString &path, KoAbstractGradientSP gradient) override
void addCurve(const QString &path, const QString &name, const QVector< QPointF > &points) override
void addUnitFloat(const QString &path, const QString &unit, double value) override
void addUnitRect(const QString &path, const QString &unit, const QRectF &rect) override
void addBoolean(const QString &path, bool value) override
void subscribeDouble(const QString &path, ASLCallbackDouble callback)
void subscribeRawData(const QString &path, ASLCallbackRawData callback)
void subscribeEnum(const QString &path, const QString &typeId, ASLCallbackString callback)
void subscribeNewStyleStarted(ASLCallbackNewStyle callback)
void subscribeInteger(const QString &path, ASLCallbackInteger callback)
void subscribeUnitRect(const QString &path, const QString &unit, ASLCallbackRect callback)
void subscribePattern(const QString &path, ASLCallbackPattern callback)
void subscribeCurve(const QString &path, ASLCallbackCurve callback)
void subscribeUnitFloat(const QString &path, const QString &unit, ASLCallbackDouble callback)
const QScopedPointer< Private > m_d
void addRawData(const QString &path, QByteArray ba) override
void addPattern(const QString &path, const KoPatternSP pattern, const QString &patternUuid) override
void addText(const QString &path, const QString &value) override
void addEnum(const QString &path, const QString &typeId, const QString &value) override
void subscribeRect(const QString &path, ASLCallbackRect callback)
void addPatternRef(const QString &path, const QString &patternUuid, const QString &patternName) override
void addRect(const QString &path, const QRectF &rect) override
void subscribeText(const QString &path, ASLCallbackString callback)
void addDouble(const QString &path, double value) override
void subscribeGradient(const QString &path, ASLCallbackGradient callback)
void addTransform(const QString &path, const QTransform &transform) override
void addColor(const QString &path, const KoColor &value) override
void subscribeColor(const QString &path, ASLCallbackColor callback)
void addInteger(const QString &path, int value) override
void subscribePoint(const QString &path, ASLCallbackPoint callback)
void subscribeBoolean(const QString &path, ASLCallbackBoolean callback)
void subscribeTransform(const QString &path, ASLCallbackTransform callback)
void subscribePatternRef(const QString &path, ASLCallbackPatternRef callback)
void addPoint(const QString &path, const QPointF &value) override
QHash< QString, ASLCallbackGradient > MapHashGradient
QHash< QString, ASLCallbackDouble > MapHashDouble
QHash< QString, ASLCallbackPatternRef > MapHashPatternRef
QHash< QString, ASLCallbackPoint > MapHashPoint
QHash< QString, ASLCallbackBoolean > MapHashBoolean
QHash< QString, ASLCallbackTransform > MapHashTransform
QHash< QString, ASLCallbackPattern > MapHashPattern
QHash< QString, ASLCallbackRect > MapHashRect
QHash< QString, EnumMapping > MapHashEnum
QHash< QString, ASLCallbackCurve > MapHashCurve
void passToCallback(const QString &path, const HashType &hash, const T &value)
QHash< QString, ASLCallbackInteger > MapHashInt
QHash< QString, ASLCallbackString > MapHashText
QHash< QString, UnitRectMapping > MapHashUnitRect
QHash< QString, ASLCallbackColor > MapHashColor
QHash< QString, ASLCallbackRawData > MapHashRawData
QHash< QString, UnitFloatMapping > MapHashUnitFloat
std::function< void(bool)> ASLCallbackBoolean
std::function< void()> ASLCallbackNewStyle
std::function< void(const KoPatternSP, const QString &)> ASLCallbackPattern
std::function< void(const QString &, const QString &)> ASLCallbackPatternRef
std::function< void(QRectF)> ASLCallbackRect
std::function< void(KoAbstractGradientSP)> ASLCallbackGradient
std::function< void(QByteArray)> ASLCallbackRawData
std::function< void(const QString &)> ASLCallbackString
std::function< void(int)> ASLCallbackInteger
std::function< void(QTransform)> ASLCallbackTransform
std::function< void(const QPointF &)> ASLCallbackPoint
std::function< void(const KoColor &)> ASLCallbackColor
std::function< void(double)> ASLCallbackDouble
std::function< void(const QString &, const QVector< QPointF > &)> ASLCallbackCurve
#define warnKrita
Definition kis_debug.h:87
#define ppVar(var)
Definition kis_debug.h:155
EnumMapping(const QString &_typeId, ASLCallbackString _map)
UnitFloatMapping(const QString &_unit, ASLCallbackDouble _map)
QMap< QString, ASLCallbackDouble > unitMap
UnitRectMapping(const QString &_unit, ASLCallbackRect _map)