summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacobo Aragunde Pérez <jaragunde@igalia.com>2014-06-06 13:43:06 +0200
committerJacobo Aragunde Pérez <jaragunde@igalia.com>2014-06-06 14:01:05 +0200
commit5a09788e3507b0c5cb53e4d489e3a15e57c57f05 (patch)
tree7be063140351bc69eb05ccd5f2695b3fd1c92109
parentd2b0a12727463e3ddc0dc17fa0b4ce561dc3ca3d (diff)
fdo#79558: Do not overwrite w:shd value
When a w:shd has some pattern with two colors, LO blends both to render the paragraph background. We must compare that blended color with the paragraph color on export to know if the user has edited it or not. We were using the w:fill attribute to compare, but that was incorrect. Modified an existing unit test to check this behaviour. The unit test had to be retouched because Word remove some redundant information from the original .docx file when I saved it again with some background changes. (cherry-picked from commit 1534c3363336003c4f84cfec1bf988fef6663f8a) Change-Id: Ia2f1ddc4afd2637e1d87b6eccd441c26853045c4
-rw-r--r--sw/qa/extras/ooxmlexport/data/theme-preservation.docxbin15154 -> 15173 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport.cxx10
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx18
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.hxx1
4 files changed, 17 insertions, 12 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/theme-preservation.docx b/sw/qa/extras/ooxmlexport/data/theme-preservation.docx
index 1c94b47be75d..2de4374da59e 100644
--- a/sw/qa/extras/ooxmlexport/data/theme-preservation.docx
+++ b/sw/qa/extras/ooxmlexport/data/theme-preservation.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index ff3e138c664c..fd98235793fa 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -1928,9 +1928,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");
@@ -1954,8 +1952,12 @@ DECLARE_OOXMLEXPORT_TEST(testThemePreservation, "theme-preservation.docx")
CPPUNIT_ASSERT_EQUAL(OUString("Trebuchet MS"),
getProperty<OUString>(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 5bfce1260863..f16fdf6dcd53 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -6784,14 +6784,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" );
}
@@ -6803,6 +6802,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 = "";
}
}
@@ -7189,7 +7189,7 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem)
{
uno::Sequence<beans::PropertyValue> 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)
@@ -7205,13 +7205,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(),
@@ -7219,7 +7221,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 2c0472d5cab6..76d98cc1c9ea 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -705,6 +705,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;