summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2019-01-26 17:13:28 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2019-02-12 07:04:08 +0100
commit641004969ffd053bde90bdd6c4ea629baea8d18e (patch)
tree6bf735164045a94468fc0fec922aa4c9270d82da
parent963db82385405d23acdc24b66c1907e29585384c (diff)
tdf#116371: export rotation of SwGrfNodecp-6.0-23
Change-Id: I42620da798a35dfada67d9a9fb23d554cc20b16f Reviewed-on: https://gerrit.libreoffice.org/66963 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/67670 Tested-by: Mike Kaganski <mike.kaganski@collabora.com>
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf116371.odtbin0 -> 13384 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport11.cxx10
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx37
3 files changed, 33 insertions, 14 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf116371.odt b/sw/qa/extras/ooxmlexport/data/tdf116371.odt
new file mode 100644
index 000000000000..257696616e8c
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf116371.odt
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
index 4163921e073f..d5e98bebfde0 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
@@ -413,6 +413,16 @@ DECLARE_OOXMLEXPORT_TEST(testInputListExport, "tdf122186_input_list.odt")
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[4]/w:t", 0);
}
+DECLARE_OOXMLEXPORT_TEST(testTdf116371, "tdf116371.odt")
+{
+ // Make sure the rotation is exported correctly, and size not distorted
+ auto xShape(getShape(1));
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(4700.0, getProperty<double>(xShape, "RotateAngle"), 10);
+ auto frameRect = getProperty<awt::Rectangle>(xShape, "FrameRect");
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(24070), frameRect.Height);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(24188), frameRect.Width);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 04f491205700..a1629f0d7210 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -4602,7 +4602,27 @@ void DocxAttributeOutput::FlyFrameGraphic( const SwGrfNode* pGrfNode, const Size
CharGrabBag(*pGrabBag);
}
- m_rExport.SdrExporter().startDMLAnchorInline(pFrameFormat, rSize);
+ rtl::Reference<sax_fastparser::FastAttributeList> xFrameAttributes(
+ FastSerializerHelper::createAttrList());
+ Size aSize = rSize;
+ if (pGrfNode)
+ {
+ const SwAttrSet& rSet = pGrfNode->GetSwAttrSet();
+ MirrorGraph eMirror = rSet.GetMirrorGrf().GetValue();
+ if (eMirror == MirrorGraph::Vertical || eMirror == MirrorGraph::Both)
+ // Mirror on the vertical axis is a horizontal flip.
+ xFrameAttributes->add(XML_flipH, "1");
+ // RES_GRFATR_ROTATION is sal_uInt16; use sal_uInt32 for multiplication later
+ if (sal_uInt32 nRot = rSet.GetRotationGrf().GetValue())
+ {
+ // RES_GRFATR_ROTATION is in 10ths of degree; convert to 100ths for macro
+ sal_uInt32 mOOXMLRot = OOX_DRAWINGML_EXPORT_ROTATE_CLOCKWISIFY(nRot*10);
+ xFrameAttributes->add(XML_rot, OString::number(mOOXMLRot));
+ aSize = pGrfNode->GetTwipSize();
+ }
+ }
+
+ m_rExport.SdrExporter().startDMLAnchorInline(pFrameFormat, aSize);
// picture description (used for pic:cNvPr later too)
::sax_fastparser::FastAttributeList* docPrattrList = FastSerializerHelper::createAttrList();
@@ -4709,25 +4729,14 @@ void DocxAttributeOutput::FlyFrameGraphic( const SwGrfNode* pGrfNode, const Size
XML_bwMode, "auto",
FSEND );
- rtl::Reference<sax_fastparser::FastAttributeList> xFrameAttributes(
- FastSerializerHelper::createAttrList());
-
- if (pGrfNode)
- {
- MirrorGraph eMirror = pGrfNode->GetSwAttrSet().GetMirrorGrf().GetValue();
- if (eMirror == MirrorGraph::Vertical || eMirror == MirrorGraph::Both)
- // Mirror on the vertical axis is a horizontal flip.
- xFrameAttributes->add(XML_flipH, "1");
- }
-
m_pSerializer->startElementNS(
XML_a, XML_xfrm, uno::Reference<xml::sax::XFastAttributeList>(xFrameAttributes.get()));
m_pSerializer->singleElementNS( XML_a, XML_off,
XML_x, "0", XML_y, "0",
FSEND );
- OString aWidth( OString::number( TwipsToEMU( rSize.Width() ) ) );
- OString aHeight( OString::number( TwipsToEMU( rSize.Height() ) ) );
+ OString aWidth( OString::number( TwipsToEMU( aSize.Width() ) ) );
+ OString aHeight( OString::number( TwipsToEMU( aSize.Height() ) ) );
m_pSerializer->singleElementNS( XML_a, XML_ext,
XML_cx, aWidth.getStr(),
XML_cy, aHeight.getStr(),