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. Change-Id: Ia2f1ddc4afd2637e1d87b6eccd441c26853045c4
This commit is contained in:
Binary file not shown.
@@ -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<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")
|
||||
|
@@ -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<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)
|
||||
@@ -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());
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user