Add a unit test for wxAffineMatrix2D class and its support in wxDC.
Verify that applying a world transformation to wxDC really does result in the expected transformation. See #13092. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67617 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -155,6 +155,7 @@ TEST_GUI_OBJECTS = \
|
||||
test_gui_colour.o \
|
||||
test_gui_ellipsization.o \
|
||||
test_gui_measuring.o \
|
||||
test_gui_affinematrix.o \
|
||||
test_gui_config.o \
|
||||
test_gui_bitmapcomboboxtest.o \
|
||||
test_gui_bitmaptogglebuttontest.o \
|
||||
@@ -696,6 +697,9 @@ test_gui_ellipsization.o: $(srcdir)/graphics/ellipsization.cpp $(TEST_GUI_ODEP)
|
||||
test_gui_measuring.o: $(srcdir)/graphics/measuring.cpp $(TEST_GUI_ODEP)
|
||||
$(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/measuring.cpp
|
||||
|
||||
test_gui_affinematrix.o: $(srcdir)/graphics/affinematrix.cpp $(TEST_GUI_ODEP)
|
||||
$(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/affinematrix.cpp
|
||||
|
||||
test_gui_config.o: $(srcdir)/config/config.cpp $(TEST_GUI_ODEP)
|
||||
$(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/config/config.cpp
|
||||
|
||||
|
140
tests/graphics/affinematrix.cpp
Normal file
140
tests/graphics/affinematrix.cpp
Normal file
@@ -0,0 +1,140 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: tests/graphics/affinetransform.cpp
|
||||
// Purpose: Unit test for transformations implemented for wxAffineMatrix2D
|
||||
// Author: Catalin Raceanu
|
||||
// Created: 2011-04-14
|
||||
// Copyright: (c) 2011 wxWidgets development team
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// headers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#include "testprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#include "wx/dcmemory.h"
|
||||
#include "wx/affinematrix2d.h"
|
||||
#include "wx/math.h"
|
||||
|
||||
#include "testimage.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// test class
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class AffineTransformTestCase : public CppUnit::TestCase
|
||||
{
|
||||
public:
|
||||
AffineTransformTestCase()
|
||||
{
|
||||
wxImage::AddHandler(new wxJPEGHandler);
|
||||
}
|
||||
|
||||
virtual void setUp();
|
||||
|
||||
private:
|
||||
CPPUNIT_TEST_SUITE( AffineTransformTestCase );
|
||||
CPPUNIT_TEST( InvertMatrix );
|
||||
CPPUNIT_TEST( VMirrorAndTranslate );
|
||||
CPPUNIT_TEST( Rotate90Clockwise );
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
void InvertMatrix();
|
||||
void VMirrorAndTranslate();
|
||||
void Rotate90Clockwise();
|
||||
|
||||
wxImage m_imgOrig;
|
||||
wxBitmap m_bmpOrig;
|
||||
|
||||
DECLARE_NO_COPY_CLASS(AffineTransformTestCase)
|
||||
};
|
||||
|
||||
// register in the unnamed registry so that these tests are run by default
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION( AffineTransformTestCase );
|
||||
|
||||
// also include in it's own registry so that these tests can be run alone
|
||||
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( AffineTransformTestCase, "AffineTransformTestCase" );
|
||||
|
||||
void AffineTransformTestCase::setUp()
|
||||
{
|
||||
m_imgOrig.LoadFile("horse.jpg");
|
||||
|
||||
CPPUNIT_ASSERT( m_imgOrig.IsOk() );
|
||||
|
||||
m_bmpOrig = wxBitmap(m_imgOrig);
|
||||
}
|
||||
|
||||
void AffineTransformTestCase::InvertMatrix()
|
||||
{
|
||||
wxAffineMatrix2D matrix1;
|
||||
matrix1.Set(wxMatrix2D(2, 1, 1, 1), wxPoint2DDouble(1, 1));
|
||||
|
||||
wxAffineMatrix2D matrix2(matrix1);
|
||||
|
||||
matrix2.Invert();
|
||||
|
||||
wxMatrix2D m;
|
||||
wxPoint2DDouble p;
|
||||
matrix2.Get(&m, &p);
|
||||
CPPUNIT_ASSERT_EQUAL( 1, (int)m.m_11 );
|
||||
CPPUNIT_ASSERT_EQUAL( -1, (int)m.m_12 );
|
||||
CPPUNIT_ASSERT_EQUAL( -1, (int)m.m_21 );
|
||||
CPPUNIT_ASSERT_EQUAL( 2, (int)m.m_22 );
|
||||
CPPUNIT_ASSERT_EQUAL( 0, (int)p.m_x );
|
||||
CPPUNIT_ASSERT_EQUAL( -1, (int)p.m_y );
|
||||
|
||||
matrix2.Concat(matrix1);
|
||||
CPPUNIT_ASSERT( matrix2.IsIdentity() );
|
||||
}
|
||||
|
||||
void AffineTransformTestCase::VMirrorAndTranslate()
|
||||
{
|
||||
wxBitmap bmpUsingMatrix(m_bmpOrig.GetWidth(), m_bmpOrig.GetHeight());
|
||||
|
||||
// build the mirrored image using the transformation matrix
|
||||
{
|
||||
wxMemoryDC dc(bmpUsingMatrix);
|
||||
|
||||
if ( !dc.CanUseTransformMatrix() )
|
||||
return;
|
||||
|
||||
wxAffineMatrix2D matrix;
|
||||
matrix.Mirror(wxVERTICAL);
|
||||
matrix.Translate(0, m_bmpOrig.GetHeight() - 1);
|
||||
dc.SetTransformMatrix(matrix);
|
||||
dc.DrawBitmap(m_bmpOrig, 0, 0);
|
||||
}
|
||||
|
||||
wxImage imgUsingMatrix = bmpUsingMatrix.ConvertToImage();
|
||||
wxImage imgOrigVMirrored = m_imgOrig.Mirror(false);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL( imgUsingMatrix, imgOrigVMirrored );
|
||||
}
|
||||
|
||||
void AffineTransformTestCase::Rotate90Clockwise()
|
||||
{
|
||||
wxBitmap bmpUsingMatrix(m_bmpOrig.GetHeight(), m_bmpOrig.GetWidth());
|
||||
|
||||
// build the rotated image using the transformation matrix
|
||||
{
|
||||
wxMemoryDC dc(bmpUsingMatrix);
|
||||
|
||||
if ( !dc.CanUseTransformMatrix() )
|
||||
return;
|
||||
|
||||
wxAffineMatrix2D matrix;
|
||||
matrix.Rotate(-0.5 * M_PI);
|
||||
matrix.Translate(m_bmpOrig.GetHeight(), 0);
|
||||
dc.SetTransformMatrix(matrix);
|
||||
dc.DrawBitmap(m_bmpOrig, 0, 0);
|
||||
}
|
||||
|
||||
wxImage imgUsingMatrix = bmpUsingMatrix.ConvertToImage();
|
||||
wxImage imgOrigRotate90Clockwise = m_imgOrig.Rotate90(true);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL( imgUsingMatrix, imgOrigRotate90Clockwise );
|
||||
}
|
@@ -140,6 +140,7 @@ TEST_GUI_OBJECTS = \
|
||||
$(OBJS)\test_gui_colour.obj \
|
||||
$(OBJS)\test_gui_ellipsization.obj \
|
||||
$(OBJS)\test_gui_measuring.obj \
|
||||
$(OBJS)\test_gui_affinematrix.obj \
|
||||
$(OBJS)\test_gui_config.obj \
|
||||
$(OBJS)\test_gui_bitmapcomboboxtest.obj \
|
||||
$(OBJS)\test_gui_bitmaptogglebuttontest.obj \
|
||||
@@ -744,6 +745,9 @@ $(OBJS)\test_gui_ellipsization.obj: .\graphics\ellipsization.cpp
|
||||
$(OBJS)\test_gui_measuring.obj: .\graphics\measuring.cpp
|
||||
$(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\measuring.cpp
|
||||
|
||||
$(OBJS)\test_gui_affinematrix.obj: .\graphics\affinematrix.cpp
|
||||
$(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\graphics\affinematrix.cpp
|
||||
|
||||
$(OBJS)\test_gui_config.obj: .\config\config.cpp
|
||||
$(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\config\config.cpp
|
||||
|
||||
|
@@ -133,6 +133,7 @@ TEST_GUI_OBJECTS = \
|
||||
$(OBJS)\test_gui_colour.o \
|
||||
$(OBJS)\test_gui_ellipsization.o \
|
||||
$(OBJS)\test_gui_measuring.o \
|
||||
$(OBJS)\test_gui_affinematrix.o \
|
||||
$(OBJS)\test_gui_config.o \
|
||||
$(OBJS)\test_gui_bitmapcomboboxtest.o \
|
||||
$(OBJS)\test_gui_bitmaptogglebuttontest.o \
|
||||
@@ -725,6 +726,9 @@ $(OBJS)\test_gui_ellipsization.o: ./graphics/ellipsization.cpp
|
||||
$(OBJS)\test_gui_measuring.o: ./graphics/measuring.cpp
|
||||
$(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\test_gui_affinematrix.o: ./graphics/affinematrix.cpp
|
||||
$(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
$(OBJS)\test_gui_config.o: ./config/config.cpp
|
||||
$(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<
|
||||
|
||||
|
@@ -135,6 +135,7 @@ TEST_GUI_OBJECTS = \
|
||||
$(OBJS)\test_gui_colour.obj \
|
||||
$(OBJS)\test_gui_ellipsization.obj \
|
||||
$(OBJS)\test_gui_measuring.obj \
|
||||
$(OBJS)\test_gui_affinematrix.obj \
|
||||
$(OBJS)\test_gui_config.obj \
|
||||
$(OBJS)\test_gui_bitmapcomboboxtest.obj \
|
||||
$(OBJS)\test_gui_bitmaptogglebuttontest.obj \
|
||||
@@ -870,6 +871,9 @@ $(OBJS)\test_gui_ellipsization.obj: .\graphics\ellipsization.cpp
|
||||
$(OBJS)\test_gui_measuring.obj: .\graphics\measuring.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\measuring.cpp
|
||||
|
||||
$(OBJS)\test_gui_affinematrix.obj: .\graphics\affinematrix.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\graphics\affinematrix.cpp
|
||||
|
||||
$(OBJS)\test_gui_config.obj: .\config\config.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\config\config.cpp
|
||||
|
||||
|
@@ -379,6 +379,7 @@ TEST_GUI_OBJECTS = &
|
||||
$(OBJS)\test_gui_colour.obj &
|
||||
$(OBJS)\test_gui_ellipsization.obj &
|
||||
$(OBJS)\test_gui_measuring.obj &
|
||||
$(OBJS)\test_gui_affinematrix.obj &
|
||||
$(OBJS)\test_gui_config.obj &
|
||||
$(OBJS)\test_gui_bitmapcomboboxtest.obj &
|
||||
$(OBJS)\test_gui_bitmaptogglebuttontest.obj &
|
||||
@@ -784,6 +785,9 @@ $(OBJS)\test_gui_ellipsization.obj : .AUTODEPEND .\graphics\ellipsization.cpp
|
||||
$(OBJS)\test_gui_measuring.obj : .AUTODEPEND .\graphics\measuring.cpp
|
||||
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<
|
||||
|
||||
$(OBJS)\test_gui_affinematrix.obj : .AUTODEPEND .\graphics\affinematrix.cpp
|
||||
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<
|
||||
|
||||
$(OBJS)\test_gui_config.obj : .AUTODEPEND .\config\config.cpp
|
||||
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<
|
||||
|
||||
|
@@ -136,6 +136,7 @@
|
||||
graphics/colour.cpp
|
||||
graphics/ellipsization.cpp
|
||||
graphics/measuring.cpp
|
||||
graphics/affinematrix.cpp
|
||||
config/config.cpp
|
||||
controls/bitmapcomboboxtest.cpp
|
||||
controls/bitmaptogglebuttontest.cpp
|
||||
|
@@ -239,6 +239,10 @@ SOURCE=.\menu\accelentry.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\graphics\affinematrix.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\asserthelper.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@@ -568,6 +568,9 @@
|
||||
<File
|
||||
RelativePath=".\menu\accelentry.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\graphics\affinematrix.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\asserthelper.cpp">
|
||||
</File>
|
||||
|
@@ -831,6 +831,10 @@
|
||||
RelativePath=".\menu\accelentry.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\graphics\affinematrix.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\asserthelper.cpp"
|
||||
>
|
||||
|
@@ -803,6 +803,10 @@
|
||||
RelativePath=".\menu\accelentry.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\graphics\affinematrix.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\asserthelper.cpp"
|
||||
>
|
||||
|
Reference in New Issue
Block a user