From 85dbb4dc81bed0b55a1bfbc5dce221b98eaf70d1 Mon Sep 17 00:00:00 2001 From: Jaume Pujantell Date: Tue, 23 Dec 2025 09:26:12 +0100 Subject: [PATCH] tdf#170095 override soft edge if there are 3D effects In OOXML, 3D effects override the soft-edge effect. Currently in LO 3D effects are not implemented, they are just remembered in a grabbag. To bring LO's behavior closer to other software, if when loaded there are both 3D effects and soft edge effect we ignore the soft edge effect. And if, while editing, a user adds soft edge effect then we dumb the remembered 3D effects in the grabbag. Change-Id: I2f59422d25c24bb4f9042694e0315bb15a2ac4c5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197526 Tested-by: Jenkins Reviewed-by: Noel Grandin Reviewed-by: Jaume Pujantell --- oox/qa/unit/data/tdf170095.pptx | Bin 0 -> 35019 bytes oox/qa/unit/shape.cxx | 18 ++++++++++++++++++ oox/source/drawingml/shape.cxx | 17 +++++++++++++---- svx/source/svdraw/svdobj.cxx | 29 +++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 oox/qa/unit/data/tdf170095.pptx diff --git a/oox/qa/unit/data/tdf170095.pptx b/oox/qa/unit/data/tdf170095.pptx new file mode 100644 index 0000000000000000000000000000000000000000..65bf6535bb4879079b98eee112e8d7392a05c584 GIT binary patch literal 35019 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 H`sjZEk2d1F literal 0 HcmV?d00001 diff --git a/oox/qa/unit/shape.cxx b/oox/qa/unit/shape.cxx index fd1ac1faca0b..f3bc4ed12832 100644 --- a/oox/qa/unit/shape.cxx +++ b/oox/qa/unit/shape.cxx @@ -1079,6 +1079,24 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testDigitGuideName_mathEqual) CPPUNIT_ASSERT_DOUBLES_EQUAL(10000.0, fBoundRectHeight, 5); } } + +CPPUNIT_TEST_FIXTURE(OoxShapeTest, testTdf170095SoftEdge3D) +{ + // Load file with a shape with both soft edge and 3D effects + loadFromFile(u"tdf170095.pptx"); + + // Then make sure the shape has no soft edge: + uno::Reference xDrawPagesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), + uno::UNO_QUERY); + uno::Reference xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); + sal_Int32 nSoftEdgeRad{}; + xShape->getPropertyValue(u"SoftEdgeRadius"_ustr) >>= nSoftEdgeRad; + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 0 + // - Actual : 882 + CPPUNIT_ASSERT_EQUAL(static_cast(0), nSoftEdgeRad); +} CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 1029ca1eccb9..68a7565e27e7 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -1634,6 +1634,18 @@ Reference< XShape > const & Shape::createAndInsert( aShapeProps.setProperty(PROP_CharHeight, GetFontHeight( mpMasterTextListStyle->getListStyle()[0].getTextCharacterProperties().moHeight.value() )); } + Sequence aCamera3DEffects = get3DProperties().getCameraAttributes(); + Sequence aLightRig3DEffects = get3DProperties().getLightRigAttributes(); + Sequence aShape3DEffects + = get3DProperties().getShape3DAttributes(rGraphicHelper, nFillPhClr); + bool bHas3DProps = aCamera3DEffects.hasElements() || aLightRig3DEffects.hasElements() + || aShape3DEffects.hasElements(); + if (bHas3DProps) + { + // 3D properties override softeEdge + getEffectProperties().maSoftEdge.moRad = 0; + } + // applying properties aShapeProps.assignUsed( getShapeProperties() ); aShapeProps.assignUsed( maDefaultShapeProperties ); @@ -2027,10 +2039,7 @@ Reference< XShape > const & Shape::createAndInsert( } // add 3D effects if any to GrabBag. They are still used in export. - Sequence< PropertyValue > aCamera3DEffects = get3DProperties().getCameraAttributes(); - Sequence< PropertyValue > aLightRig3DEffects = get3DProperties().getLightRigAttributes(); - Sequence< PropertyValue > aShape3DEffects = get3DProperties().getShape3DAttributes( rGraphicHelper, nFillPhClr ); - if( aCamera3DEffects.hasElements() || aLightRig3DEffects.hasElements() || aShape3DEffects.hasElements() ) + if (bHas3DProps) { uno::Sequence a3DEffectsGrabBag = comphelper::InitPropertySequence( { diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index 8214ce283ae0..a289c617298f 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -2060,6 +2061,34 @@ const SfxPoolItem& SdrObject::GetMergedItem(const sal_uInt16 nWhich) const void SdrObject::SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, bool bClearAllItems) { GetProperties().SetMergedItemSetAndBroadcast(rSet, bClearAllItems); + + const SdrMetricItem* pItem; + const bool bSetSoftEdge + = (SfxItemState::SET == rSet.GetItemState(SDRATTR_SOFTEDGE_RADIUS, true, &pItem) + && pItem->GetValue() > 0); + if (bSetSoftEdge) + { + // Remove 3D grabbag + try + { + css::uno::Any aAnyGrabBag; + GetGrabBagItem(aAnyGrabBag); + uno::Sequence aSeqGrabBag + = aAnyGrabBag.get>(); + auto it = std::find_if(aSeqGrabBag.begin(), aSeqGrabBag.end(), + [](const beans::PropertyValue& rProp) { + return rProp.Name == u"3DEffectProperties"_ustr; + }); + if (it == aSeqGrabBag.end()) + return; + comphelper::removeElementAt(aSeqGrabBag, it - aSeqGrabBag.begin()); + SetGrabBagItem(css::uno::Any(aSeqGrabBag)); + } + catch (const css::uno::Exception&) + { + // Grab bag not found, nothing to do + } + } } void SdrObject::ApplyNotPersistAttr(const SfxItemSet& rAttr)