sd theme: add rendering for shape fill color effects

Only the no-effects variant was working previously.

Change-Id: I50811a4c49d19dc801f0d1c841cbbdb2fae1ad60
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133297
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
This commit is contained in:
Miklos Vajna
2022-04-21 20:08:06 +02:00
parent 91e0314d46
commit 1f2a07e06b
3 changed files with 22 additions and 0 deletions

Binary file not shown.

View File

@@ -98,6 +98,13 @@ CPPUNIT_TEST_FIXTURE(Test, testThemeChange)
xShape4->getPropertyValue("FillColorTheme") >>= nColorTheme;
// 4 means accent1, this was -1 without the PPTX import bit in place.
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), nColorTheme);
uno::Reference<beans::XPropertySet> xShape5(xDrawPageShapes->getByIndex(5), uno::UNO_QUERY);
// Blue, lighter.
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0xb4c7e7), GetShapeFillColor(xShape5));
// Set theme index to accent 1 & effects till PPTX import is missing.
xShape5->setPropertyValue("FillColorTheme", uno::makeAny(static_cast<sal_Int16>(4)));
xShape5->setPropertyValue("FillColorLumMod", uno::makeAny(static_cast<sal_Int16>(4000)));
xShape5->setPropertyValue("FillColorLumOff", uno::makeAny(static_cast<sal_Int16>(6000)));
// When changing the master slide of slide 1 to use the theme of the second master slide:
uno::Reference<drawing::XMasterPageTarget> xDrawPage2(
@@ -126,6 +133,12 @@ CPPUNIT_TEST_FIXTURE(Test, testThemeChange)
// - Expected: 9486886 (#90c226, green)
// - Actual : 4485828 (#4472c4, blue)
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0x90c226), GetShapeFillColor(xShape4));
// Green, lighter:
// Without the accompanying fix in place, this test would have failed with:
// - Expected: 14020002 (#d5eda2, light green)
// - Actual : 9486886 (#90c226, green)
// i.e. the "light" effect on green was not applied.
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0xd5eda2), GetShapeFillColor(xShape5));
}
}

View File

@@ -78,6 +78,15 @@ void UpdateFillColorSet(const uno::Reference<beans::XPropertySet>& xShape, const
}
Color aColor = rColorSet.getColor(nFillColorTheme);
sal_Int32 nFillColorLumMod{};
xShape->getPropertyValue(UNO_NAME_FILLCOLOR_LUM_MOD) >>= nFillColorLumMod;
sal_Int32 nFillColorLumOff{};
xShape->getPropertyValue(UNO_NAME_FILLCOLOR_LUM_OFF) >>= nFillColorLumOff;
if (nFillColorLumMod != 10000 || nFillColorLumOff != 0)
{
aColor.ApplyLumModOff(nFillColorLumMod, nFillColorLumOff);
}
xShape->setPropertyValue(UNO_NAME_FILLCOLOR, uno::makeAny(static_cast<sal_Int32>(aColor)));
}