summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-09-05 10:36:08 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-09-05 13:41:28 +0200
commit845fb7bf6753ec9582d0b1d1c9b4276aa9e6c65e (patch)
treea4a2575b933234d5e02ae6c04a579316ede29aa6
parent645bccf7a5b91d794d387286deca583ea41f3516 (diff)
abi#10039 RTF export: support page-anchored frames
Change-Id: I71c961799f76446cdf24faeba86f881ae02ffe3b
-rw-r--r--sw/qa/extras/rtfexport/data/abi10039.odtbin0 -> 12293 bytes
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx6
-rw-r--r--sw/source/filter/ww8/rtfattributeoutput.cxx22
3 files changed, 21 insertions, 7 deletions
diff --git a/sw/qa/extras/rtfexport/data/abi10039.odt b/sw/qa/extras/rtfexport/data/abi10039.odt
new file mode 100644
index 000000000000..4d5dde5af96a
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/abi10039.odt
Binary files differ
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index 63df38948632..f11f0bbd2d5a 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -680,6 +680,12 @@ DECLARE_RTFEXPORT_TEST(testPictureWrapPolygon, "picture-wrap-polygon.rtf")
CPPUNIT_ASSERT_EQUAL(sal_Int32(convertTwipToMm100(-67)), getProperty<sal_Int32>(getShape(1), "VertOrientPosition"));
}
+DECLARE_RTFEXPORT_TEST(testAbi10039, "abi10039.odt")
+{
+ // Make sure we don't just crash on export, and additionally the shape should not be inline (as it's at-page anchored originally).
+ CPPUNIT_ASSERT(text::TextContentAnchorType_AS_CHARACTER != getProperty<text::TextContentAnchorType>(getShape(1), "AnchorType"));
+}
+
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 308e1f2f462d..616631b7be3a 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -3696,8 +3696,16 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw
aRendered.Height() = rS.GetHeight();
}
- const SwPosition* pAnchor = pFlyFrmFmt->GetAnchor().GetCntntAnchor();
- sw::Frame aFrame(*pFlyFrmFmt, *pAnchor);
+ sw::Frame* pFrame = 0;
+ for (sw::FrameIter it = m_rExport.maFrames.begin(); it != m_rExport.maFrames.end(); ++it)
+ {
+ if (pFlyFrmFmt == &it->GetFrmFmt())
+ {
+ pFrame = &(*it);
+ break;
+ }
+ }
+ assert(pFrame);
/*
If the graphic is not of type WMF then we will have to store two
@@ -3706,7 +3714,7 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw
a wmf already then we don't need any such wrapping
*/
bool bIsWMF = pBLIPType && std::strcmp(pBLIPType, OOO_STRING_SVTOOLS_RTF_WMETAFILE) == 0;
- if (aFrame.IsInline())
+ if (pFrame->IsInline())
{
if (!bIsWMF)
m_rExport.Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPPICT);
@@ -3715,9 +3723,9 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw
{
m_rExport.Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_SHP "{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPINST);
m_pFlyFrameSize = &aRendered;
- m_rExport.mpParentFrame = &aFrame;
+ m_rExport.mpParentFrame = pFrame;
m_rExport.bOutFlyFrmAttrs = m_rExport.bRTFFlySyntax = true;
- m_rExport.OutputFormat(aFrame.GetFrmFmt(), false, false, true);
+ m_rExport.OutputFormat(pFrame->GetFrmFmt(), false, false, true);
m_rExport.bOutFlyFrmAttrs = m_rExport.bRTFFlySyntax = false;
m_rExport.mpParentFrame = NULL;
m_pFlyFrameSize = 0;
@@ -3760,7 +3768,7 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw
m_rExport.Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_SP "{" OOO_STRING_SVTOOLS_RTF_SN " pib" "}{" OOO_STRING_SVTOOLS_RTF_SV " ");
}
- bool bWritePicProp = aFrame.IsInline();
+ bool bWritePicProp = pFrame->IsInline();
if (pBLIPType)
ExportPICT(pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport, &m_rExport.Strm(), bWritePicProp);
else
@@ -3775,7 +3783,7 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw
ExportPICT(pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport, &m_rExport.Strm(), bWritePicProp);
}
- if (aFrame.IsInline())
+ if (pFrame->IsInline())
{
if (!bIsWMF)
{