diff options
| author | Paul Olav Tvete <paul.tvete@qt.io> | 2023-11-23 13:00:42 +0100 |
|---|---|---|
| committer | Paul Olav Tvete <paul.tvete@qt.io> | 2024-01-23 11:23:22 +0000 |
| commit | bdebe5bc14cce7f3045d829ab7e83d42f5cb0144 (patch) | |
| tree | fa1b9947f8890969dec1a70a340fb19b3eda5132 /tools/svgtoqml/main.cpp | |
| parent | eb54a004799e39c8e06449c4851a988f273cd0db (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.cpp | 44 |
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; } |
