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_colour.o \
|
||||||
test_gui_ellipsization.o \
|
test_gui_ellipsization.o \
|
||||||
test_gui_measuring.o \
|
test_gui_measuring.o \
|
||||||
|
test_gui_affinematrix.o \
|
||||||
test_gui_config.o \
|
test_gui_config.o \
|
||||||
test_gui_bitmapcomboboxtest.o \
|
test_gui_bitmapcomboboxtest.o \
|
||||||
test_gui_bitmaptogglebuttontest.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)
|
test_gui_measuring.o: $(srcdir)/graphics/measuring.cpp $(TEST_GUI_ODEP)
|
||||||
$(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/graphics/measuring.cpp
|
$(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)
|
test_gui_config.o: $(srcdir)/config/config.cpp $(TEST_GUI_ODEP)
|
||||||
$(CXXC) -c -o $@ $(TEST_GUI_CXXFLAGS) $(srcdir)/config/config.cpp
|
$(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_colour.obj \
|
||||||
$(OBJS)\test_gui_ellipsization.obj \
|
$(OBJS)\test_gui_ellipsization.obj \
|
||||||
$(OBJS)\test_gui_measuring.obj \
|
$(OBJS)\test_gui_measuring.obj \
|
||||||
|
$(OBJS)\test_gui_affinematrix.obj \
|
||||||
$(OBJS)\test_gui_config.obj \
|
$(OBJS)\test_gui_config.obj \
|
||||||
$(OBJS)\test_gui_bitmapcomboboxtest.obj \
|
$(OBJS)\test_gui_bitmapcomboboxtest.obj \
|
||||||
$(OBJS)\test_gui_bitmaptogglebuttontest.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
|
$(OBJS)\test_gui_measuring.obj: .\graphics\measuring.cpp
|
||||||
$(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\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
|
$(OBJS)\test_gui_config.obj: .\config\config.cpp
|
||||||
$(CXX) -q -c -P -o$@ $(TEST_GUI_CXXFLAGS) .\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_colour.o \
|
||||||
$(OBJS)\test_gui_ellipsization.o \
|
$(OBJS)\test_gui_ellipsization.o \
|
||||||
$(OBJS)\test_gui_measuring.o \
|
$(OBJS)\test_gui_measuring.o \
|
||||||
|
$(OBJS)\test_gui_affinematrix.o \
|
||||||
$(OBJS)\test_gui_config.o \
|
$(OBJS)\test_gui_config.o \
|
||||||
$(OBJS)\test_gui_bitmapcomboboxtest.o \
|
$(OBJS)\test_gui_bitmapcomboboxtest.o \
|
||||||
$(OBJS)\test_gui_bitmaptogglebuttontest.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
|
$(OBJS)\test_gui_measuring.o: ./graphics/measuring.cpp
|
||||||
$(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<
|
$(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
|
$(OBJS)\test_gui_config.o: ./config/config.cpp
|
||||||
$(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<
|
$(CXX) -c -o $@ $(TEST_GUI_CXXFLAGS) $(CPPDEPS) $<
|
||||||
|
|
||||||
|
@@ -135,6 +135,7 @@ TEST_GUI_OBJECTS = \
|
|||||||
$(OBJS)\test_gui_colour.obj \
|
$(OBJS)\test_gui_colour.obj \
|
||||||
$(OBJS)\test_gui_ellipsization.obj \
|
$(OBJS)\test_gui_ellipsization.obj \
|
||||||
$(OBJS)\test_gui_measuring.obj \
|
$(OBJS)\test_gui_measuring.obj \
|
||||||
|
$(OBJS)\test_gui_affinematrix.obj \
|
||||||
$(OBJS)\test_gui_config.obj \
|
$(OBJS)\test_gui_config.obj \
|
||||||
$(OBJS)\test_gui_bitmapcomboboxtest.obj \
|
$(OBJS)\test_gui_bitmapcomboboxtest.obj \
|
||||||
$(OBJS)\test_gui_bitmaptogglebuttontest.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
|
$(OBJS)\test_gui_measuring.obj: .\graphics\measuring.cpp
|
||||||
$(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\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
|
$(OBJS)\test_gui_config.obj: .\config\config.cpp
|
||||||
$(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) .\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_colour.obj &
|
||||||
$(OBJS)\test_gui_ellipsization.obj &
|
$(OBJS)\test_gui_ellipsization.obj &
|
||||||
$(OBJS)\test_gui_measuring.obj &
|
$(OBJS)\test_gui_measuring.obj &
|
||||||
|
$(OBJS)\test_gui_affinematrix.obj &
|
||||||
$(OBJS)\test_gui_config.obj &
|
$(OBJS)\test_gui_config.obj &
|
||||||
$(OBJS)\test_gui_bitmapcomboboxtest.obj &
|
$(OBJS)\test_gui_bitmapcomboboxtest.obj &
|
||||||
$(OBJS)\test_gui_bitmaptogglebuttontest.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
|
$(OBJS)\test_gui_measuring.obj : .AUTODEPEND .\graphics\measuring.cpp
|
||||||
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<
|
$(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
|
$(OBJS)\test_gui_config.obj : .AUTODEPEND .\config\config.cpp
|
||||||
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<
|
$(CXX) -bt=nt -zq -fo=$^@ $(TEST_GUI_CXXFLAGS) $<
|
||||||
|
|
||||||
|
@@ -136,6 +136,7 @@
|
|||||||
graphics/colour.cpp
|
graphics/colour.cpp
|
||||||
graphics/ellipsization.cpp
|
graphics/ellipsization.cpp
|
||||||
graphics/measuring.cpp
|
graphics/measuring.cpp
|
||||||
|
graphics/affinematrix.cpp
|
||||||
config/config.cpp
|
config/config.cpp
|
||||||
controls/bitmapcomboboxtest.cpp
|
controls/bitmapcomboboxtest.cpp
|
||||||
controls/bitmaptogglebuttontest.cpp
|
controls/bitmaptogglebuttontest.cpp
|
||||||
|
@@ -239,6 +239,10 @@ SOURCE=.\menu\accelentry.cpp
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\graphics\affinematrix.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\asserthelper.cpp
|
SOURCE=.\asserthelper.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@@ -569,6 +569,9 @@
|
|||||||
RelativePath=".\menu\accelentry.cpp">
|
RelativePath=".\menu\accelentry.cpp">
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
RelativePath=".\graphics\affinematrix.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
RelativePath=".\asserthelper.cpp">
|
RelativePath=".\asserthelper.cpp">
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
@@ -832,6 +832,10 @@
|
|||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
RelativePath=".\graphics\affinematrix.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
RelativePath=".\asserthelper.cpp"
|
RelativePath=".\asserthelper.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
@@ -804,6 +804,10 @@
|
|||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
|
RelativePath=".\graphics\affinematrix.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
RelativePath=".\asserthelper.cpp"
|
RelativePath=".\asserthelper.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
Reference in New Issue
Block a user