]> git.saurik.com Git - wxWidgets.git/blame - tests/graphics/affinematrix.cpp
Add various selection menu items to the sample.
[wxWidgets.git] / tests / graphics / affinematrix.cpp
CommitLineData
ab797d5d
VZ
1///////////////////////////////////////////////////////////////////////////////
2// Name: tests/graphics/affinetransform.cpp
3// Purpose: Unit test for transformations implemented for wxAffineMatrix2D
4// Author: Catalin Raceanu
5// Created: 2011-04-14
6// Copyright: (c) 2011 wxWidgets development team
7///////////////////////////////////////////////////////////////////////////////
8
9// ----------------------------------------------------------------------------
10// headers
11// ----------------------------------------------------------------------------
12
13#include "testprec.h"
14
15#ifdef __BORLANDC__
16 #pragma hdrstop
17#endif
18
19#include "wx/dcmemory.h"
20#include "wx/affinematrix2d.h"
21#include "wx/math.h"
22
23#include "testimage.h"
24
25// ----------------------------------------------------------------------------
26// test class
27// ----------------------------------------------------------------------------
28
29class AffineTransformTestCase : public CppUnit::TestCase
30{
31public:
32 AffineTransformTestCase()
33 {
34 wxImage::AddHandler(new wxJPEGHandler);
35 }
36
37 virtual void setUp();
38
39private:
40 CPPUNIT_TEST_SUITE( AffineTransformTestCase );
41 CPPUNIT_TEST( InvertMatrix );
09fa09bf 42#if wxUSE_DC_TRANSFORM_MATRIX
ab797d5d
VZ
43 CPPUNIT_TEST( VMirrorAndTranslate );
44 CPPUNIT_TEST( Rotate90Clockwise );
09fa09bf 45#endif // wxUSE_DC_TRANSFORM_MATRIX
ab797d5d
VZ
46 CPPUNIT_TEST_SUITE_END();
47
48 void InvertMatrix();
09fa09bf 49#if wxUSE_DC_TRANSFORM_MATRIX
ab797d5d
VZ
50 void VMirrorAndTranslate();
51 void Rotate90Clockwise();
52
53 wxImage m_imgOrig;
54 wxBitmap m_bmpOrig;
09fa09bf 55#endif // wxUSE_DC_TRANSFORM_MATRIX
ab797d5d
VZ
56
57 DECLARE_NO_COPY_CLASS(AffineTransformTestCase)
58};
59
60// register in the unnamed registry so that these tests are run by default
61CPPUNIT_TEST_SUITE_REGISTRATION( AffineTransformTestCase );
62
e3778b4d 63// also include in its own registry so that these tests can be run alone
ab797d5d
VZ
64CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( AffineTransformTestCase, "AffineTransformTestCase" );
65
66void AffineTransformTestCase::setUp()
67{
09fa09bf 68#if wxUSE_DC_TRANSFORM_MATRIX
ab797d5d
VZ
69 m_imgOrig.LoadFile("horse.jpg");
70
71 CPPUNIT_ASSERT( m_imgOrig.IsOk() );
72
73 m_bmpOrig = wxBitmap(m_imgOrig);
09fa09bf 74#endif // wxUSE_DC_TRANSFORM_MATRIX
ab797d5d
VZ
75}
76
77void AffineTransformTestCase::InvertMatrix()
78{
79 wxAffineMatrix2D matrix1;
80 matrix1.Set(wxMatrix2D(2, 1, 1, 1), wxPoint2DDouble(1, 1));
81
82 wxAffineMatrix2D matrix2(matrix1);
83
84 matrix2.Invert();
85
86 wxMatrix2D m;
87 wxPoint2DDouble p;
88 matrix2.Get(&m, &p);
89 CPPUNIT_ASSERT_EQUAL( 1, (int)m.m_11 );
90 CPPUNIT_ASSERT_EQUAL( -1, (int)m.m_12 );
91 CPPUNIT_ASSERT_EQUAL( -1, (int)m.m_21 );
92 CPPUNIT_ASSERT_EQUAL( 2, (int)m.m_22 );
93 CPPUNIT_ASSERT_EQUAL( 0, (int)p.m_x );
94 CPPUNIT_ASSERT_EQUAL( -1, (int)p.m_y );
95
96 matrix2.Concat(matrix1);
97 CPPUNIT_ASSERT( matrix2.IsIdentity() );
98}
99
09fa09bf
VZ
100#if wxUSE_DC_TRANSFORM_MATRIX
101
ab797d5d
VZ
102void AffineTransformTestCase::VMirrorAndTranslate()
103{
104 wxBitmap bmpUsingMatrix(m_bmpOrig.GetWidth(), m_bmpOrig.GetHeight());
105
106 // build the mirrored image using the transformation matrix
107 {
108 wxMemoryDC dc(bmpUsingMatrix);
109
110 if ( !dc.CanUseTransformMatrix() )
111 return;
112
113 wxAffineMatrix2D matrix;
114 matrix.Mirror(wxVERTICAL);
115 matrix.Translate(0, m_bmpOrig.GetHeight() - 1);
116 dc.SetTransformMatrix(matrix);
117 dc.DrawBitmap(m_bmpOrig, 0, 0);
118 }
119
48611b8f
VZ
120 CPPUNIT_ASSERT_EQUAL( bmpUsingMatrix.ConvertToImage(),
121 m_imgOrig.Mirror(false) );
ab797d5d
VZ
122}
123
124void AffineTransformTestCase::Rotate90Clockwise()
125{
126 wxBitmap bmpUsingMatrix(m_bmpOrig.GetHeight(), m_bmpOrig.GetWidth());
127
128 // build the rotated image using the transformation matrix
129 {
130 wxMemoryDC dc(bmpUsingMatrix);
131
132 if ( !dc.CanUseTransformMatrix() )
133 return;
134
135 wxAffineMatrix2D matrix;
136 matrix.Rotate(-0.5 * M_PI);
137 matrix.Translate(m_bmpOrig.GetHeight(), 0);
138 dc.SetTransformMatrix(matrix);
139 dc.DrawBitmap(m_bmpOrig, 0, 0);
140 }
141
48611b8f
VZ
142 CPPUNIT_ASSERT_EQUAL( bmpUsingMatrix.ConvertToImage(),
143 m_imgOrig.Rotate90(true) );
ab797d5d 144}
09fa09bf
VZ
145
146#endif // wxUSE_DC_TRANSFORM_MATRIX