Kaydet (Commit) 943a534a authored tarafından Miklos Vajna's avatar Miklos Vajna

tdf#123684 PPTX import: fix wrong background color for <p:sp useBgFill="1">

Regression from commit 59339dec
(tdf#105150 PPTX import: try harder to handle <p:sp useBgFill="1">,
2017-01-06), the problem was that we gave a white solid fill to a shape
which is meant to be transparent.

Fix the problem by limiting the scope of the mentioned commit to solid
colors only, and also extend to code to look for background fill from
the masterpage as well. This allows not hardcoding the white solid fill
and leaves the fill style of shapes as transparent where the slide
background is a bitmap or other more complex fill type.

Change-Id: I0063e88d510250652d2b14856df3bd431681422d
Reviewed-on: https://gerrit.libreoffice.org/71107Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
üst 1ea226c6
......@@ -106,13 +106,27 @@ ContextHandlerRef PPTShapeGroupContext::onCreateContext( sal_Int32 aElementToken
oox::drawingml::FillPropertiesPtr pBackgroundPropertiesPtr = mpSlidePersistPtr->getBackgroundProperties();
if (!pBackgroundPropertiesPtr)
{
// The shape wants a background, but the slide doesn't have
// one: default to white.
pBackgroundPropertiesPtr.reset(new oox::drawingml::FillProperties);
pBackgroundPropertiesPtr->moFillType = XML_solidFill;
pBackgroundPropertiesPtr->maFillColor.setSrgbClr(0xFFFFFF);
// The shape wants a background, but the slide doesn't have one.
SlidePersistPtr pMaster = mpSlidePersistPtr->getMasterPersist();
if (pMaster)
{
oox::drawingml::FillPropertiesPtr pMasterBackground
= pMaster->getBackgroundProperties();
if (pMasterBackground)
{
if (pMasterBackground->moFillType.has()
&& pMasterBackground->moFillType.get() == XML_solidFill)
{
// Master has a solid background, use that.
pBackgroundPropertiesPtr = pMasterBackground;
}
}
}
}
if (pBackgroundPropertiesPtr)
{
pShape->getFillProperties().assignUsed(*pBackgroundPropertiesPtr);
}
pShape->getFillProperties().assignUsed( *pBackgroundPropertiesPtr );
}
pShape->setModelId(rAttribs.getString( XML_modelId ).get());
return new PPTShapeContext( *this, mpSlidePersistPtr, mpGroupShapePtr, pShape );
......
......@@ -169,6 +169,7 @@ public:
void testTdf104445();
void testTdf105150();
void testTdf105150PPT();
void testTdf123684();
void testTdf100926();
void testTdf89064();
void testTdf108925();
......@@ -259,6 +260,7 @@ public:
CPPUNIT_TEST(testTdf104445);
CPPUNIT_TEST(testTdf105150);
CPPUNIT_TEST(testTdf105150PPT);
CPPUNIT_TEST(testTdf123684);
CPPUNIT_TEST(testTdf100926);
CPPUNIT_TEST(testPatternImport);
CPPUNIT_TEST(testTdf89064);
......@@ -1772,6 +1774,20 @@ void SdImportTest::testTdf105150()
xDocShRef->DoClose();
}
void SdImportTest::testTdf123684()
{
sd::DrawDocShellRef xDocShRef
= loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/tdf123684.pptx"), PPTX);
const SdrPage* pPage = GetPage(1, xDocShRef);
const SdrObject* pObj = pPage->GetObj(0);
auto& rFillStyleItem
= dynamic_cast<const XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
// Without the accompanying fix in place, this test would have failed with 'Expected: 0; Actual:
// 1', i.e. the shape's fill was FillStyle_SOLID, making the text of the shape unreadable.
CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, rFillStyleItem.GetValue());
xDocShRef->DoClose();
}
void SdImportTest::testTdf105150PPT()
{
sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/ppt/tdf105150.ppt"), PPT);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment