summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorAndras Timar <andras.timar@collabora.com>2016-01-29 16:42:31 +0100
committerAndras Timar <andras.timar@collabora.com>2016-02-03 09:55:56 +0000
commitbd36889b2caa4a74d647e18fc52e455f83529be9 (patch)
tree906e085e2d0907feba8e12db12405863e6c5a2bd /oox
parente4b98408f60fdbe8248540da58bde8a9bf00c461 (diff)
Improve DrawingML export of rotated/flipped customshapes
When we export the customshape as polypolygon, we need to take into account, that the polypolygon of the shape already has flipped coordinates, but coordinates has to be relative to the rotated bounding rectangle. Change-Id: I4f3b015e439d3d6041adc67eddd460f5bd4dfca1 Reviewed-on: https://gerrit.libreoffice.org/21905 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/export/shapes.cxx18
1 files changed, 14 insertions, 4 deletions
diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index b4e7b137b182..f7e84db57784 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -713,9 +713,7 @@ ShapeExport& ShapeExport::WriteCustomShape( Reference< XShape > xShape )
pFS->startElementNS( mnXmlNamespace, XML_spPr, FSEND );
// moon is flipped in MSO, and mso-spt89 (right up arrow) is mapped to leftUpArrow
if ( sShapeType == "moon" || sShapeType == "mso-spt89" )
- WriteShapeTransformation( xShape, XML_a, !bFlipH, bFlipV );
- else
- WriteShapeTransformation( xShape, XML_a, bFlipH, bFlipV );
+ bFlipH = !bFlipH;
// we export non-primitive shapes to custom geometry
// we also export non-ooxml shapes which have handles/equations to custom geometry, because
@@ -736,14 +734,26 @@ ShapeExport& ShapeExport::WriteCustomShape( Reference< XShape > xShape )
if (bHasHandles && bCustGeom && pShape)
{
- WritePolyPolygon( tools::PolyPolygon( pShape->GetLineGeometry(true) ) );
+ WriteShapeTransformation( xShape, XML_a ); // do not flip, polypolygon coordinates are flipped already
+ tools::PolyPolygon aPolyPolygon( pShape->GetLineGeometry(true) );
+ sal_Int32 nRotation = 0;
+ // The RotateAngle property's value is independent from any flipping, and that's exactly what we need here.
+ uno::Reference<beans::XPropertySet> xPropertySet(xShape, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xPropertySet->getPropertySetInfo();
+ if (xPropertySetInfo->hasPropertyByName("RotateAngle"))
+ xPropertySet->getPropertyValue("RotateAngle") >>= nRotation;
+ if (nRotation != 0)
+ aPolyPolygon.Rotate(Point(0,0), static_cast<sal_uInt16>(3600-nRotation/10));
+ WritePolyPolygon( aPolyPolygon );
}
else if (bCustGeom)
{
+ WriteShapeTransformation( xShape, XML_a, bFlipH, bFlipV );
WriteCustomGeometry( xShape );
}
else // preset geometry
{
+ WriteShapeTransformation( xShape, XML_a, bFlipH, bFlipV );
if( nAdjustmentValuesIndex != -1 )
{
sal_Int32 nAdjustmentsWhichNeedsToBeConverted = 0;