summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederik Christiani <frederik@vikingsoftware.com>2018-04-26 12:57:19 +0200
committerFrederik Juul Christiani <frederik@vikingsoftware.com>2018-04-30 10:37:22 +0000
commit0279e65c25b22066d15752267a6b5d1ba660e7d9 (patch)
tree1518b50abadb260a7d1fb2110e68248b678f16ad
parent1fd6226d52b8d3d201b117902ff1ecd84cc1a1e5 (diff)
downloadqtsvg-0279e65c25b22066d15752267a6b5d1ba660e7d9.tar.gz
Interpret width or height specified in percent as relative to viewport
When width or height is specified in percent, it is supposed to be relative to the viewport. https://www.w3.org/TR/SVG/coords.html#Units Task-number: QTBUG-2279 Change-Id: Ia1597b88d4e1c705a6755db788a18cf790d5ee97 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
-rw-r--r--src/svg/qsvgtinydocument_p.h9
-rw-r--r--tests/auto/qicon_svg/icons/rect_size_100percent.svg5
-rw-r--r--tests/auto/qicon_svg/tst_qicon_svg.cpp12
-rw-r--r--tests/auto/qicon_svg/tst_qicon_svg.qrc1
4 files changed, 24 insertions, 3 deletions
diff --git a/src/svg/qsvgtinydocument_p.h b/src/svg/qsvgtinydocument_p.h
index c69c5de..aa51751 100644
--- a/src/svg/qsvgtinydocument_p.h
+++ b/src/svg/qsvgtinydocument_p.h
@@ -141,11 +141,14 @@ private:
inline QSize QSvgTinyDocument::size() const
{
- if (m_size.isEmpty()) {
+ if (m_size.isEmpty())
return viewBox().size().toSize();
- } else {
- return m_size;
+ if (m_widthPercent || m_heightPercent) {
+ const int width = m_widthPercent ? qRound(0.01 * m_size.width() * viewBox().size().width()) : m_size.width();
+ const int height = m_heightPercent ? qRound(0.01 * m_size.height() * viewBox().size().height()) : m_size.height();
+ return QSize(width, height);
}
+ return m_size;
}
inline int QSvgTinyDocument::width() const
diff --git a/tests/auto/qicon_svg/icons/rect_size_100percent.svg b/tests/auto/qicon_svg/icons/rect_size_100percent.svg
new file mode 100644
index 0000000..84dece7
--- /dev/null
+++ b/tests/auto/qicon_svg/icons/rect_size_100percent.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 16 8">
+ <circle cx="8" cy="4" r="3" fill="#00ff00" />
+</svg>
diff --git a/tests/auto/qicon_svg/tst_qicon_svg.cpp b/tests/auto/qicon_svg/tst_qicon_svg.cpp
index 0875ee1..6eea018 100644
--- a/tests/auto/qicon_svg/tst_qicon_svg.cpp
+++ b/tests/auto/qicon_svg/tst_qicon_svg.cpp
@@ -44,6 +44,7 @@ private slots:
void svg();
void availableSizes();
void isNull();
+ void sizeInPercent();
private:
@@ -172,5 +173,16 @@ void tst_QIcon_Svg::isNull()
}
+void tst_QIcon_Svg::sizeInPercent()
+{
+ QIcon icon(prefix + "rect_size_100percent.svg");
+ QCOMPARE(icon.actualSize(QSize(16, 8)), QSize(16, 8));
+ QCOMPARE(icon.pixmap(QSize(16, 8)).size(), QSize(16, 8));
+
+ QCOMPARE(icon.actualSize(QSize(8, 8)), QSize(8, 4));
+ QCOMPARE(icon.pixmap(QSize(8, 8)).size(), QSize(8, 4));
+}
+
+
QTEST_MAIN(tst_QIcon_Svg)
#include "tst_qicon_svg.moc"
diff --git a/tests/auto/qicon_svg/tst_qicon_svg.qrc b/tests/auto/qicon_svg/tst_qicon_svg.qrc
index fd9422b..302b40b 100644
--- a/tests/auto/qicon_svg/tst_qicon_svg.qrc
+++ b/tests/auto/qicon_svg/tst_qicon_svg.qrc
@@ -5,5 +5,6 @@
<file>./icons/image.png</file>
<file>./icons/rect.svg</file>
<file>./icons/trash.svg</file>
+<file>./icons/rect_size_100percent.svg</file>
</qresource>
</RCC>