forked from pool/libqt5-qtsvg
Qt 5.14.0 Beta 2 OBS-URL: https://build.opensuse.org/request/show/743230 OBS-URL: https://build.opensuse.org/package/show/KDE:Qt:5.14/libqt5-qtsvg?expand=0&rev=3
117 lines
4.6 KiB
Diff
117 lines
4.6 KiB
Diff
From df10b8b84ca1b94f7b0e493ca460d2ee7eeefdf7 Mon Sep 17 00:00:00 2001
|
|
From: Fabian Vogt <fvogt@suse.de>
|
|
Date: Thu, 24 Oct 2019 15:19:56 +0200
|
|
Subject: [PATCH] Revert "Fix rendering of SVGs with viewBoxes"
|
|
|
|
This reverts commit 14fa4591eb34a35cf3d485fd901e3f1e2caa7770.
|
|
---
|
|
src/svg/qsvgtinydocument.cpp | 38 +++++---------------
|
|
src/svg/qsvgtinydocument_p.h | 5 +--
|
|
tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp | 10 ------
|
|
3 files changed, 9 insertions(+), 44 deletions(-)
|
|
|
|
diff --git a/src/svg/qsvgtinydocument.cpp b/src/svg/qsvgtinydocument.cpp
|
|
index 3143ad2..b9e2d82 100644
|
|
--- a/src/svg/qsvgtinydocument.cpp
|
|
+++ b/src/svg/qsvgtinydocument.cpp
|
|
@@ -338,7 +338,6 @@ void QSvgTinyDocument::setHeight(int len, bool percent)
|
|
void QSvgTinyDocument::setViewBox(const QRectF &rect)
|
|
{
|
|
m_viewBox = rect;
|
|
- m_implicitViewBox = false;
|
|
}
|
|
|
|
void QSvgTinyDocument::addSvgFont(QSvgFont *font)
|
|
@@ -420,35 +419,14 @@ void QSvgTinyDocument::mapSourceToTarget(QPainter *p, const QRectF &targetRect,
|
|
source = viewBox();
|
|
|
|
if (source != target && !source.isNull()) {
|
|
- if (m_implicitViewBox) {
|
|
- QTransform transform;
|
|
- transform.scale(target.width() / source.width(),
|
|
- target.height() / source.height());
|
|
- QRectF c2 = transform.mapRect(source);
|
|
- p->translate(target.x() - c2.x(),
|
|
- target.y() - c2.y());
|
|
- p->scale(target.width() / source.width(),
|
|
- target.height() / source.height());
|
|
- } else {
|
|
- // Code path used when a view box is specified and we're not rendering a specific element by id
|
|
- // but the entire document. This attempts to emulate the default values of the <preserveAspectRatio>
|
|
- // tag that's implicitly defined when <viewbox> is used.
|
|
-
|
|
- // Apply the view box translation if specified.
|
|
- p->translate(target.x() - source.x(),
|
|
- target.y() - source.y());
|
|
-
|
|
- // Scale the view box into the view port (target) by preserve the aspect ratio.
|
|
- QSizeF viewBoxSize = source.size();
|
|
- viewBoxSize.scale(target.width(), target.height(), Qt::KeepAspectRatio);
|
|
-
|
|
- // Center the view box in the view port
|
|
- p->translate((target.width() - viewBoxSize.width()) / 2,
|
|
- (target.height() - viewBoxSize.height()) / 2);
|
|
-
|
|
- p->scale(viewBoxSize.width() / source.width(),
|
|
- viewBoxSize.height() / source.height());
|
|
- }
|
|
+ QTransform transform;
|
|
+ transform.scale(target.width() / source.width(),
|
|
+ target.height() / source.height());
|
|
+ QRectF c2 = transform.mapRect(source);
|
|
+ p->translate(target.x() - c2.x(),
|
|
+ target.y() - c2.y());
|
|
+ p->scale(target.width() / source.width(),
|
|
+ target.height() / source.height());
|
|
}
|
|
}
|
|
|
|
diff --git a/src/svg/qsvgtinydocument_p.h b/src/svg/qsvgtinydocument_p.h
|
|
index 404587d..4babb9f 100644
|
|
--- a/src/svg/qsvgtinydocument_p.h
|
|
+++ b/src/svg/qsvgtinydocument_p.h
|
|
@@ -125,7 +125,6 @@ private:
|
|
bool m_widthPercent;
|
|
bool m_heightPercent;
|
|
|
|
- mutable bool m_implicitViewBox = true;
|
|
mutable QRectF m_viewBox;
|
|
|
|
QHash<QString, QSvgRefCounter<QSvgFont> > m_fonts;
|
|
@@ -174,10 +173,8 @@ inline bool QSvgTinyDocument::heightPercent() const
|
|
|
|
inline QRectF QSvgTinyDocument::viewBox() const
|
|
{
|
|
- if (m_viewBox.isNull()) {
|
|
+ if (m_viewBox.isNull())
|
|
m_viewBox = transformedBounds();
|
|
- m_implicitViewBox = true;
|
|
- }
|
|
|
|
return m_viewBox;
|
|
}
|
|
diff --git a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
|
|
index cf19213..e0646f2 100644
|
|
--- a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
|
|
+++ b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
|
|
@@ -268,16 +268,6 @@ void tst_QSvgRenderer::testMapViewBoxToTarget()
|
|
QCOMPARE(picture.boundingRect(), QRect(125, 125, 250, 250));
|
|
}
|
|
|
|
- { // Viewport and viewBox specified -> scale 500x500 square to 1000x750 while preserving aspect ratio gives 750x750
|
|
- // however the box is centered at 375, 250
|
|
- data = "<svg width=\"1000\" height=\"750\" viewBox=\"-250 -250 500 500\"><g><rect x=\"0\" y=\"0\" width=\"500\" height=\"500\" /></g></svg>";
|
|
- QPicture picture;
|
|
- QPainter painter(&picture);
|
|
- QSvgRenderer rend(data);
|
|
- rend.render(&painter);
|
|
- painter.end();
|
|
- QCOMPARE(picture.boundingRect(), QRect(375, 250, 750, 750));
|
|
- }
|
|
}
|
|
|
|
void tst_QSvgRenderer::testRenderElement()
|
|
--
|
|
2.23.0
|
|
|