diff options
author | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2020-10-28 16:31:44 +0100 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2020-11-16 08:39:32 +0100 |
commit | 30151e20b88c7c93090e1d2a408542d945acff5b (patch) | |
tree | af16b7104e62c0f4ace1547ce27520c9473d6002 | |
parent | 82121b2fbf80fc39d8a7bab9e8e9a8c545f1ffd3 (diff) |
Fix misidentification of some shearing QTransforms as only rotating
The dot product used rows instead of columns.
Fixes: QTBUG-87984
Change-Id: I922f67ed0fa9a4f88aa4e9fc6d3c09f8dda21688
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
(cherry picked from commit 7aa68ee6f2e08ce0b4f5c698a8c012895f738dd2)
-rw-r--r-- | src/gui/painting/qtransform.cpp | 2 | ||||
-rw-r--r-- | tests/auto/gui/painting/qtransform/tst_qtransform.cpp | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp index 9d8bb0c3e2..0952bd22fb 100644 --- a/src/gui/painting/qtransform.cpp +++ b/src/gui/painting/qtransform.cpp @@ -2126,7 +2126,7 @@ QTransform::TransformationType QTransform::type() const case TxShear: case TxRotate: if (!qFuzzyIsNull(affine._m12) || !qFuzzyIsNull(affine._m21)) { - const qreal dot = affine._m11 * affine._m12 + affine._m21 * affine._m22; + const qreal dot = affine._m11 * affine._m21 + affine._m12 * affine._m22; if (qFuzzyIsNull(dot)) m_type = TxRotate; else diff --git a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp b/tests/auto/gui/painting/qtransform/tst_qtransform.cpp index f31e2bf41b..48e4f4c9c0 100644 --- a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp +++ b/tests/auto/gui/painting/qtransform/tst_qtransform.cpp @@ -447,8 +447,9 @@ void tst_QTransform::types() QCOMPARE(m1.inverted().type(), QTransform::TxScale); m1.rotate(45.0f); - QCOMPARE(m1.type(), QTransform::TxRotate); - QCOMPARE(m1.inverted().type(), QTransform::TxRotate); + // Rotation after non-uniform scaling -> shearing. Uniform scale + rotate tested below. + QCOMPARE(m1.type(), QTransform::TxShear); + QCOMPARE(m1.inverted().type(), QTransform::TxShear); m1.shear(0.5f, 0.25f); QCOMPARE(m1.type(), QTransform::TxShear); |