Krita Source Code Documentation
Loading...
Searching...
No Matches
qml_converter.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2013 Sven Langkamp <sven.langkamp@gmail.com>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7#include "qml_converter.h"
8
9#include <QFileInfo>
10#include <QDir>
11
12#include <kis_image.h>
13#include <kis_group_layer.h>
14#include <KisPortingUtils.h>
15
16#define SPACE " "
17
21
25
26KisImportExportErrorCode QMLConverter::buildFile(const QString &filename, const QString &realFilename, QIODevice *io, KisImageSP image)
27{
28 QTextStream out(io);
30 out << "import QtQuick 1.1" << "\n\n";
31 out << "Rectangle {\n";
32 writeInt(out, 1, "width", image->width());
33 writeInt(out, 1, "height", image->height());
34 out << "\n";
35
36 QFileInfo info(filename);
37 QFileInfo infoRealFile(realFilename);
38 KisNodeSP node = image->rootLayer()->firstChild();
39 QString imageDir = infoRealFile.completeBaseName() + "_images";
40 QString imagePath = infoRealFile.absolutePath() + '/' + imageDir;
41 if (node) {
42 QDir dir;
43 bool success = dir.mkpath(imagePath);
44 if (!success)
45 {
47 }
48 }
49
50 dbgFile << "Saving images to " << imagePath;
51 while(node) {
52 KisPaintDeviceSP projection = node->projection();
53 QRect rect = projection->exactBounds();
54 QImage qmlImage = projection->convertToQImage(0, rect.x(), rect.y(), rect.width(), rect.height());
55 QString name = node->name().replace(' ', '_').toLower();
56 QString fileName = name + ".png";
57 qmlImage.save(imagePath +'/'+ fileName);
58
59 out << SPACE << "Image {\n";
60 writeString(out, 2, "id", name);
61 writeInt(out, 2, "x", rect.x());
62 writeInt(out, 2, "y", rect.y());
63 writeInt(out, 2, "width", rect.width());
64 writeInt(out, 2, "height", rect.height());
65 writeString(out, 2, "source", "\"" + imageDir + '/' + fileName + "\"" );
66 writeString(out, 2, "opacity", QString().setNum(node->opacity()/255.0));
67 out << SPACE << "}\n";
68 node = node->nextSibling();
69 }
70 out << "}\n";
71
73}
74
75void QMLConverter::writeString(QTextStream& out, int spacing, const QString& setting, const QString& value) {
76 for (int space = 0; space < spacing; space++) {
77 out << SPACE;
78 }
79 out << setting << ": " << value << "\n";
80}
81
82void QMLConverter::writeInt(QTextStream& out, int spacing, const QString& setting, int value) {
83 writeString(out, spacing, setting, QString::number(value));
84}
85
86
float value(const T *src, size_t ch)
KisGroupLayerSP rootLayer() const
qint32 width() const
qint32 height() const
QRect exactBounds() const
QImage convertToQImage(const KoColorProfile *dstProfile, qint32 x, qint32 y, qint32 w, qint32 h, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags()) const
void writeInt(QTextStream &out, int spacing, const QString &setting, int value)
void writeString(QTextStream &out, int spacing, const QString &setting, const QString &value)
KisImportExportErrorCode buildFile(const QString &filename, const QString &realFilename, QIODevice *io, KisImageSP image)
~QMLConverter() override
#define dbgFile
Definition kis_debug.h:53
void setUtf8OnStream(QTextStream &stream)
#define SPACE
virtual KisPaintDeviceSP projection() const =0
QString name() const
quint8 opacity() const
KisNodeSP firstChild() const
Definition kis_node.cpp:361
KisNodeSP nextSibling() const
Definition kis_node.cpp:408