diff options
-rw-r--r-- | oox/source/vml/vmlshape.cxx | 27 | ||||
-rw-r--r-- | sw/qa/extras/ooxmlimport/data/tdf78902.docx | bin | 0 -> 30230 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 6 |
3 files changed, 24 insertions, 9 deletions
diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx index 5090a29ad161..222e38d0cf5f 100644 --- a/oox/source/vml/vmlshape.cxx +++ b/oox/source/vml/vmlshape.cxx @@ -530,11 +530,18 @@ SimpleShape::SimpleShape( Drawing& rDrawing, const OUString& rService ) : { } -void lcl_setSurround(PropertySet& rPropSet, const ShapeTypeModel& rTypeModel) +void lcl_setSurround(PropertySet& rPropSet, const ShapeTypeModel& rTypeModel, const GraphicHelper& rGraphicHelper) { + OUString aWrapType = rTypeModel.moWrapType.get(); + + // Extreme negative top margin? Then the shape will end up at the top of the page, it's pointless to perform any kind of wrapping. + sal_Int32 nMarginTop = ConversionHelper::decodeMeasureToHmm(rGraphicHelper, rTypeModel.maMarginTop, 0, false, true); + if (nMarginTop < -35277) // Less than 1000 points. + aWrapType.clear(); + sal_Int32 nSurround = css::text::WrapTextMode_THROUGHT; - if ( rTypeModel.moWrapType.get() == "square" || rTypeModel.moWrapType .get()== "tight" || - rTypeModel.moWrapType.get() == "through" ) + if ( aWrapType == "square" || aWrapType == "tight" || + aWrapType == "through" ) { nSurround = css::text::WrapTextMode_PARALLEL; if ( rTypeModel.moWrapSide.get() == "left" ) @@ -542,13 +549,13 @@ void lcl_setSurround(PropertySet& rPropSet, const ShapeTypeModel& rTypeModel) else if ( rTypeModel.moWrapSide.get() == "right" ) nSurround = css::text::WrapTextMode_RIGHT; } - else if ( rTypeModel.moWrapType.get() == "topAndBottom" ) + else if ( aWrapType == "topAndBottom" ) nSurround = css::text::WrapTextMode_NONE; rPropSet.setProperty(PROP_Surround, nSurround); } -void lcl_SetAnchorType(PropertySet& rPropSet, const ShapeTypeModel& rTypeModel) +void lcl_SetAnchorType(PropertySet& rPropSet, const ShapeTypeModel& rTypeModel, const GraphicHelper& rGraphicHelper) { if ( rTypeModel.maPositionHorizontal == "center" ) rPropSet.setAnyProperty(PROP_HoriOrient, makeAny(text::HoriOrientation::CENTER)); @@ -611,7 +618,7 @@ void lcl_SetAnchorType(PropertySet& rPropSet, const ShapeTypeModel& rTypeModel) { rPropSet.setProperty(PROP_AnchorType, text::TextContentAnchorType_AS_CHARACTER); } - lcl_setSurround( rPropSet, rTypeModel ); + lcl_setSurround( rPropSet, rTypeModel, rGraphicHelper ); } void lcl_SetRotation(PropertySet& rPropSet, const sal_Int32 nRotation) @@ -813,7 +820,7 @@ Reference< XShape > SimpleShape::implConvertAndInsert( const Reference< XShapes } } - lcl_SetAnchorType(aPropertySet, maTypeModel); + lcl_SetAnchorType(aPropertySet, maTypeModel, rGraphicHelper ); return xShape; } @@ -842,7 +849,8 @@ Reference< XShape > SimpleShape::createPictureObject( const Reference< XShapes > if ( !maTypeModel.maRotation.isEmpty() ) lcl_SetRotation( aPropSet, maTypeModel.maRotation.toInt32() ); - lcl_SetAnchorType(aPropSet, maTypeModel); + const GraphicHelper& rGraphicHelper = mrDrawing.getFilter().getGraphicHelper(); + lcl_SetAnchorType(aPropSet, maTypeModel, rGraphicHelper); } return xShape; } @@ -1231,7 +1239,8 @@ Reference< XShape > GroupShape::implConvertAndInsert( const Reference< XShapes > } // Make sure group shapes are inline as well, unless there is an explicit different style. PropertySet aPropertySet(xGroupShape); - lcl_SetAnchorType(aPropertySet, maTypeModel); + const GraphicHelper& rGraphicHelper = mrDrawing.getFilter().getGraphicHelper(); + lcl_SetAnchorType(aPropertySet, maTypeModel, rGraphicHelper); if (!maTypeModel.maRotation.isEmpty()) lcl_SetRotation(aPropertySet, maTypeModel.maRotation.toInt32()); return xGroupShape; diff --git a/sw/qa/extras/ooxmlimport/data/tdf78902.docx b/sw/qa/extras/ooxmlimport/data/tdf78902.docx Binary files differnew file mode 100644 index 000000000000..3cf3a443a975 --- /dev/null +++ b/sw/qa/extras/ooxmlimport/data/tdf78902.docx diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 4eb7007d9958..8c28ff91a0fc 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -2926,6 +2926,12 @@ DECLARE_OOXMLIMPORT_TEST(testTdf85232, "tdf85232.docx") CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2267), xShape->getPosition().X); } +DECLARE_OOXMLIMPORT_TEST(testTdf78902, "tdf78902.docx") +{ + // This hung in layout. + CPPUNIT_ASSERT_EQUAL(2, getPages()); +} + DECLARE_OOXMLIMPORT_TEST(testTdf95775, "tdf95775.docx") { // This must not fail in layout |