Kaydet (Commit) 845fb7bf authored tarafından Miklos Vajna's avatar Miklos Vajna

abi#10039 RTF export: support page-anchored frames

Change-Id: I71c961799f76446cdf24faeba86f881ae02ffe3b
üst 645bccf7
...@@ -680,6 +680,12 @@ DECLARE_RTFEXPORT_TEST(testPictureWrapPolygon, "picture-wrap-polygon.rtf") ...@@ -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")); 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 #endif
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
...@@ -3696,8 +3696,16 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw ...@@ -3696,8 +3696,16 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw
aRendered.Height() = rS.GetHeight(); aRendered.Height() = rS.GetHeight();
} }
const SwPosition* pAnchor = pFlyFrmFmt->GetAnchor().GetCntntAnchor(); sw::Frame* pFrame = 0;
sw::Frame aFrame(*pFlyFrmFmt, *pAnchor); 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 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 ...@@ -3706,7 +3714,7 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw
a wmf already then we don't need any such wrapping a wmf already then we don't need any such wrapping
*/ */
bool bIsWMF = pBLIPType && std::strcmp(pBLIPType, OOO_STRING_SVTOOLS_RTF_WMETAFILE) == 0; bool bIsWMF = pBLIPType && std::strcmp(pBLIPType, OOO_STRING_SVTOOLS_RTF_WMETAFILE) == 0;
if (aFrame.IsInline()) if (pFrame->IsInline())
{ {
if (!bIsWMF) if (!bIsWMF)
m_rExport.Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPPICT); 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 ...@@ -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_rExport.Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_SHP "{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPINST);
m_pFlyFrameSize = &aRendered; m_pFlyFrameSize = &aRendered;
m_rExport.mpParentFrame = &aFrame; m_rExport.mpParentFrame = pFrame;
m_rExport.bOutFlyFrmAttrs = m_rExport.bRTFFlySyntax = true; 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.bOutFlyFrmAttrs = m_rExport.bRTFFlySyntax = false;
m_rExport.mpParentFrame = NULL; m_rExport.mpParentFrame = NULL;
m_pFlyFrameSize = 0; m_pFlyFrameSize = 0;
...@@ -3760,7 +3768,7 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw ...@@ -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 " "); 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) if (pBLIPType)
ExportPICT(pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport, &m_rExport.Strm(), bWritePicProp); ExportPICT(pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport, &m_rExport.Strm(), bWritePicProp);
else else
...@@ -3775,7 +3783,7 @@ void RtfAttributeOutput::FlyFrameGraphic(const SwFlyFrmFmt* pFlyFrmFmt, const Sw ...@@ -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); ExportPICT(pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport, &m_rExport.Strm(), bWritePicProp);
} }
if (aFrame.IsInline()) if (pFrame->IsInline())
{ {
if (!bIsWMF) if (!bIsWMF)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment