diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx index 31828dbba891..9e6f20846e1d 100644 --- a/oox/source/vml/vmlshape.cxx +++ b/oox/source/vml/vmlshape.cxx @@ -642,9 +642,13 @@ Reference< XShape > SimpleShape::implConvertAndInsert( const Reference< XShapes if (oRotation) { lcl_SetRotation(aPropertySet, *oRotation); - // If rotation is used, simple setPosition() is not enough. - aPropertySet.setAnyProperty(PROP_HoriOrientPosition, makeAny( aShapeRect.X ) ); - aPropertySet.setAnyProperty(PROP_VertOrientPosition, makeAny( aShapeRect.Y ) ); + uno::Reference xServiceInfo(rxShapes, uno::UNO_QUERY); + if (!xServiceInfo->supportsService("com.sun.star.drawing.GroupShape")) + { + // If rotation is used, simple setPosition() is not enough. + aPropertySet.setAnyProperty(PROP_HoriOrientPosition, makeAny(aShapeRect.X)); + aPropertySet.setAnyProperty(PROP_VertOrientPosition, makeAny(aShapeRect.Y)); + } } // When flip has 'x' or 'y', the associated ShapeRect will be changed but direction change doesn't occur. diff --git a/sw/qa/extras/ooxmlimport/data/groupshape-child-rotation.docx b/sw/qa/extras/ooxmlimport/data/groupshape-child-rotation.docx new file mode 100644 index 000000000000..06aa39d75df9 Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/groupshape-child-rotation.docx differ diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index b79b6fb92576..32e54d2066b8 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -962,6 +962,17 @@ DECLARE_OOXMLIMPORT_TEST(testGroupshapeLine, "groupshape-line.docx") CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xShape->getSize().Height); } +DECLARE_OOXMLIMPORT_TEST(testGroupshapeChildRotation, "groupshape-child-rotation.docx") +{ + // The problem was that (due to incorrect handling of rotation inside + // groupshapes), the first child wasn't in the top left corner of an inline + // groupshape. + uno::Reference xGroupShape(getShape(1), uno::UNO_QUERY); + uno::Reference xShape(xGroupShape->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xShape->getPosition().X); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xShape->getPosition().Y); +} + DECLARE_OOXMLIMPORT_TEST(testN793262, "n793262.docx") { uno::Reference xHeaderText = getProperty< uno::Reference >(getStyles("PageStyles")->getByName(DEFAULT_STYLE), "HeaderText");