summaryrefslogtreecommitdiffstats
path: root/oox
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-03-22 10:34:24 +0100
committerMiklos Vajna <vmiklos@suse.cz>2012-03-22 11:03:26 +0100
commit51cfbf0cfaec395a99a00f2c20fcba96de9a4427 (patch)
treee4255430ae83bea9f123c10074be8bd72822294f /oox
parentLook for properly registered windows sdks instead for random version numbers (diff)
downloadcore-51cfbf0cfaec395a99a00f2c20fcba96de9a4427.tar.gz
core-51cfbf0cfaec395a99a00f2c20fcba96de9a4427.zip
n#751054 fix VML import of absolutely positioned pictures
There were multiple issues here: - convertEmuToHmm() not handling negative values - position:absolute style property being ignored - mso-position-vertical-relative is not converted to text::RelOrientation - SwAnchoredDrawObject::_SetPositioningAttr() re-positioning already positioned objects - DomainMapper_Impl::PushShapeContext() inserting positioned objects as character
Diffstat (limited to 'oox')
-rw-r--r--oox/inc/oox/drawingml/drawingmltypes.hxx2
-rw-r--r--oox/inc/oox/vml/vmlshape.hxx1
-rw-r--r--oox/source/token/properties.txt1
-rw-r--r--oox/source/vml/vmlshape.cxx14
-rw-r--r--oox/source/vml/vmlshapecontext.cxx1
5 files changed, 17 insertions, 2 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;
}
}
}