diff options
-rw-r--r-- | svx/qa/unit/customshapes.cxx | 18 | ||||
-rw-r--r-- | svx/qa/unit/data/tdf141127_defaultSkewAngle.odp | bin | 0 -> 28191 bytes | |||
-rw-r--r-- | xmloff/source/draw/ximpcustomshape.cxx | 9 |
3 files changed, 27 insertions, 0 deletions
diff --git a/svx/qa/unit/customshapes.cxx b/svx/qa/unit/customshapes.cxx index 4e3f76db74ec..811b4489569c 100644 --- a/svx/qa/unit/customshapes.cxx +++ b/svx/qa/unit/customshapes.cxx @@ -940,6 +940,24 @@ CPPUNIT_TEST_FIXTURE(CustomshapesTest, testTdf136176) } } } + +CPPUNIT_TEST_FIXTURE(CustomshapesTest, testTdf141127WrongSkewDefault) +{ + // Load a document that has a shape in extrusion mode, but no draw:extrusion-skew attribute. + // Error was, that the shape uses the MS Office binary defaults and so the extruded side faces + // were not left/bottom, but top/right. + OUString sURL = m_directories.getURLFromSrc(sDataDirectory) + "tdf141127_defaultSkewAngle.odp"; + mxComponent = loadFromDesktop(sURL, "com.sun.star.comp.presentation.PresentationDocument"); + CPPUNIT_ASSERT_MESSAGE("Could not load document", mxComponent.is()); + uno::Reference<drawing::XShape> xShape(getShape(0)); + SdrObjCustomShape& rSdrCustomShape( + static_cast<SdrObjCustomShape&>(*GetSdrObjectFromXShape(xShape))); + + // Check left/bottom of bound rect. Without fix it would be left=15994, bottom=6999. + tools::Rectangle aBoundRect(rSdrCustomShape.GetCurrentBoundRect()); + CPPUNIT_ASSERT_EQUAL(tools::Long(15371), aBoundRect.Left()); + CPPUNIT_ASSERT_EQUAL(tools::Long(7622), aBoundRect.Bottom()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/qa/unit/data/tdf141127_defaultSkewAngle.odp b/svx/qa/unit/data/tdf141127_defaultSkewAngle.odp Binary files differnew file mode 100644 index 000000000000..5cd0da96ec20 --- /dev/null +++ b/svx/qa/unit/data/tdf141127_defaultSkewAngle.odp diff --git a/xmloff/source/draw/ximpcustomshape.cxx b/xmloff/source/draw/ximpcustomshape.cxx index ebaf15651950..15d296187348 100644 --- a/xmloff/source/draw/ximpcustomshape.cxx +++ b/xmloff/source/draw/ximpcustomshape.cxx @@ -1286,6 +1286,15 @@ void XMLEnhancedCustomShapeContext::endFastElement(sal_Int32 ) } } + //tdf#141127 Add ODF default values. Otherwise defaults from MS Office binary format are used. + if (!maExtrusion.empty()) + { + auto it = std::find_if(maExtrusion.begin(), maExtrusion.end(), + [](css::beans::PropertyValue& rProp){return EASGet(rProp.Name) == EAS_Skew;} ); + if (it == maExtrusion.end()) + GetEnhancedParameterPair(maExtrusion, "50 45", EAS_Skew); + } + SdXMLCustomShapePropertyMerge( mrCustomShapeGeometry, maExtrusion, EASGet( EAS_Extrusion ) ); SdXMLCustomShapePropertyMerge( mrCustomShapeGeometry, maPath, EASGet( EAS_Path ) ); SdXMLCustomShapePropertyMerge( mrCustomShapeGeometry, maTextPath, EASGet( EAS_TextPath ) ); |