basegfx/source/matrix/b2dhommatrix.cxx | 8 ++++++++ basegfx/test/basegfx2d.cxx | 17 +++++++++++++++++ 2 files changed, 25 insertions(+)
New commits: commit 800806ba850c7fd03e37acb011fa993e08cb8fc8 Author: Thorsten Behrens <tbehr...@suse.com> Date: Wed Jan 18 14:52:20 2012 -0500 decompose() should return the original rotation angle and scales. decompose() would return incorrect rotation angle and scales when the angle was exactly 180 degrees, due to FPU rounding error. This commit fixes it. This problem would manifest itself when inserting an image into Calc/Draw, cropping it, and flipping it vertically or rotating it at exactly 180 degrees. Before the fix the image would simply disappear. diff --git a/basegfx/source/matrix/b2dhommatrix.cxx b/basegfx/source/matrix/b2dhommatrix.cxx index 942f313..8538d22 100644 --- a/basegfx/source/matrix/b2dhommatrix.cxx +++ b/basegfx/source/matrix/b2dhommatrix.cxx @@ -289,6 +289,14 @@ namespace basegfx // no rotation and shear, copy scale values rScale.setX(get(0, 0)); rScale.setY(get(1, 1)); + + // or is there? + if( rScale.getX() < 0 && rScale.getY() < 0 ) + { + // there is - 180 degree rotated + rScale *= -1; + rRotate = 180*F_PI180; + } } else { diff --git a/basegfx/test/basegfx2d.cxx b/basegfx/test/basegfx2d.cxx index 65f778f..0f0c9c7 100644 --- a/basegfx/test/basegfx2d.cxx +++ b/basegfx/test/basegfx2d.cxx @@ -36,6 +36,7 @@ #include "cppunit/extensions/HelperMacros.h" #include <basegfx/matrix/b2dhommatrix.hxx> +#include <basegfx/matrix/b2dhommatrixtools.hxx> #include <basegfx/polygon/b2dpolygon.hxx> #include <basegfx/polygon/b2dpolygontools.hxx> #include <basegfx/curve/b2dcubicbezier.hxx> @@ -666,6 +667,22 @@ public: CPPUNIT_ASSERT_MESSAGE("decompose: error test I2", impDecomposeComposeTest(-fSX, fSY, tan(-fS), -fR)); CPPUNIT_ASSERT_MESSAGE("decompose: error test I3", impDecomposeComposeTest(fSX, -fSY, tan(-fS), -fR)); CPPUNIT_ASSERT_MESSAGE("decompose: error test I4", impDecomposeComposeTest(-fSX, -fSY, tan(-fS), -fR)); + + // cover special case of 180 degree rotation + B2DHomMatrix aTest=tools::createScaleShearXRotateTranslateB2DHomMatrix( + 6425,3938, + 0, + 180*F_PI180, + 10482,4921); + // decompose that matrix + B2DTuple aDScale; + B2DTuple aDTrans; + double fDRot; + double fDShX; + aTest.decompose(aDScale, aDTrans, fDRot, fDShX); + CPPUNIT_ASSERT_MESSAGE("decompose: error test J1", aDScale.getX() == 6425 && aDScale.getY() == 3938); + CPPUNIT_ASSERT_MESSAGE("decompose: error test J1", aDTrans.getX() == 10482 && aDTrans.getY() == 4921); + CPPUNIT_ASSERT_MESSAGE("decompose: error test J1", fDRot == 180*F_PI180); } // Change the following lines only, if you add, remove or rename _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits