summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-09-26 12:45:12 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-09-26 13:03:53 +0200
commitdd2b8472a97d1ab01111f9969b046a1c2ec5586a (patch)
tree36b681295e9604073d7b5875aaa6b2ad623d2ec0
parent4652700776666e385946c47235363c1120846d5d (diff)
DOCX drawingML import: fix handling of rotation in case of horizontal flip
Change-Id: I95f74c3d3222a4d713c8d71bcd3263ecb16dba54
-rw-r--r--sw/qa/extras/ooxmlexport/data/rot90-fliph.docxbin0 -> 15683 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport.cxx11
-rw-r--r--writerfilter/source/dmapper/GraphicImport.cxx19
3 files changed, 23 insertions, 7 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/rot90-fliph.docx b/sw/qa/extras/ooxmlexport/data/rot90-fliph.docx
new file mode 100644
index 000000000000..c2a916d8093b
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/rot90-fliph.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index be44a0723086..43ea66977dc1 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -304,6 +304,17 @@ DECLARE_OOXMLEXPORT_TEST(testDrawingmlFlipv, "drawingml-flipv.docx")
}
}
+DECLARE_OOXMLEXPORT_TEST(testRot90Fliph, "rot90-fliph.docx")
+{
+ // The problem was that a shape rotation of 90° got turned into 270° after roundtrip.
+ if (xmlDocPtr pXmlDoc = parseExport("word/document.xml"))
+ {
+ assertXPath(pXmlDoc, "//a:xfrm", "flipH", "1");
+ // This was 16200000 (270 * 60000).
+ assertXPath(pXmlDoc, "//a:xfrm", "rot", "5400000");
+ }
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 28550bde88bf..0c914afea90b 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -41,6 +41,8 @@
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/table/ShadowFormat.hpp>
+#include <svx/svdobj.hxx>
+#include <svx/unoapi.hxx>
#include <cppuhelper/implbase1.hxx>
#include <rtl/ustrbuf.hxx>
#include <rtl/math.hxx>
@@ -749,15 +751,18 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue)
if (m_pImpl->isYSizeValis())
aSize.Height = m_pImpl->getYSize();
- // TODO: avoid this setSize(), just send the size to
- // oox, so it can set the right transformation matrix
- // right away.
- uno::Any aRotation;
+ sal_Int32 nRotation = 0;
if (bKeepRotation)
- aRotation = xShapeProps->getPropertyValue("RotateAngle");
+ {
+ // Use internal API, getPropertyValue(RotateAngle)
+ // would use GetObjectRotation(), which is not what
+ // we want.
+ if (SdrObject* pShape = GetSdrObjectFromXShape(m_xShape))
+ nRotation = pShape->GetRotateAngle();
+ }
m_xShape->setSize(aSize);
- if (bKeepRotation && aRotation.hasValue() && aRotation.get<sal_Int32>() != 0)
- xShapeProps->setPropertyValue("RotateAngle", aRotation);
+ if (bKeepRotation)
+ xShapeProps->setPropertyValue("RotateAngle", uno::makeAny(nRotation));
m_pImpl->bIsGraphic = true;