diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-01-12 09:06:49 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-02-02 12:08:18 +0000 |
commit | 15f02a66af987cb7dc95b443657d8eebf0d6c0bd (patch) | |
tree | 87a6b7041bae210665e130d1d9d90af0a7d22dcf | |
parent | 44c3447b9be9c8f70932cdbfc25e9b0961a3d0eb (diff) |
tdf#61511 RTF export: handle page background solid color fill
(cherry picked from commit b0058366190b63fcbc112b43d387f7600a7fe55d)
Change-Id: I562419b6d4fb791ef5b255effe9a4510d930bdbc
Reviewed-on: https://gerrit.libreoffice.org/21884
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | include/svtools/rtfkeywd.hxx | 1 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/data/page-background.rtf (renamed from sw/qa/extras/rtfimport/data/page-background.rtf) | 2 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport.cxx | 7 | ||||
-rw-r--r-- | sw/qa/extras/rtfimport/rtfimport.cxx | 7 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxexport.cxx | 16 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxexport.hxx | 3 | ||||
-rw-r--r-- | sw/source/filter/ww8/rtfexport.cxx | 24 | ||||
-rw-r--r-- | sw/source/filter/ww8/wrtww8.cxx | 16 | ||||
-rw-r--r-- | sw/source/filter/ww8/wrtww8.hxx | 2 |
9 files changed, 51 insertions, 27 deletions
diff --git a/include/svtools/rtfkeywd.hxx b/include/svtools/rtfkeywd.hxx index d57fd13feb53..55d97f51bd16 100644 --- a/include/svtools/rtfkeywd.hxx +++ b/include/svtools/rtfkeywd.hxx @@ -1207,6 +1207,7 @@ #define LO_STRING_SVTOOLS_RTF_LEVELPICTURE "\\levelpicture" #define LO_STRING_SVTOOLS_RTF_BRDRSH "\\brdrsh" #define LO_STRING_SVTOOLS_RTF_GENERATOR "\\generator" +#define LO_STRING_SVTOOLS_RTF_VIEWBKSP "\\viewbksp" #endif // INCLUDED_SVTOOLS_RTFKEYWD_HXX diff --git a/sw/qa/extras/rtfimport/data/page-background.rtf b/sw/qa/extras/rtfexport/data/page-background.rtf index e19d2d4c3547..68c3ccf8dc9c 100644 --- a/sw/qa/extras/rtfimport/data/page-background.rtf +++ b/sw/qa/extras/rtfexport/data/page-background.rtf @@ -1,6 +1,6 @@ {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0 \viewbksp1 -{\*\background +{\*\background {\shp {\*\shpinst\shpleft0\shptop0\shpright0\shpbottom0\shpfhdr0\shpbxmargin\shpbxignore\shpbymargin\shpbyignore\shpwr0\shpwrk0\shpfblwtxt1 {\sp diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx index 58dadbc7dddd..f39e01345fc7 100644 --- a/sw/qa/extras/rtfexport/rtfexport.cxx +++ b/sw/qa/extras/rtfexport/rtfexport.cxx @@ -966,6 +966,13 @@ DECLARE_RTFEXPORT_TEST(testTdf94377, "tdf94377.rtf") CPPUNIT_ASSERT_EQUAL(12.f, getProperty<float>(getRun(getParagraphOfText(2, xText, "asdf12"), 1), "CharHeight")); } +DECLARE_RTFEXPORT_TEST(testPageBackground, "page-background.rtf") +{ + // The problem was that \background was ignored. + uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName(DEFAULT_STYLE), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x92D050), getProperty<sal_Int32>(xPageStyle, "BackColor")); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index 24325c3b8a42..f46636130ee3 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -1221,13 +1221,6 @@ DECLARE_RTFIMPORT_TEST(testFdo64671, "fdo64671.rtf") getRun(getParagraph(1), 1, OUString("\xC5\xBD", 2, RTL_TEXTENCODING_UTF8)); } -DECLARE_RTFIMPORT_TEST(testPageBackground, "page-background.rtf") -{ - // The problem was that \background was ignored. - uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName(DEFAULT_STYLE), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(sal_Int32(0x92D050), getProperty<sal_Int32>(xPageStyle, "BackColor")); -} - DECLARE_RTFIMPORT_TEST(testFdo81944, "fdo81944.rtf") { // font properties in style were not imported diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx index b4db87fc8417..1be1c997471b 100644 --- a/sw/source/filter/ww8/docxexport.cxx +++ b/sw/source/filter/ww8/docxexport.cxx @@ -1320,22 +1320,6 @@ bool DocxExport::isMirroredMargin() return bMirroredMargins; } -boost::optional<SvxBrushItem> DocxExport::getBackground() -{ - boost::optional<SvxBrushItem> oRet; - const SwFrameFormat &rFormat = m_pDoc->GetPageDesc(0).GetMaster(); - SvxBrushItem aBrush(RES_BACKGROUND); - SfxItemState eState = rFormat.GetBackgroundState(aBrush); - - if (SfxItemState::SET == eState) - { - // The 'color' is set for the first page style - take it and use it as the background color of the entire DOCX - if (aBrush.GetColor().GetColor() != COL_AUTO) - oRet.reset(aBrush); - } - return oRet; -} - void DocxExport::WriteMainText() { // setup the namespaces diff --git a/sw/source/filter/ww8/docxexport.hxx b/sw/source/filter/ww8/docxexport.hxx index cc1854de9e7b..370f54e6c272 100644 --- a/sw/source/filter/ww8/docxexport.hxx +++ b/sw/source/filter/ww8/docxexport.hxx @@ -242,9 +242,6 @@ private: /// Write word/embeddings/Worksheet[n].xlsx void WriteEmbeddings(); - /// Get background color of the document, if there is one. - boost::optional<SvxBrushItem> getBackground(); - /// return true if Page Layout is set as Mirrored bool isMirroredMargin(); diff --git a/sw/source/filter/ww8/rtfexport.cxx b/sw/source/filter/ww8/rtfexport.cxx index 29e4ae0436ad..4fed09fa55cd 100644 --- a/sw/source/filter/ww8/rtfexport.cxx +++ b/sw/source/filter/ww8/rtfexport.cxx @@ -386,6 +386,30 @@ void RtfExport::WriteMainText() { SAL_INFO("sw.rtf", OSL_THIS_FUNC << " start"); + if (boost::optional<SvxBrushItem> oBrush = getBackground()) + { + Strm().WriteCharPtr(LO_STRING_SVTOOLS_RTF_VIEWBKSP).WriteChar('1'); + Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_BACKGROUND); + Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_SHP); + Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPINST); + + std::vector< std::pair<OString, OString> > aProperties; + aProperties.push_back(std::make_pair<OString, OString>("shapeType", "1")); + aProperties.push_back(std::make_pair<OString, OString>("fillColor", OString::number(msfilter::util::BGRToRGB(oBrush->GetColor().GetColor())))); + for (size_t i = 0; i < aProperties.size(); ++i) + { + Strm().WriteCharPtr("{" OOO_STRING_SVTOOLS_RTF_SP "{"); + Strm().WriteCharPtr(OOO_STRING_SVTOOLS_RTF_SN " "); + Strm().WriteCharPtr(aProperties[i].first.getStr()); + Strm().WriteCharPtr("}{" OOO_STRING_SVTOOLS_RTF_SV " "); + Strm().WriteCharPtr(aProperties[i].second.getStr()); + Strm().WriteCharPtr("}}"); + } + Strm().WriteChar('}'); // shpinst + Strm().WriteChar('}'); // shp + Strm().WriteChar('}'); // background + } + SwTableNode* pTableNode = m_pCurPam->GetNode().FindTableNode(); if (m_pWriter && m_pWriter->bWriteOnlyFirstTable && pTableNode != nullptr) diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index 76182e223a2d..d5376dac5818 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -1386,6 +1386,22 @@ void WW8Export::AppendBookmark( const OUString& rName, bool bSkip ) m_pBkmks->Append( nSttCP, rName ); } +boost::optional<SvxBrushItem> MSWordExportBase::getBackground() +{ + boost::optional<SvxBrushItem> oRet; + const SwFrameFormat &rFormat = m_pDoc->GetPageDesc(0).GetMaster(); + SvxBrushItem aBrush(RES_BACKGROUND); + SfxItemState eState = rFormat.GetBackgroundState(aBrush); + + if (SfxItemState::SET == eState) + { + // The 'color' is set for the first page style - take it and use it as the background color of the entire DOCX + if (aBrush.GetColor().GetColor() != COL_AUTO) + oRet.reset(aBrush); + } + return oRet; +} + // #i120928 collect all the graphics of bullets applied to paragraphs int MSWordExportBase::CollectGrfsOfBullets() { diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx index 834a55dbdf1f..42afeae0f335 100644 --- a/sw/source/filter/ww8/wrtww8.hxx +++ b/sw/source/filter/ww8/wrtww8.hxx @@ -861,6 +861,8 @@ protected: void SetCurPam(sal_uLong nStt, sal_uLong nEnd); + /// Get background color of the document, if there is one. + boost::optional<SvxBrushItem> getBackground(); /// Populates m_vecBulletPic with all the bullet graphics used by numberings. int CollectGrfsOfBullets(); /// Write the numbering picture bullets. |