1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQUICKQMLGENERATOR_P_H
5#define QQUICKQMLGENERATOR_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qquickgenerator_p.h"
19
20#include <QtCore/qtextstream.h>
21#include <QtCore/qbuffer.h>
22
23QT_BEGIN_NAMESPACE
24
25class Q_QUICKVECTORIMAGEGENERATOR_EXPORT QQuickQmlGenerator : public QQuickGenerator
26{
27public:
28 QQuickQmlGenerator(const QString fileName, QQuickVectorImageGenerator::GeneratorFlags flags, const QString &outFileName);
29 ~QQuickQmlGenerator();
30
31 void setShapeTypeName(const QString &name);
32 QString shapeTypeName() const;
33
34 void setCommentString(const QString commentString);
35 QString commentString() const;
36
37 void setRetainFilePaths(bool retainFilePaths)
38 {
39 m_retainFilePaths = retainFilePaths;
40 }
41
42 bool retainFilePaths() const
43 {
44 return m_retainFilePaths;
45 }
46
47 void setAssetFileDirectory(const QString &assetFileDirectory)
48 {
49 m_assetFileDirectory = assetFileDirectory;
50 }
51
52 QString assetFileDirectory() const
53 {
54 return m_assetFileDirectory;
55 }
56
57 void setAssetFilePrefix(const QString &assetFilePrefix)
58 {
59 m_assetFilePrefix = assetFilePrefix;
60 }
61
62 QString assetFilePrefix() const
63 {
64 return m_assetFilePrefix;
65 }
66
67protected:
68 void generateNodeBase(const NodeInfo &info) override;
69 bool generateDefsNode(const NodeInfo &info) override;
70 void generateImageNode(const ImageNodeInfo &info) override;
71 void generatePath(const PathNodeInfo &info, const QRectF &overrideBoundingRect) override;
72 void generateNode(const NodeInfo &info) override;
73 void generateTextNode(const TextNodeInfo &info) override;
74 void generateUseNode(const UseNodeInfo &info) override;
75 bool generateStructureNode(const StructureNodeInfo &info) override;
76 bool generateRootNode(const StructureNodeInfo &info) override;
77 void outputShapePath(const PathNodeInfo &info, const QPainterPath *path, const QQuadPath *quadPath, QQuickVectorImageGenerator::PathSelector pathSelector, const QRectF &boundingRect) override;
78
79private:
80 void generateGradient(const QGradient *grad);
81 void generateTransform(const QTransform &xf);
82 void generatePathContainer(const StructureNodeInfo &info);
83
84 QStringView indent();
85 enum StreamFlags { NoFlags = 0x0, SameLine = 0x1 };
86 QTextStream &stream(int flags = NoFlags);
87 const char *shapeName() const;
88
89private:
90 int m_indentLevel = 0;
91 QBuffer m_result;
92 QTextStream m_stream;
93 QString outputFileName;
94 bool m_inShapeItem = false;
95 QByteArray m_shapeTypeName;
96 QString m_commentString;
97 bool m_retainFilePaths = false;
98 QString m_assetFileDirectory;
99 QString m_assetFilePrefix;
100};
101
102QT_END_NAMESPACE
103
104#endif // QQUICKQMLGENERATOR_P_H
105

source code of qtdeclarative/src/quickvectorimage/generator/qquickqmlgenerator_p.h