11#include <QDomDocument>
32 QDomElement el =
m_d->document.createElement(
"asl");
33 m_d->document.appendChild(el);
34 m_d->currentElement = el;
43 if (
m_d->document.documentElement() !=
m_d->currentElement) {
44 warnKrita <<
"KisAslXmlWriter::document(): unbalanced enter/leave descriptor/array";
52 QDomElement el =
m_d->document.createElement(
"node");
55 el.setAttribute(
"key", key);
58 el.setAttribute(
"type",
"Descriptor");
59 el.setAttribute(
"name", name);
60 el.setAttribute(
"classId", classId);
62 m_d->currentElement.appendChild(el);
63 m_d->currentElement = el;
68 if (!
m_d->currentElement.parentNode().toElement().isNull()) {
69 m_d->currentElement =
m_d->currentElement.parentNode().toElement();
71 warnKrita <<
"KisAslXmlWriter::leaveDescriptor(): unbalanced enter/leave descriptor";
77 QDomElement el =
m_d->document.createElement(
"node");
80 el.setAttribute(
"key", key);
83 el.setAttribute(
"type",
"List");
85 m_d->currentElement.appendChild(el);
86 m_d->currentElement = el;
91 if (!
m_d->currentElement.parentNode().toElement().isNull()) {
92 m_d->currentElement =
m_d->currentElement.parentNode().toElement();
94 warnKrita <<
"KisAslXmlWriter::leaveList(): unbalanced enter/leave list";
100 QDomElement el =
m_d->document.createElement(
"node");
102 if (!key.isEmpty()) {
103 el.setAttribute(
"key", key);
106 el.setAttribute(
"type",
"Double");
109 m_d->currentElement.appendChild(el);
114 QDomElement el =
m_d->document.createElement(
"node");
116 if (!key.isEmpty()) {
117 el.setAttribute(
"key", key);
120 el.setAttribute(
"type",
"Integer");
123 m_d->currentElement.appendChild(el);
128 QDomElement el =
m_d->document.createElement(
"node");
130 if (!key.isEmpty()) {
131 el.setAttribute(
"key", key);
134 el.setAttribute(
"type",
"Enum");
135 el.setAttribute(
"typeId", typeId);
136 el.setAttribute(
"value",
value);
138 m_d->currentElement.appendChild(el);
143 QDomElement el =
m_d->document.createElement(
"node");
145 if (!key.isEmpty()) {
146 el.setAttribute(
"key", key);
149 el.setAttribute(
"type",
"UnitFloat");
150 el.setAttribute(
"unit", unit);
153 m_d->currentElement.appendChild(el);
158 QDomElement el =
m_d->document.createElement(
"node");
160 if (!key.isEmpty()) {
161 el.setAttribute(
"key", key);
164 el.setAttribute(
"type",
"Text");
165 el.setAttribute(
"value",
value);
167 m_d->currentElement.appendChild(el);
172 QDomElement el =
m_d->document.createElement(
"node");
174 if (!key.isEmpty()) {
175 el.setAttribute(
"key", key);
178 el.setAttribute(
"type",
"Boolean");
181 m_d->currentElement.appendChild(el);
187 QDomElement el = doc.createElement(
"color");
188 value.toXML(doc, el);
189 QDomElement colorEl = el.firstChildElement();
231 if (
value.metadata().keys().contains(
"psdSpotBook")) {
233 v =
value.metadata().value(
"spotName");
237 v =
value.metadata().value(
"psdSpotBook");
242 v =
value.metadata().value(
"psdSpotBookId");
243 int bookid =
v.toInt(&ok);
290 Q_FOREACH (
const QPointF &pt, points) {
310 buffer.open(QIODevice::WriteOnly);
311 pattern->savePatToDevice(&buffer);
313 QDomCDATASection dataSection =
m_d->document.createCDATASection(qCompress(buffer.buffer()).toBase64());
315 QDomElement dataElement =
m_d->document.createElement(
"node");
316 dataElement.setAttribute(
"type",
"KisPatternData");
317 dataElement.setAttribute(
"key",
"Data");
318 dataElement.appendChild(dataSection);
320 m_d->currentElement.appendChild(dataElement);
353 for (
int i = 0; i < colors.size(); i++) {
368 for (
int i = 0; i < colors.size(); i++) {
414 const qreal mid = (end - start) > DBL_EPSILON ? (seg->
middleOffset() - start) / (end - start) : 0.5;
417 qreal transparency = color.
opacityF();
423 transparencies << transparency;
426 middleOffsets << mid;
431 if (!segments.isEmpty()) {
435 qreal transparency = color.
opacityF();
440 transparencies << transparency;
443 middleOffsets << 0.5;
459 qreal transparency = color.
opacityF();
476 transparencies << transparency;
479 middleOffsets << 0.5;
487 QDomCDATASection dataSection =
m_d->document.createCDATASection(rawData->toBase64());
488 QDomElement dataElement =
m_d->document.createElement(
"node");
489 dataElement.setAttribute(
"type",
"RawData");
490 dataElement.setAttribute(
"key", key);
491 dataElement.appendChild(dataSection);
492 m_d->currentElement.appendChild(dataElement);
536 if (transformedRect.size() < 4) {
537 warnKrita <<
"KisAslXmlWriter::writePointRect(): too few points to write descriptor.";
542 writePoint(
"rectangleCornerA", transformedRect.at(0));
543 writePoint(
"rectangleCornerB", transformedRect.at(1));
544 writePoint(
"rectangleCornerC", transformedRect.at(2));
545 writePoint(
"rectangleCornerD", transformedRect.at(3));
float value(const T *src, size_t ch)
const KoID GrayAColorModelID("GRAYA", ki18n("Grayscale/Alpha"))
const KoID CMYKAColorModelID("CMYKA", ki18n("CMYK/Alpha"))
const KoID LABAColorModelID("LABA", ki18n("L*a*b*/Alpha"))
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
KoGradientSegmentEndpointType
@ BACKGROUND_TRANSPARENT_ENDPOINT
@ FOREGROUND_TRANSPARENT_ENDPOINT
QString getSegmentEndpointTypeString(KoGradientSegmentEndpointType segtype)
void writeTransform(const QString &key, const QTransform &transform)
void writeColor(const QString &key, const KoColor &value)
void writeBoolean(const QString &key, bool value)
QString writePattern(const QString &key, const KoPatternSP pattern)
void writeEnum(const QString &key, const QString &typeId, const QString &value)
void writeStopGradient(const QString &key, const KoStopGradient &gradient)
void enterList(const QString &key)
void enterDescriptor(const QString &key, const QString &name, const QString &classId)
void writeUnitFloat(const QString &key, const QString &unit, double value)
void writeDouble(const QString &key, double value)
QDomDocument document() const
void writeText(const QString &key, const QString &value)
void writeSegmentGradient(const QString &key, const KoSegmentGradient &gradient)
void writePoint(const QString &key, const QPointF &value)
void writePointRect(const QString &key, const QPolygonF &transformedRect)
void writeRawData(const QString key, const QByteArray *rawData)
void writeGradientImpl(const QString &key, const QString &name, QVector< KoColor > colors, QVector< qreal > transparencies, QVector< qreal > positions, QVector< QString > types, QVector< qreal > middleOffsets)
void writeUnitRect(const QString &key, const QString &unit, const QRectF &rect)
void writePatternRef(const QString &key, const KoPatternSP pattern, const QString &uuid)
void writeOffsetPoint(const QString &key, const QPointF &value)
void writeFloatRect(const QString &key, const QRectF &rect)
void writeCurve(const QString &key, const QString &name, const QVector< QPointF > &points)
void writeInteger(const QString &key, int value)
void writePhasePoint(const QString &key, const QPointF &value)
const QScopedPointer< Private > m_d
void setOpacity(quint8 alpha)
qreal startOffset() const
KoGradientSegmentEndpointType endType() const
KoGradientSegmentEndpointType startType() const
const KoColor & startColor() const
const KoColor & endColor() const
qreal middleOffset() const
const QList< KoGradientSegment * > & segments() const
QList< KoGradientStop > stops() const
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
QString getPatternUuidLazy(const KoPatternSP pattern)
double toDouble(const QString &str, bool *ok=nullptr)
QString toString(const QString &value)
QDomElement currentElement