Fix wxAffineMatrix2D::Translate() to multiply on the left.

The affine transform was previously multiplied by the translation matrix on
the right but this was incompatible with both the MSW version of the same
method and all the other methods of the generic version.

So multiply the transform by the translation on the left, as everywhere else.

Closes #13875.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70444 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-01-23 11:28:16 +00:00
parent 7fa7e46b26
commit 5c7fe47762
2 changed files with 7 additions and 4 deletions

View File

@@ -106,10 +106,13 @@ bool wxAffineMatrix2D::IsEqual(const wxAffineMatrix2DBase& t) const
// //
// add the translation to this matrix // add the translation to this matrix
// | 1 0 0 | | m_11 m_12 0 |
// | 0 1 0 | x | m_21 m_22 0 |
// | dx dy 1 | | m_tx m_ty 1 |
void wxAffineMatrix2D::Translate(wxDouble dx, wxDouble dy) void wxAffineMatrix2D::Translate(wxDouble dx, wxDouble dy)
{ {
m_tx += dx; m_tx += m_11 * dx + m_21 * dy;
m_ty += dy; m_ty += m_12 * dx + m_22 * dy;
} }
// add the scale to this matrix // add the scale to this matrix

View File

@@ -112,7 +112,7 @@ void AffineTransformTestCase::VMirrorAndTranslate()
wxAffineMatrix2D matrix; wxAffineMatrix2D matrix;
matrix.Mirror(wxVERTICAL); matrix.Mirror(wxVERTICAL);
matrix.Translate(0, m_bmpOrig.GetHeight() - 1); matrix.Translate(0, -m_bmpOrig.GetHeight() + 1);
dc.SetTransformMatrix(matrix); dc.SetTransformMatrix(matrix);
dc.DrawBitmap(m_bmpOrig, 0, 0); dc.DrawBitmap(m_bmpOrig, 0, 0);
} }
@@ -134,7 +134,7 @@ void AffineTransformTestCase::Rotate90Clockwise()
wxAffineMatrix2D matrix; wxAffineMatrix2D matrix;
matrix.Rotate(-0.5 * M_PI); matrix.Rotate(-0.5 * M_PI);
matrix.Translate(m_bmpOrig.GetHeight(), 0); matrix.Translate(0, -m_bmpOrig.GetHeight());
dc.SetTransformMatrix(matrix); dc.SetTransformMatrix(matrix);
dc.DrawBitmap(m_bmpOrig, 0, 0); dc.DrawBitmap(m_bmpOrig, 0, 0);
} }