aboutsummaryrefslogtreecommitdiffstats
path: root/tools/svgtoqml/main.cpp
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@qt.io>2023-11-23 13:00:42 +0100
committerPaul Olav Tvete <paul.tvete@qt.io>2024-01-23 11:23:22 +0000
commitbdebe5bc14cce7f3045d829ab7e83d42f5cb0144 (patch)
treefa1b9947f8890969dec1a70a340fb19b3eda5132 /tools/svgtoqml/main.cpp
parenteb54a004799e39c8e06449c4851a988f273cd0db (diff)
Preprocess paths in svgtoqml
Add --optimize-paths option to do expensive path manipulation at build time instead of at runtime. This may cause the generation of separate fill and stroke versions of the same source path. Task-number: QTBUG-116883 Task-number: QTBUG-121203 Pick-to: 6.7 Change-Id: Iacda16d8dbddf5b8219c290fac473d78c073576e Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'tools/svgtoqml/main.cpp')
-rw-r--r--tools/svgtoqml/main.cpp44
1 files changed, 26 insertions, 18 deletions
diff --git a/tools/svgtoqml/main.cpp b/tools/svgtoqml/main.cpp
index bedf703373..816f4808c0 100644
--- a/tools/svgtoqml/main.cpp
+++ b/tools/svgtoqml/main.cpp
@@ -28,24 +28,22 @@ int main(int argc, char *argv[])
parser.addPositionalArgument("input", QCoreApplication::translate("main", "SVG file to read."));
parser.addPositionalArgument("output", QCoreApplication::translate("main", "QML file to write."));
-#if 0
- QCommandLineOption separateOption(QStringList() << "s" << "separate-items",
- QCoreApplication::translate("main", "Generate separate items for all sub-shapes."));
- parser.addOption(separateOption);
-
- QCommandLineOption combineOption(QStringList() << "c" << "combine-shapes",
- QCoreApplication::translate("main", "Combine all sub-shapes into one item."));
- parser.addOption(combineOption);
-#endif
+ QCommandLineOption optimizeOption("optimize-paths",
+ QCoreApplication::translate("main", "Optimize paths for the curve renderer."));
+ parser.addOption(optimizeOption);
+
+ QCommandLineOption curveRendererOption("curve-renderer",
+ QCoreApplication::translate("main", "Use the curve renderer in generated QML."));
+ parser.addOption(curveRendererOption);
+
QCommandLineOption typeNameOption(QStringList() << "t" << "type-name",
QCoreApplication::translate("main", "Use <typename> for Shape."),
QCoreApplication::translate("main", "typename"));
parser.addOption(typeNameOption);
-
#ifdef ENABLE_GUI
QCommandLineOption guiOption(QStringList() << "v" << "view",
- QCoreApplication::translate("main", "Display the SVG in a window."));
+ QCoreApplication::translate("main", "Display the SVG in a window."));
parser.addOption(guiOption);
#endif
parser.process(app);
@@ -54,14 +52,24 @@ int main(int argc, char *argv[])
parser.showHelp(1);
}
- auto *doc = QSvgTinyDocument::load(args.at(0));
+ const QString inFileName = args.at(0);
+
+ auto *doc = QSvgTinyDocument::load(inFileName);
if (!doc) {
- fprintf(stderr, "%s is not a valid SVG\n", qPrintable(args.at(0)));
+ fprintf(stderr, "%s is not a valid SVG\n", qPrintable(inFileName));
return 2;
}
- auto outFileName = args.size() > 1 ? args.at(1) : QString{};
- auto typeName = parser.value(typeNameOption);
+ const QString commentString = QLatin1String("Generated from SVG file %1").arg(inFileName);
+
+ const auto outFileName = args.size() > 1 ? args.at(1) : QString{};
+ const auto typeName = parser.value(typeNameOption);
+
+ QSvgQmlWriter::GeneratorFlags flags;
+ if (parser.isSet(curveRendererOption))
+ flags |= QSvgQmlWriter::CurveRenderer;
+ if (parser.isSet(optimizeOption))
+ flags |= QSvgQmlWriter::OptimizePaths;
#ifdef ENABLE_GUI
if (parser.isSet(guiOption)) {
@@ -69,12 +77,12 @@ int main(int argc, char *argv[])
const QUrl url(QStringLiteral("qrc:/main.qml"));
QQmlApplicationEngine engine;
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
- &app, [url, outFileName, doc, typeName](QObject *obj, const QUrl &objUrl){
+ &app, [&](QObject *obj, const QUrl &objUrl){
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
if (obj) {
auto *containerItem = obj->findChild<QQuickItem*>(QStringLiteral("svg_item"));
- auto *contents = QSvgQmlWriter::loadSVG(doc, outFileName, typeName, containerItem);
+ auto *contents = QSvgQmlWriter::loadSVG(doc, outFileName, flags, typeName, containerItem, commentString);
contents->setWidth(containerItem->implicitWidth()); // Workaround for runtime loader viewbox size logic. TODO: fix
contents->setHeight(containerItem->implicitHeight());
}
@@ -84,6 +92,6 @@ int main(int argc, char *argv[])
}
#endif
- QSvgQmlWriter::loadSVG(doc, outFileName, typeName, nullptr);
+ QSvgQmlWriter::loadSVG(doc, outFileName, flags, typeName, nullptr, commentString);
return 0;
}