tdf#130812 DOC import: fix unexpected transparency of text

DOC can have black with transparency set to 0xff, and that is meant to
be just black. Allow COL_AUTO, though; the rendering will not consider
that as transparent anyway.

Other than that, DOC does not support text with transparency, it's a
DOCX-only feature.

Change-Id: I33f61b54b8ebd7958845063ae61900182d6f5e80
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89321
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
This commit is contained in:
Miklos Vajna 2020-02-24 09:44:36 +01:00
parent 5e8b6d3b72
commit 634a9ba15d
4 changed files with 20 additions and 0 deletions

View file

@ -29,6 +29,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_ww8import, \
sfx \
svl \
sw \
tl \
utl \
))

Binary file not shown.

View file

@ -133,6 +133,18 @@ DECLARE_WW8IMPORT_TEST(testTdf106291, "tdf106291.doc")
CPPUNIT_ASSERT(cellHeight.toInt32() > 200); // height might depend on font size
}
DECLARE_WW8IMPORT_TEST(testTransparentText, "transparent-text.doc")
{
uno::Reference<text::XText> xHeaderText = getProperty<uno::Reference<text::XText>>(
getStyles("PageStyles")->getByName("Standard"), "HeaderText");
uno::Reference<text::XTextRange> xParagraph = getParagraphOfText(3, xHeaderText);
// Without the accompanying fix in place, this test would have failed: transparency was set to
// 100%, so the text was not readable.
sal_Int32 nExpected(COL_BLACK);
sal_Int32 nActual(getProperty<sal_Int16>(xParagraph, "CharTransparence"));
CPPUNIT_ASSERT_EQUAL(nExpected, nActual);
}
DECLARE_WW8IMPORT_TEST( testTdf105570, "tdf105570.doc" )
{
/*****

View file

@ -3589,6 +3589,13 @@ void SwWW8ImplReader::Read_TextForeColor(sal_uInt16, const sal_uInt8* pData, sho
else
{
Color aColor(msfilter::util::BGRToRGB(SVBT32ToUInt32(pData)));
// At least when transparency is 0xff and the color is black, Word renders that as black.
if (aColor.GetTransparency() && aColor != COL_AUTO)
{
aColor.SetTransparency(0);
}
NewAttr(SvxColorItem(aColor, RES_CHRATR_COLOR));
if (m_pCurrentColl && m_xStyles)
m_xStyles->mbTextColChanged = true;