summaryrefslogtreecommitdiff
path: root/dev-qt/qtsvg/files/qtsvg-5.14.0-revert-keep-aspectratio.patch
blob: 589492ca6bab79f0e80f7c108240d421b6fa5d48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
From 51694a5e293ae4eb7b83167e7cb54822907eb594 Mon Sep 17 00:00:00 2001
From: Eirik Aavitsland <eirik.aavitsland@qt.io>
Date: Thu, 9 Jan 2020 11:03:44 +0100
Subject: [PATCH] Revert the keep-aspectratio feature for 5.14.1

This was introduced as non-optional behavior for 5.14.0, but caused
many regressions. This patch reverts that, and instead prepares for
introducing it as an opt-in feature in Qt 5.15.

[ChangeLog][QSVGRenderer] In Qt 5.14.0, rendering would keep aspect
ratio implied by the viewbox, independently of the specified target
area. This caused many regressions with existing code, so is reverted
now in 5.14.1. The feature will instead be available as an opt-in in
Qt 5.15.

Task-number: QTBUG-81259
Change-Id: I3efa2db864eb80ee00e8a067e56d9912bab36442
---
 src/svg/qsvgtinydocument.cpp                 | 14 ++++++++------
 tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp |  3 +++
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/svg/qsvgtinydocument.cpp b/src/svg/qsvgtinydocument.cpp
index 56960bf..b364634 100644
--- a/src/svg/qsvgtinydocument.cpp
+++ b/src/svg/qsvgtinydocument.cpp
@@ -420,9 +420,10 @@ void QSvgTinyDocument::mapSourceToTarget(QPainter *p, const QRectF &targetRect,
         source = viewBox();
 
     if (source != target && !source.isNull()) {
-        if (m_implicitViewBox || !sourceRect.isNull()) {
-            // Code path used when no view box is set, or when an explicit source size is given which
-            // overrides it (which is the case when we're rendering only a specific element by id).
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
+        if (m_implicitViewBox || !preserveAspectRatio()) {
+            // Code path used when no view box is set, or IgnoreAspectRatio requested
+#endif
             QTransform transform;
             transform.scale(target.width() / source.width(),
                             target.height() / source.height());
@@ -431,10 +432,10 @@ void QSvgTinyDocument::mapSourceToTarget(QPainter *p, const QRectF &targetRect,
                          target.y() - c2.y());
             p->scale(target.width() / source.width(),
                      target.height() / source.height());
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
         } 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.
+            // Code path used when KeepAspectRatio is requested. This attempts to emulate the default values
+            // of the <preserveAspectRatio tag that's implicitly defined when <viewbox> is used.
 
             // Scale the view box into the view port (target) by preserve the aspect ratio.
             QSizeF viewBoxSize = source.size();
@@ -451,6 +452,7 @@ void QSvgTinyDocument::mapSourceToTarget(QPainter *p, const QRectF &targetRect,
             p->translate(target.x() - source.x(),
                          target.y() - source.y());
         }
+#endif
     }
 }
 
diff --git a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
index 309c646..43a3eb8 100644
--- a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
+++ b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
@@ -269,6 +269,8 @@ void tst_QSvgRenderer::testMapViewBoxToTarget()
         QCOMPARE(picture.boundingRect(), QRect(125, 125, 250, 250));
     }
 
+#if 0
+    // Requires keep-aspectratio feature
     { // Viewport and viewBox specified -> scale 500x500 square to 1000x750 while preserving aspect ratio gives 750x750
         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;
@@ -278,6 +280,7 @@ void tst_QSvgRenderer::testMapViewBoxToTarget()
         painter.end();
         QCOMPARE(picture.boundingRect(), QRect(500, 375, 750, 750));
     }
+#endif
 }
 
 void tst_QSvgRenderer::testRenderElement()
-- 
2.25.0