summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--svx/qa/unit/data/tdf150020-shadow-alignment.pptxbin51529 -> 45485 bytes
-rw-r--r--svx/qa/unit/sdr.cxx81
-rw-r--r--svx/source/table/viewcontactoftableobj.cxx54
3 files changed, 81 insertions, 54 deletions
diff --git a/svx/qa/unit/data/tdf150020-shadow-alignment.pptx b/svx/qa/unit/data/tdf150020-shadow-alignment.pptx
index caba1a122da5..0002667bd4d9 100644
--- a/svx/qa/unit/data/tdf150020-shadow-alignment.pptx
+++ b/svx/qa/unit/data/tdf150020-shadow-alignment.pptx
Binary files differ
diff --git a/svx/qa/unit/sdr.cxx b/svx/qa/unit/sdr.cxx
index b98df8b58041..4d6c4226d11b 100644
--- a/svx/qa/unit/sdr.cxx
+++ b/svx/qa/unit/sdr.cxx
@@ -85,46 +85,67 @@ CPPUNIT_TEST_FIXTURE(SdrTest, testShadowAlignment)
loadFromURL(u"tdf150020-shadow-alignment.pptx");
uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(mxComponent, uno::UNO_QUERY);
- uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
- uno::UNO_QUERY);
- drawinglayer::primitive2d::Primitive2DContainer xPrimitiveSequence
- = renderPageToPrimitives(xDrawPage);
+ {
+ // Page 1 contains 9 shapes with each shadow alignment
+ uno::Reference<drawing::XDrawPage> xDrawPage(
+ xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY);
+ drawinglayer::primitive2d::Primitive2DContainer xPrimitiveSequence
+ = renderPageToPrimitives(xDrawPage);
- // Examine the created primitives.
- drawinglayer::Primitive2dXmlDump aDumper;
- xmlDocUniquePtr pDocument = aDumper.dumpAndParse(xPrimitiveSequence);
+ // Examine the created primitives.
+ drawinglayer::Primitive2dXmlDump aDumper;
+ xmlDocUniquePtr pDocument = aDumper.dumpAndParse(xPrimitiveSequence);
- // Without the accompanying fix in place, this test would have failed with:
- // - Expected: -567
- // - Actual : 162
- // - In <>, attribute 'xy13' of '(//shadow/transform)[1]' incorrect value.
- // i.e. shadow alignment was ignored while scaling the shadow.
- assertXPath(pDocument, "(//shadow/transform)[1]", "xy13", "-567");
- assertXPath(pDocument, "(//shadow/transform)[1]", "xy23", "162");
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: -567
+ // - Actual : 162
+ // - In <>, attribute 'xy13' of '(//shadow/transform)[1]' incorrect value.
+ // i.e. shadow alignment was ignored while scaling the shadow.
+ assertXPath(pDocument, "(//shadow/transform)[1]", "xy13", "-567");
+ assertXPath(pDocument, "(//shadow/transform)[1]", "xy23", "162");
- assertXPath(pDocument, "(//shadow/transform)[2]", "xy13", "-1794");
- assertXPath(pDocument, "(//shadow/transform)[2]", "xy23", "162");
+ assertXPath(pDocument, "(//shadow/transform)[2]", "xy13", "-1794");
+ assertXPath(pDocument, "(//shadow/transform)[2]", "xy23", "162");
- assertXPath(pDocument, "(//shadow/transform)[3]", "xy13", "-3021");
- assertXPath(pDocument, "(//shadow/transform)[3]", "xy23", "161");
+ assertXPath(pDocument, "(//shadow/transform)[3]", "xy13", "-3021");
+ assertXPath(pDocument, "(//shadow/transform)[3]", "xy23", "161");
- assertXPath(pDocument, "(//shadow/transform)[4]", "xy13", "-567");
- assertXPath(pDocument, "(//shadow/transform)[4]", "xy23", "-749");
+ assertXPath(pDocument, "(//shadow/transform)[4]", "xy13", "-567");
+ assertXPath(pDocument, "(//shadow/transform)[4]", "xy23", "-749");
- assertXPath(pDocument, "(//shadow/transform)[5]", "xy13", "-3021");
- assertXPath(pDocument, "(//shadow/transform)[5]", "xy23", "-750");
+ assertXPath(pDocument, "(//shadow/transform)[5]", "xy13", "-3021");
+ assertXPath(pDocument, "(//shadow/transform)[5]", "xy23", "-750");
- assertXPath(pDocument, "(//shadow/transform)[6]", "xy13", "-566");
- assertXPath(pDocument, "(//shadow/transform)[6]", "xy23", "-1691");
+ assertXPath(pDocument, "(//shadow/transform)[6]", "xy13", "-566");
+ assertXPath(pDocument, "(//shadow/transform)[6]", "xy23", "-1691");
- assertXPath(pDocument, "(//shadow/transform)[7]", "xy13", "-1794");
- assertXPath(pDocument, "(//shadow/transform)[7]", "xy23", "-1693");
+ assertXPath(pDocument, "(//shadow/transform)[7]", "xy13", "-1794");
+ assertXPath(pDocument, "(//shadow/transform)[7]", "xy23", "-1693");
- assertXPath(pDocument, "(//shadow/transform)[8]", "xy13", "-3022");
- assertXPath(pDocument, "(//shadow/transform)[8]", "xy23", "-1691");
+ assertXPath(pDocument, "(//shadow/transform)[8]", "xy13", "-3022");
+ assertXPath(pDocument, "(//shadow/transform)[8]", "xy23", "-1691");
- assertXPath(pDocument, "(//shadow/transform)[9]", "xy13", "-1794");
- assertXPath(pDocument, "(//shadow/transform)[9]", "xy23", "-750");
+ assertXPath(pDocument, "(//shadow/transform)[9]", "xy13", "-1794");
+ assertXPath(pDocument, "(//shadow/transform)[9]", "xy23", "-750");
+ }
+ {
+ // Page 2 contains a table with shadow alignment center
+ uno::Reference<drawing::XDrawPage> xDrawPage(
+ xDrawPagesSupplier->getDrawPages()->getByIndex(1), uno::UNO_QUERY);
+ drawinglayer::primitive2d::Primitive2DContainer xPrimitiveSequence
+ = renderPageToPrimitives(xDrawPage);
+
+ // Examine the created primitives.
+ drawinglayer::Primitive2dXmlDump aDumper;
+ xmlDocUniquePtr pDocument = aDumper.dumpAndParse(xPrimitiveSequence);
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: -5196
+ // - Actual : 0
+ // - In<>, attribute 'xy13' of '//shadow/transform' incorrect value.
+ assertXPath(pDocument, "//shadow/transform", "xy13", "-5196");
+ assertXPath(pDocument, "//shadow/transform", "xy23", "-2290");
+ }
}
CPPUNIT_TEST_FIXTURE(SdrTest, testZeroWidthTextWrap)
diff --git a/svx/source/table/viewcontactoftableobj.cxx b/svx/source/table/viewcontactoftableobj.cxx
index 3f17c5ccae21..5b9418ab06bf 100644
--- a/svx/source/table/viewcontactoftableobj.cxx
+++ b/svx/source/table/viewcontactoftableobj.cxx
@@ -448,33 +448,39 @@ namespace sdr::contact
aRetvalForShadow.append(new drawinglayer::primitive2d::TransformPrimitive2D(
aTransform, std::move(aCellBorderPrimitives)));
}
- }
-
- if(!aRetval.empty())
- {
- // check and create evtl. shadow for created content
- const SfxItemSet& rObjectItemSet = rTableObj.GetMergedItemSet();
- const drawinglayer::attribute::SdrShadowAttribute aNewShadowAttribute(
- drawinglayer::primitive2d::createNewSdrShadowAttribute(rObjectItemSet));
- if(!aNewShadowAttribute.isDefault())
+ if(!aRetval.empty())
{
- bool bDirectShadow
- = rObjectItemSet.Get(SDRATTR_SHADOW, /*bSrchInParent=*/false)
- .GetValue();
- if (bDirectShadow)
- {
- // Shadow as direct formatting: no shadow for text, to be compatible
- // with PowerPoint.
- basegfx::B2DHomMatrix aMatrix;
- aRetval = drawinglayer::primitive2d::createEmbeddedShadowPrimitive(
- std::move(aRetval), aNewShadowAttribute, aMatrix, &aRetvalForShadow);
- }
- else
+ // check and create evtl. shadow for created content
+ const SfxItemSet& rObjectItemSet = rTableObj.GetMergedItemSet();
+ const drawinglayer::attribute::SdrShadowAttribute aNewShadowAttribute(
+ drawinglayer::primitive2d::createNewSdrShadowAttribute(rObjectItemSet));
+
+ if(!aNewShadowAttribute.isDefault())
{
- // Shadow as style: shadow for text, to be backwards-compatible.
- aRetval = drawinglayer::primitive2d::createEmbeddedShadowPrimitive(
- std::move(aRetval), aNewShadowAttribute);
+ // pass in table's transform and scale matrix, to
+ // correctly scale and align shadows
+ const basegfx::B2DHomMatrix aTransformScaleMatrix
+ = basegfx::utils::createScaleTranslateB2DHomMatrix(
+ aObjectRange.getRange(), aObjectRange.getMinimum());
+
+ bool bDirectShadow
+ = rObjectItemSet.Get(SDRATTR_SHADOW, /*bSrchInParent=*/false)
+ .GetValue();
+ if (bDirectShadow)
+ {
+ // Shadow as direct formatting: no shadow for text, to be compatible
+ // with PowerPoint.
+ aRetval = drawinglayer::primitive2d::createEmbeddedShadowPrimitive(
+ std::move(aRetval), aNewShadowAttribute, aTransformScaleMatrix,
+ &aRetvalForShadow);
+ }
+ else
+ {
+ // Shadow as style: shadow for text, to be backwards-compatible.
+ aRetval = drawinglayer::primitive2d::createEmbeddedShadowPrimitive(
+ std::move(aRetval), aNewShadowAttribute, aTransformScaleMatrix);
+ }
}
}
}