diff options
author | Shawn Rutledge <[email protected]> | 2024-12-28 10:57:04 +0100 |
---|---|---|
committer | Shawn Rutledge <[email protected]> | 2025-01-02 20:39:06 +0100 |
commit | 48b1af941c50ab28cc92f9ea65a8a74a32eaf2bc (patch) | |
tree | 0b36724b11b28b5bc2d9fc28bb1ead787b6f8a47 | |
parent | dcd057a31b54de637a5ca8bb8a5d46e753d3066a (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.cpp | 2 | ||||
-rw-r--r-- | tests/auto/gui/painting/qtransform/tst_qtransform.cpp | 9 |
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) |