summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2018-10-15 21:11:24 +0200
committerAndras Timar <andras.timar@collabora.com>2018-10-20 22:51:51 +0200
commit1c76531b1da87386b54dce42471fc1dbb7fd9701 (patch)
tree5e5ff494bcefe0c596d597df123cd2618f43b04c /sw
parent78ce62fdcbbb6501eb1d63dbe52cad1fd22f2119 (diff)
tdf#112520 RTF export: write ZOrder only for toplevel shapes
RTF export at the moment exports children of group shapes as a flat shape list. This means that the order inside the group shape is not relevant for the toplevel ZOrder, so just don't write it. (cherry picked from commit 2b920bdc12f3bf3a196ec0d6d59043a68e663e33) Reviewed-on: https://gerrit.libreoffice.org/61904 Tested-by: Xisco Faulí <xiscofauli@libreoffice.org> Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 1c6bea8e677861d201e9b21b5f0e356f77dabaaf) Change-Id: I870707cb28c2f177c0e5d9cf5328260e76b661f3
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/extras/rtfexport/data/tdf112520.docxbin0 -> 13279 bytes
-rw-r--r--sw/qa/extras/rtfexport/rtfexport3.cxx21
-rw-r--r--sw/source/filter/ww8/rtfsdrexport.cxx12
-rw-r--r--sw/source/filter/ww8/rtfsdrexport.hxx2
4 files changed, 32 insertions, 3 deletions
diff --git a/sw/qa/extras/rtfexport/data/tdf112520.docx b/sw/qa/extras/rtfexport/data/tdf112520.docx
new file mode 100644
index 000000000000..31c5a0afc21e
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/tdf112520.docx
Binary files differ
diff --git a/sw/qa/extras/rtfexport/rtfexport3.cxx b/sw/qa/extras/rtfexport/rtfexport3.cxx
index 1ad5b9242426..55d3e9fa237d 100644
--- a/sw/qa/extras/rtfexport/rtfexport3.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport3.cxx
@@ -16,6 +16,7 @@
#include <com/sun/star/text/XPageCursor.hpp>
#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
#include <com/sun/star/text/XTextColumns.hpp>
+#include <com/sun/star/text/TextContentAnchorType.hpp>
#include <com/sun/star/text/XTextRangeCompare.hpp>
class Test : public SwModelTestBase
@@ -152,6 +153,26 @@ DECLARE_RTFEXPORT_TEST(testTdf117505, "tdf117505.odt")
getProperty<sal_Int32>(xFirstPage, "HeaderHeight"));
}
+DECLARE_RTFEXPORT_TEST(testTdf112520, "tdf112520.docx")
+{
+ if (!mbExported)
+ return;
+
+ // Assert that the white shape is on top of the yellow one.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0xffff00),
+ getProperty<sal_Int32>(getShape(2), "FillColor"));
+ CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER,
+ getProperty<text::TextContentAnchorType>(getShape(2), "AnchorType"));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0xffffff),
+ getProperty<sal_Int32>(getShape(3), "FillColor"));
+ // Without the accompanying fix in place, this test would have failed with
+ // 'expected: 4, actual: 2'.
+ // This means the draw page was 0/at-char/white, 1/at-char/yellow, 2/at-page/white,
+ // instead of the good 0/at-page/white, 1/at-char/yellow, 2/at-char/white.
+ CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER,
+ getProperty<text::TextContentAnchorType>(getShape(3), "AnchorType"));
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/rtfsdrexport.cxx b/sw/source/filter/ww8/rtfsdrexport.cxx
index 1a898b0906ab..fe3663c5aa21 100644
--- a/sw/source/filter/ww8/rtfsdrexport.cxx
+++ b/sw/source/filter/ww8/rtfsdrexport.cxx
@@ -87,10 +87,11 @@ void RtfSdrExport::CloseContainer()
sal_uInt32 RtfSdrExport::EnterGroup(const OUString& /*rShapeName*/,
const tools::Rectangle* /*pRect*/)
{
+ m_bInGroup = true;
return GenerateShapeId();
}
-void RtfSdrExport::LeaveGroup() { /* noop */}
+void RtfSdrExport::LeaveGroup() { m_bInGroup = false; }
void RtfSdrExport::AddShape(sal_uInt32 nShapeType, ShapeFlag nShapeFlags, sal_uInt32 /*nShapeId*/)
{
@@ -556,8 +557,13 @@ sal_Int32 RtfSdrExport::StartShape()
m_rAttrOutput.RunText().append(OOO_STRING_SVTOOLS_RTF_SHPBYIGNORE);
// Write ZOrder.
- m_rAttrOutput.RunText().append(OOO_STRING_SVTOOLS_RTF_SHPZ);
- m_rAttrOutput.RunText().append(OString::number(m_pSdrObject->GetOrdNum()));
+ if (!m_bInGroup)
+ {
+ // Order inside the group shape is not relevant for the flat shape list
+ // we write.
+ m_rAttrOutput.RunText().append(OOO_STRING_SVTOOLS_RTF_SHPZ);
+ m_rAttrOutput.RunText().append(OString::number(m_pSdrObject->GetOrdNum()));
+ }
for (auto it = m_aShapeProps.rbegin(); it != m_aShapeProps.rend(); ++it)
lcl_AppendSP(m_rAttrOutput.RunText(), (*it).first.getStr(), (*it).second);
diff --git a/sw/source/filter/ww8/rtfsdrexport.hxx b/sw/source/filter/ww8/rtfsdrexport.hxx
index 894089e9ce39..0eb118f03be7 100644
--- a/sw/source/filter/ww8/rtfsdrexport.hxx
+++ b/sw/source/filter/ww8/rtfsdrexport.hxx
@@ -57,6 +57,8 @@ class RtfSdrExport final : public EscherEx
/// Remember which shape types we had already written.
std::unique_ptr<bool[]> m_pShapeTypeWritten;
+ bool m_bInGroup = false;
+
public:
explicit RtfSdrExport(RtfExport& rExport);
~RtfSdrExport() override;