summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Rutledge <[email protected]>2024-12-28 10:57:04 +0100
committerShawn Rutledge <[email protected]>2025-01-02 20:39:06 +0100
commit48b1af941c50ab28cc92f9ea65a8a74a32eaf2bc (patch)
tree0b36724b11b28b5bc2d9fc28bb1ead787b6f8a47
parentdcd057a31b54de637a5ca8bb8a5d46e753d3066a (diff)
Fix QTransform::quadToQuad() to work with QRectF
A typical usage for mapping a 4-point polygon to a rectangle might be QTransform transform; bool ok = QTransform::quadToQuad(polygon, polygon->boundingRect(), transform); It works because the QPolygonF(QRectF) ctor is implicitly called on the second argument; but that ctor turns it into a 5-point polygon. So it should be legal for QTransform functions to work with 5-point closed paths. Fixes: QTBUG-21329 Change-Id: Iae249012e14b8a3e8d3b0dfa35da8f9759359832 Pick-to: 5.15 6.5 6.8 6.9 Reviewed-by: Eirik Aavitsland <[email protected]>
-rw-r--r--src/gui/painting/qtransform.cpp2
-rw-r--r--tests/auto/gui/painting/qtransform/tst_qtransform.cpp9
2 files changed, 10 insertions, 1 deletions
diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp
index c0e2bf6e2fe..768e92a15bf 100644
--- a/src/gui/painting/qtransform.cpp
+++ b/src/gui/painting/qtransform.cpp
@@ -1609,7 +1609,7 @@ QPolygon QTransform::mapToPolygon(const QRect &rect) const
*/
bool QTransform::squareToQuad(const QPolygonF &quad, QTransform &trans)
{
- if (quad.size() != 4)
+ if (quad.size() != (quad.isClosed() ? 5 : 4))
return false;
qreal dx0 = quad[0].x();
diff --git a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp b/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
index 9da3cb568dd..73b66775cea 100644
--- a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
+++ b/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
@@ -35,6 +35,7 @@ private slots:
void mapInt();
void mapPathWithPoint();
void mapRectToPolygon(); // QTBUG-127723
+ void quadToQuad(); // QTBUG-21329
private:
void mapping_data();
@@ -714,6 +715,14 @@ void tst_QTransform::mapRectToPolygon()
QCOMPARE(polygon1, polygon2);
}
+void tst_QTransform::quadToQuad() // QTBUG-21329
+{
+ QTransform result;
+ QVERIFY(QTransform::quadToQuad(QRectF(0, 0, 1, 1), QRectF(0, 0, 1, 1), result));
+ QPolygonF trapezoid({{0, 0}, {10, 0}, {11, 11}, {0, 10}});
+ QVERIFY(QTransform::quadToQuad(trapezoid, trapezoid.boundingRect(), result));
+}
+
QTEST_APPLESS_MAIN(tst_QTransform)