diff options
author | Hatem ElKharashy <hatem.elkharashy@qt.io> | 2024-03-26 11:35:23 +0200 |
---|---|---|
committer | Hatem ElKharashy <hatem.elkharashy@qt.io> | 2024-03-28 19:26:17 +0000 |
commit | 25ea0e26e8781ad02d6a9752964075ed8bf43052 (patch) | |
tree | 55a699772462378377e20fd60036a3bbf6789393 /tests/manual | |
parent | 12493163e8e746c52aa1580a9e413bc38cf7a4be (diff) |
tests: tweak svg manual test
Make the QSvgRenderer, and svgtoqml scalable. Without scaling, it is
hard to compare SVG files that have small size. Previously, only the
VectorImage widget was scalable. Moreover, add the current scale slider
value to the settings so that it can be retrieved the next time the
application is used.
Change-Id: I79dacd37e02b268ad8d2aadb71cc7d9d86e9b35a
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Diffstat (limited to 'tests/manual')
-rw-r--r-- | tests/manual/svg/QmlGenerator.qml | 6 | ||||
-rw-r--r-- | tests/manual/svg/mainwindow.cpp | 9 | ||||
-rw-r--r-- | tests/manual/svg/mainwindow.h | 1 | ||||
-rw-r--r-- | tests/manual/svg/svgpainter.cpp | 34 | ||||
-rw-r--r-- | tests/manual/svg/svgpainter.h | 11 |
5 files changed, 51 insertions, 10 deletions
diff --git a/tests/manual/svg/QmlGenerator.qml b/tests/manual/svg/QmlGenerator.qml index b9db2a44c2..96435ba4f0 100644 --- a/tests/manual/svg/QmlGenerator.qml +++ b/tests/manual/svg/QmlGenerator.qml @@ -6,8 +6,10 @@ import SvgImageTest Item { id: item - width: childrenRect.width - height: childrenRect.height + width: childrenRect.width * (SvgManager.scale / 10.0) + height: childrenRect.height * (SvgManager.scale / 10.0) + scale: SvgManager.scale / 10 + transformOrigin: Item.TopLeft property var dynamicObject: null Connections { diff --git a/tests/manual/svg/mainwindow.cpp b/tests/manual/svg/mainwindow.cpp index 9e41b9a89c..403202514b 100644 --- a/tests/manual/svg/mainwindow.cpp +++ b/tests/manual/svg/mainwindow.cpp @@ -54,6 +54,10 @@ MainWindow::MainWindow(QWidget *parent) setDirList(list); connect(ui->hsScale, &QAbstractSlider::valueChanged, m_manager, &SvgManager::setScale); + connect(ui->hsScale, &QAbstractSlider::valueChanged, m_svgPainter, &SvgPainter::setScale); + connect(ui->hsScale, &QAbstractSlider::valueChanged, this, &MainWindow::setScale); + int scale = m_settings->value(QStringLiteral("scale"), 10).toInt(); + ui->hsScale->setValue(scale); } void MainWindow::loadDirectory(const QString &newDir) @@ -70,6 +74,11 @@ void MainWindow::setDirList(const QStringList &list) m_settings->setValue(QStringLiteral("directories"), list.join(QLatin1Char(','))); } +void MainWindow::setScale(const int scale) +{ + m_settings->setValue(QStringLiteral("scale"), scale); +} + void MainWindow::updateCurrentDir(const QString &s) { QStringList list; diff --git a/tests/manual/svg/mainwindow.h b/tests/manual/svg/mainwindow.h index 2decd13ae3..81e4bea113 100644 --- a/tests/manual/svg/mainwindow.h +++ b/tests/manual/svg/mainwindow.h @@ -34,6 +34,7 @@ private slots: private: void updateCurrentDir(const QString &newDir); void setDirList(const QStringList &list); + void setScale(const int scale); Ui::MainWindow *ui; SvgManager *m_manager = nullptr; diff --git a/tests/manual/svg/svgpainter.cpp b/tests/manual/svg/svgpainter.cpp index 1e73a28e85..e040c1d087 100644 --- a/tests/manual/svg/svgpainter.cpp +++ b/tests/manual/svg/svgpainter.cpp @@ -12,12 +12,13 @@ SvgPainter::SvgPainter(QWidget *parent) #else : QWidget{parent} #endif + , m_scale(10) { #ifndef SVGWIDGET connect(this, SIGNAL(sourceChanged()), this, SLOT(update())); #endif - setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); + connect(this, SIGNAL(scaleChanged()), this, SLOT(update())); } QUrl SvgPainter::source() const @@ -36,14 +37,30 @@ void SvgPainter::setSource(const QUrl &newSource) emit sourceChanged(); } +qreal SvgPainter::scale() const +{ + return m_scale; +} + +void SvgPainter::setScale(const qreal scale) +{ + if (m_scale == scale) + return; + m_scale = scale; + emit scaleChanged(); +} + #ifndef SVGWIDGET QSize SvgPainter::sizeHint() const { - return !m_source.isEmpty() ? m_size : QSize(1, 1); + return !m_source.isEmpty() ? m_size * m_scale / 10.0 : QSize(1, 1); } +#endif -void SvgPainter::paintEvent(QPaintEvent *) +void SvgPainter::paintEvent(QPaintEvent *event) { +#ifndef SVGWIDGET + Q_UNUSED(event) if (!m_source.isEmpty()) { QPainter p(this); p.fillRect(rect(), Qt::white); @@ -52,8 +69,13 @@ void SvgPainter::paintEvent(QPaintEvent *) renderer.setAspectRatioMode(Qt::KeepAspectRatio); renderer.render(&p); m_size = renderer.defaultSize(); - setMaximumSize(m_size); - setMinimumSize(m_size); + setFixedSize(m_size * m_scale / 10.0); } -} +#else + m_size = renderer()->defaultSize(); + setFixedSize(m_size * m_scale / 10.0); + QSvgWidget::paintEvent(event); #endif + +} + diff --git a/tests/manual/svg/svgpainter.h b/tests/manual/svg/svgpainter.h index 07af46f173..5e8a641bd7 100644 --- a/tests/manual/svg/svgpainter.h +++ b/tests/manual/svg/svgpainter.h @@ -18,25 +18,32 @@ class SvgPainter : public QWidget { Q_OBJECT Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged) + Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged) public: explicit SvgPainter(QWidget *parent = nullptr); QUrl source() const; void setSource(const QUrl &newSource); + qreal scale() const; + void setScale(const qreal scale); signals: void sourceChanged(); + void scaleChanged(); + -#ifndef SVGWIDGET protected: +#ifndef SVGWIDGET QSize sizeHint() const override; - void paintEvent(QPaintEvent *) override; #endif + void paintEvent(QPaintEvent *) override; + private: QUrl m_source; QSize m_size; + qreal m_scale; }; #endif // SVGPAINTER_H |