diff options
Diffstat (limited to 'tests/manual/svg/svgmanager.cpp')
-rw-r--r-- | tests/manual/svg/svgmanager.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/tests/manual/svg/svgmanager.cpp b/tests/manual/svg/svgmanager.cpp new file mode 100644 index 0000000000..b8d49413a5 --- /dev/null +++ b/tests/manual/svg/svgmanager.cpp @@ -0,0 +1,96 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "svgmanager.h" + +#include <QDir> +#include <QtQuickVectorImageGenerator/private/qquickqmlgenerator_p.h> +#include <QTemporaryFile> + +SvgManager *SvgManager::g_manager = nullptr; + +SvgManager::SvgManager(QObject *parent) + : QObject(parent) +{ + Q_ASSERT(g_manager == nullptr); + g_manager = this; + connect(this, &SvgManager::currentIndexChanged, this, &SvgManager::currentSourceChanged, Qt::QueuedConnection); +} + +SvgManager::~SvgManager() +{ + Q_ASSERT(g_manager == this); + g_manager = nullptr; +} + +void SvgManager::setCurrentIndex(int newCurrentIndex) +{ + if (m_currentIndex == newCurrentIndex) + return; + m_currentIndex = newCurrentIndex; + emit currentIndexChanged(); +} + +QList<QUrl> SvgManager::sources() const +{ + return m_sources; +} + +QString SvgManager::currentDirectory() const +{ + return m_currentDirectory; +} + +void SvgManager::setCurrentDirectory(const QString &newCurrentDirectory) +{ + if (m_currentDirectory == newCurrentDirectory) + return; + m_currentDirectory = newCurrentDirectory; + emit currentDirectoryChanged(); + + m_sources.clear(); + if (!m_currentDirectory.isEmpty()) { + QDir dir(m_currentDirectory); + QList<QFileInfo> infos = dir.entryInfoList(QStringList() << QStringLiteral("*.svg")); + + for (const QFileInfo &info : infos) + m_sources.append(QUrl::fromLocalFile(info.absoluteFilePath())); + } + m_currentIndex = m_sources.isEmpty() ? -1 : 0; + emit sourcesChanged(); + emit currentIndexChanged(); +} + +QString SvgManager::qmlSource() const +{ + QTemporaryFile tempFile; + if (tempFile.open()) { + QString name = tempFile.fileName(); + { + QQuickQmlGenerator generator(currentSource().toLocalFile(), QQuickVectorImageGenerator::CurveRenderer, tempFile.fileName()); + generator.setCommentString(QStringLiteral("Generated")); + generator.generate(); + } + tempFile.close(); + + QFile file(name); + if (file.open(QIODevice::ReadOnly)) + return QString::fromUtf8(file.readAll()); + + } + + return QStringLiteral("import QtQuick\nRectangle { width: 100; height: 100; color: \"red\" }");; +} + +qreal SvgManager::scale() const +{ + return m_scale; +} + +void SvgManager::setScale(int newScale) +{ + if (qFuzzyCompare(m_scale, newScale)) + return; + m_scale = newScale; + emit scaleChanged(); +} |