summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-01-12 09:06:49 +0100
committerCaolán McNamara <caolanm@redhat.com>2016-02-02 12:08:18 +0000
commit15f02a66af987cb7dc95b443657d8eebf0d6c0bd (patch)
tree87a6b7041bae210665e130d1d9d90af0a7d22dcf /sw
parent44c3447b9be9c8f70932cdbfc25e9b0961a3d0eb (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>
Diffstat (limited to 'sw')
-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.cxx7
-rw-r--r--sw/qa/extras/rtfimport/rtfimport.cxx7
-rw-r--r--sw/source/filter/ww8/docxexport.cxx16
-rw-r--r--sw/source/filter/ww8/docxexport.hxx3
-rw-r--r--sw/source/filter/ww8/rtfexport.cxx24
-rw-r--r--sw/source/filter/ww8/wrtww8.cxx16
-rw-r--r--sw/source/filter/ww8/wrtww8.hxx2
8 files changed, 50 insertions, 27 deletions
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.