diff options
-rw-r--r-- | oox/inc/oox/drawingml/drawingmltypes.hxx | 2 | ||||
-rw-r--r-- | oox/inc/oox/vml/vmlshape.hxx | 1 | ||||
-rw-r--r-- | oox/source/token/properties.txt | 1 | ||||
-rw-r--r-- | oox/source/vml/vmlshape.cxx | 14 | ||||
-rw-r--r-- | oox/source/vml/vmlshapecontext.cxx | 1 | ||||
-rw-r--r-- | sw/source/core/layout/anchoreddrawobject.cxx | 7 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 7 |
7 files changed, 29 insertions, 4 deletions
diff --git a/oox/inc/oox/drawingml/drawingmltypes.hxx b/oox/inc/oox/drawingml/drawingmltypes.hxx index 600b1bc6c906..71174b36b43a 100644 --- a/oox/inc/oox/drawingml/drawingmltypes.hxx +++ b/oox/inc/oox/drawingml/drawingmltypes.hxx @@ -156,7 +156,7 @@ inline sal_Int64 convertHmmToEmu( sal_Int32 nValue ) /** Converts the passed 64-bit integer value from EMUs to 1/100 mm. */ inline sal_Int32 convertEmuToHmm( sal_Int64 nValue ) { - return getLimitedValue< sal_Int32, sal_Int64 >( (nValue + EMU_PER_HMM / 2) / EMU_PER_HMM, 0, SAL_MAX_INT32 ); + return getLimitedValue< sal_Int32, sal_Int64 >( (nValue + EMU_PER_HMM / 2) / EMU_PER_HMM, SAL_MIN_INT32, SAL_MAX_INT32 ); } // ============================================================================ diff --git a/oox/inc/oox/vml/vmlshape.hxx b/oox/inc/oox/vml/vmlshape.hxx index 1998a0271c29..37e9c0934849 100644 --- a/oox/inc/oox/vml/vmlshape.hxx +++ b/oox/inc/oox/vml/vmlshape.hxx @@ -79,6 +79,7 @@ struct ShapeTypeModel ::rtl::OUString maHeight; /// Height of the shape bounding box (number with unit). ::rtl::OUString maMarginLeft; /// X position of the shape bounding box to shape anchor (number with unit). ::rtl::OUString maMarginTop; /// Y position of the shape bounding box to shape anchor (number with unit). + ::rtl::OUString maPositionVerticalRelative; /// The Y position is relative to this. StrokeModel maStrokeModel; /// Border line formatting. FillModel maFillModel; /// Shape fill formatting. diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt index 176ae084813c..560f87920cbc 100644 --- a/oox/source/token/properties.txt +++ b/oox/source/token/properties.txt @@ -498,6 +498,7 @@ VerticalAlign VerticalSplitMode VerticalSplitPositionTwips VertOrientPosition +VertOrientRelation ViewBox Visible VisibleFlag diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx index c2fbd65eb4f9..bdecb8b4ed69 100644 --- a/oox/source/vml/vmlshape.cxx +++ b/oox/source/vml/vmlshape.cxx @@ -42,6 +42,7 @@ #include <com/sun/star/text/XTextContent.hpp> #include <com/sun/star/text/XTextDocument.hpp> #include <com/sun/star/text/XTextFrame.hpp> +#include <com/sun/star/text/TextContentAnchorType.hpp> #include <rtl/math.hxx> #include <rtl/ustrbuf.hxx> #include "oox/drawingml/shapepropertymap.hxx" @@ -59,6 +60,7 @@ using ::com::sun::star::beans::XPropertySet; using ::com::sun::star::uno::Any; +using namespace ::com::sun::star; using namespace ::com::sun::star::text; namespace oox { @@ -524,11 +526,21 @@ Reference< XShape > ComplexShape::implConvertAndInsert( const Reference< XShapes if( xShape.is() ) { OUString aGraphicUrl = rFilter.getGraphicHelper().importEmbeddedGraphicObject( aGraphicPath ); + PropertySet aPropSet( xShape ); if( !aGraphicUrl.isEmpty() ) { - PropertySet aPropSet( xShape ); aPropSet.setProperty( PROP_GraphicURL, aGraphicUrl ); } + // If the shape has an absolute position, set the properties accordingly. + if (maTypeModel.maPosition.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("absolute"))) + { + aPropSet.setProperty(PROP_HoriOrientPosition, rShapeRect.X); + aPropSet.setProperty(PROP_VertOrientPosition, rShapeRect.Y); + } + if (maTypeModel.maPositionVerticalRelative.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("page"))) + { + aPropSet.setProperty(PROP_VertOrientRelation, text::RelOrientation::PAGE_FRAME); + } } return xShape; } diff --git a/oox/source/vml/vmlshapecontext.cxx b/oox/source/vml/vmlshapecontext.cxx index e0e38ce70264..91703fc527e9 100644 --- a/oox/source/vml/vmlshapecontext.cxx +++ b/oox/source/vml/vmlshapecontext.cxx @@ -346,6 +346,7 @@ void ShapeTypeContext::setStyle( const OUString& rStyle ) else if( aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "height" ) ) ) mrTypeModel.maHeight = aValue; else if( aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "margin-left" ) ) ) mrTypeModel.maMarginLeft = aValue; else if( aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "margin-top" ) ) ) mrTypeModel.maMarginTop = aValue; + else if( aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "mso-position-vertical-relative" ) ) ) mrTypeModel.maPositionVerticalRelative = aValue; } } } diff --git a/sw/source/core/layout/anchoreddrawobject.cxx b/sw/source/core/layout/anchoreddrawobject.cxx index 90db5a34da90..735878f98ea9 100644 --- a/sw/source/core/layout/anchoreddrawobject.cxx +++ b/sw/source/core/layout/anchoreddrawobject.cxx @@ -798,12 +798,15 @@ void SwAnchoredDrawObject::_SetPositioningAttr() // --> #i71182# // only change position - do not lose other attributes SwFmtHoriOrient aHori( GetFrmFmt().GetHoriOrient() ); - aHori.SetPos( nHoriPos ); + // If the object is already positioned, leave it alone. + if (!aHori.GetPos()) + aHori.SetPos( nHoriPos ); GetFrmFmt().SetFmtAttr( aHori ); SwFmtVertOrient aVert( GetFrmFmt().GetVertOrient() ); - aVert.SetPos( nVertPos ); + if (!aVert.GetPos()) + aVert.SetPos( nVertPos ); GetFrmFmt().SetFmtAttr( aVert ); // --> #i36010# - set layout direction of the position diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 2f0dd2bcf7f1..8d8187381645 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1513,6 +1513,13 @@ void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape uno::Reference< lang::XServiceInfo > xSInfo( xShape, uno::UNO_QUERY_THROW ); bool bIsGraphic = xSInfo->supportsService( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.GraphicObjectShape" ) ) ); + // If there are position properties, the shape should not be inserted "as character". + sal_Int32 nHoriPosition = 0, nVertPosition = 0; + xProps->getPropertyValue(rPropNameSupplier.GetName(PROP_HORI_ORIENT_POSITION)) >>= nHoriPosition; + xProps->getPropertyValue(rPropNameSupplier.GetName(PROP_VERT_ORIENT_POSITION)) >>= nVertPosition; + if (nHoriPosition != 0 || nVertPosition != 0) + bIsGraphic = false; + xProps->setPropertyValue( rPropNameSupplier.GetName( PROP_OPAQUE ), uno::makeAny( true ) ); |