From 454cd82012c785718d1ffaf1199f00f35f93c609 Mon Sep 17 00:00:00 2001 From: Lennard Date: Wed, 5 Dec 2012 21:28:02 +0100 Subject: fix position correction for flipped shapes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This complements change a9fc1456719da3cecda6a97454bad0642e493035 The Translation-compensation of that fix didn't work for flipped shapes. Also, vertically flipped shapes made problems. Also 360 °C = 0°C (drawingml.hxx) I didn't dare to fix it earlier because there is some problem with the selection frames. But that is an import bug, not caused by some export stuff! This import bug makes the manipulation rectangles around the shapes flipped & turning in the wrong direction, perhaps due to CroftCro$oft clockwisification! Change-Id: I05aa036d31cd5d9a8b194897b3d92ec12d6d2c61 Signed-off-by: Lennard Reviewed-on: https://gerrit.libreoffice.org/1250 Reviewed-by: Petr Mladek Tested-by: Petr Mladek --- oox/inc/oox/export/drawingml.hxx | 2 +- oox/source/export/drawingml.cxx | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'oox') diff --git a/oox/inc/oox/export/drawingml.hxx b/oox/inc/oox/export/drawingml.hxx index 486d792b08e1..6198ec608537 100644 --- a/oox/inc/oox/export/drawingml.hxx +++ b/oox/inc/oox/export/drawingml.hxx @@ -28,7 +28,7 @@ #include #include #ifndef PPTX_EXPORT_ROTATE_CLOCKWISIFY -#define PPTX_EXPORT_ROTATE_CLOCKWISIFY(input) (21600000-input*600) +#define PPTX_EXPORT_ROTATE_CLOCKWISIFY(input) ((21600000-input*600)%21600000) #endif class Graphic; diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 94bf8a1c4087..8389b3a2d0b0 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -643,8 +643,14 @@ void DrawingML::WriteShapeTransformation( Reference< XShape > rXShape, sal_Int32 { SdrObject* pShape = (SdrObject*) GetSdrObjectFromXShape( rXShape ); nRotation=pShape->GetRotateAngle(); - aPos.X-=(1-cos(nRotation*F_PI18000))*aSize.Width/2-sin(nRotation*F_PI18000)*aSize.Height/2; - aPos.Y-=(1-cos(nRotation*F_PI18000))*aSize.Height/2+sin(nRotation*F_PI18000)*aSize.Width/2; + int faccos=bFlipV ? -1 : 1; + int facsin=bFlipH ? -1 : 1; + aPos.X-=(1-faccos*cos(nRotation*F_PI18000))*aSize.Width/2-facsin*sin(nRotation*F_PI18000)*aSize.Height/2; + aPos.Y-=(1-faccos*cos(nRotation*F_PI18000))*aSize.Height/2+facsin*sin(nRotation*F_PI18000)*aSize.Width/2; + } + if (!bSuppressRotation) + { + if (bFlipV) {nRotation=(nRotation+18000)%36000;} } WriteTransformation( Rectangle( Point( aPos.X, aPos.Y ), Size( aSize.Width, aSize.Height ) ), nXmlNamespace, bFlipH, bFlipV, PPTX_EXPORT_ROTATE_CLOCKWISIFY(nRotation) ); } -- cgit