diff --git a/sd/qa/unit/data/pptx/tdf103473.pptx b/sd/qa/unit/data/pptx/tdf103473.pptx new file mode 100644 index 000000000000..5b31b761d22c Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf103473.pptx differ diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx index 1d0eef1adf7f..7fded515c189 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -126,6 +126,7 @@ public: void testTdf95932(); void testTdf99030(); void testTdf49561(); + void testTdf103473(); CPPUNIT_TEST_SUITE(SdImportTest); @@ -177,6 +178,7 @@ public: CPPUNIT_TEST(testTdf95932); CPPUNIT_TEST(testTdf99030); CPPUNIT_TEST(testTdf49561); + CPPUNIT_TEST(testTdf103473); CPPUNIT_TEST_SUITE_END(); }; @@ -1486,6 +1488,22 @@ void SdImportTest::testTdf49561() xDocShRef->DoClose(); } +void SdImportTest::testTdf103473() +{ + sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("/sd/qa/unit/data/pptx/tdf103473.pptx"), PPTX); + + const SdrPage *pPage = GetPage(1, xDocShRef); + SdrTextObj *const pObj = dynamic_cast(pPage->GetObj(0)); + CPPUNIT_ASSERT(pObj); + Rectangle aRect = pObj->GetGeoRect(); + CPPUNIT_ASSERT_EQUAL(3629L, aRect.Left()); + CPPUNIT_ASSERT_EQUAL(4431L, aRect.Top()); + CPPUNIT_ASSERT_EQUAL(8353L, aRect.Right()); + CPPUNIT_ASSERT_EQUAL(9155L, aRect.Bottom()); + + xDocShRef->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index d799110844c7..7dd1b8d1d47e 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -1671,17 +1671,17 @@ void SdrTextObj::TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const b double fShearX(0.0); rMatrix.decompose(aScale, aTranslate, fRotate, fShearX); - // #i75086# Old DrawingLayer (GeoStat and geometry) does not support holding negative scalings - // in X and Y which equal a 180 degree rotation. Recognize it and react accordingly - if(basegfx::fTools::less(aScale.getX(), 0.0) && basegfx::fTools::less(aScale.getY(), 0.0)) + // flip? + bool bFlipX = aScale.getX() < 0.0, + bFlipY = aScale.getY() < 0.0; + if (bFlipX) { aScale.setX(fabs(aScale.getX())); - aScale.setY(fabs(aScale.getY())); - fRotate = fmod(fRotate + F_PI, F_2PI); } - // flip? - bool bFlipX = basegfx::fTools::less(aScale.getX(), 0.0), - bFlipY = basegfx::fTools::less(aScale.getY(), 0.0); + if (bFlipY) + { + aScale.setY(fabs(aScale.getY())); + } // reset object shear and rotations aGeo.nRotationAngle = 0;