diff --git a/sw/qa/extras/ooxmlexport/data/theme-preservation.docx b/sw/qa/extras/ooxmlexport/data/theme-preservation.docx index 1c94b47be75d..2de4374da59e 100644 Binary files a/sw/qa/extras/ooxmlexport/data/theme-preservation.docx and b/sw/qa/extras/ooxmlexport/data/theme-preservation.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 4c6dcdae0992..596c292c23bd 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -1930,9 +1930,7 @@ DECLARE_OOXMLEXPORT_TEST(testThemePreservation, "theme-preservation.docx") // check theme font color value has been preserved assertXPath(pXmlDocument, "/w:document/w:body/w:p[4]/w:r[1]/w:rPr/w:color", "themeColor", "accent3"); OUString sThemeShade = getXPath(pXmlDocument, "/w:document/w:body/w:p[4]/w:r[1]/w:rPr/w:color", "themeShade"); - CPPUNIT_ASSERT_EQUAL(sThemeShade.toInt32(16), sal_Int32(0xbf)); - assertXPath(pXmlDocument, "/w:document/w:body/w:p[7]/w:r[1]/w:rPr/w:color", "themeColor", "accent1"); - assertXPath(pXmlDocument, "/w:document/w:body/w:p[7]/w:r[1]/w:rPr/w:color", "themeTint", "99"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xbf), sThemeShade.toInt32(16)); // check the themeFontLang values in settings file xmlDocPtr pXmlSettings = parseExport("word/settings.xml"); @@ -1956,8 +1954,12 @@ DECLARE_OOXMLEXPORT_TEST(testThemePreservation, "theme-preservation.docx") CPPUNIT_ASSERT_EQUAL(OUString("Trebuchet MS"), getProperty(getParagraph(5, "Major theme font"), "CharFontName")); - // check the paragraph background theme color has been preserved + // check the paragraph background pattern has been preserved including theme colors + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "val", "thinHorzStripe"); assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeFill", "text2"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeFillTint", "33"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeColor", "accent1"); + assertXPath(pXmlDocument, "/w:document/w:body/w:p[6]/w:pPr/w:shd", "themeShade", "80"); } DECLARE_OOXMLEXPORT_TEST(testTableThemePreservation, "table-theme-preservation.docx") diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index f357a6f3b389..d3cfad8d2f42 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -6867,14 +6867,13 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) } else if ( !m_rExport.bOutPageDescs ) { - if( !m_pBackgroundAttrList ) - m_pBackgroundAttrList = m_pSerializer->createAttrList(); - // compare fill color with the original fill color OString sOriginalFill = rtl::OUStringToOString( - m_pBackgroundAttrList->getOptionalValue( FSNS( XML_w, XML_fill ) ), RTL_TEXTENCODING_UTF8 ); - if( sOriginalFill.isEmpty() ) + m_sOriginalBackgroundColor, RTL_TEXTENCODING_UTF8 ); + + if( !m_pBackgroundAttrList ) { + m_pBackgroundAttrList = m_pSerializer->createAttrList(); m_pBackgroundAttrList->add( FSNS( XML_w, XML_fill ), sColor.getStr() ); m_pBackgroundAttrList->add( FSNS( XML_w, XML_val ), "clear" ); } @@ -6886,6 +6885,7 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) m_pBackgroundAttrList->add( FSNS( XML_w, XML_fill ), sColor.getStr() ); m_pBackgroundAttrList->add( FSNS( XML_w, XML_val ), "clear" ); } + m_sOriginalBackgroundColor = ""; } } @@ -7272,7 +7272,7 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) { uno::Sequence aGrabBagSeq; i->second >>= aGrabBagSeq; - OUString sVal, sOriginalFill, sShdColor, + OUString sVal, sShdFill, sShdColor, sThemeColor, sThemeTint, sThemeShade, sThemeFill, sThemeFillTint, sThemeFillShade; for (sal_Int32 j=0; j < aGrabBagSeq.getLength(); ++j) @@ -7288,13 +7288,15 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) else if (aGrabBagSeq[j].Name == "themeShade") aGrabBagSeq[j].Value >>= sThemeShade; else if (aGrabBagSeq[j].Name == "fill") - aGrabBagSeq[j].Value >>= sOriginalFill; + aGrabBagSeq[j].Value >>= sShdFill; else if (aGrabBagSeq[j].Name == "themeFill") aGrabBagSeq[j].Value >>= sThemeFill; else if (aGrabBagSeq[j].Name == "themeFillTint") aGrabBagSeq[j].Value >>= sThemeFillTint; else if (aGrabBagSeq[j].Name == "themeFillShade") aGrabBagSeq[j].Value >>= sThemeFillShade; + else if (aGrabBagSeq[j].Name == "originalColor") + aGrabBagSeq[j].Value >>= m_sOriginalBackgroundColor; } AddToAttrList(m_pBackgroundAttrList, 9, FSNS(XML_w, XML_val), OUStringToOString(sVal, RTL_TEXTENCODING_UTF8).getStr(), @@ -7302,7 +7304,7 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) FSNS(XML_w, XML_themeColor), OUStringToOString(sThemeColor, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeTint), OUStringToOString(sThemeTint, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeShade), OUStringToOString(sThemeShade, RTL_TEXTENCODING_UTF8).getStr(), - FSNS(XML_w, XML_fill), OUStringToOString(sOriginalFill, RTL_TEXTENCODING_UTF8).getStr(), + FSNS(XML_w, XML_fill), OUStringToOString(sShdFill, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeFill), OUStringToOString(sThemeFill, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeFillTint), OUStringToOString(sThemeFillTint, RTL_TEXTENCODING_UTF8).getStr(), FSNS(XML_w, XML_themeFillShade), OUStringToOString(sThemeFillShade, RTL_TEXTENCODING_UTF8).getStr()); diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 9202121039b9..9e015119b037 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -709,6 +709,7 @@ private: ::sax_fastparser::FastAttributeList *m_pColorAttrList; /// Attributes of the paragraph background ::sax_fastparser::FastAttributeList *m_pBackgroundAttrList; + OUString m_sOriginalBackgroundColor; OUString m_hyperLinkAnchor; bool m_endPageRef; ::docx::FootnotesList *m_pFootnotesList;