diff options
-rw-r--r-- | sw/qa/extras/rtfexport/data/abi10039.odt | bin | 0 -> 12293 bytes | |||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport.cxx | 6 | ||||
-rw-r--r-- | sw/source/filter/ww8/rtfattributeoutput.cxx | 22 |
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 Binary files differnew file mode 100644 index 000000000000..4d5dde5af96a --- /dev/null +++ b/sw/qa/extras/rtfexport/data/abi10039.odt 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) { |