From 86d36ee56521438069504fbacff8dc2aff3a1afc Mon Sep 17 00:00:00 2001 From: Tibor Nagy Date: Sun, 23 Feb 2025 21:35:17 +0100 Subject: [PATCH] tdf165262 PPTX export: fix shape export regression When exporting a shape from PPT to PPTX, the preset shape export is sometimes incorrect. In such cases, we export the shapes as custom shapes. The export of glue points is also important, so it has been added to the fix. this regression is caused by commit I378ffffc2ba09fcffcaa4e5dcf74bfd19e9f704d (tdf#149126 fix export of PPTX preset shapes). Change-Id: Id4a127e7ef462611bf63da791717f8260ec51be0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182068 Tested-by: Jenkins Reviewed-by: Nagy Tibor --- oox/source/export/drawingml.cxx | 78 +++++++++++++++++++++++++++++ oox/source/export/shapes.cxx | 5 +- sd/qa/unit/data/ppt/tdf165262.ppt | Bin 0 -> 87040 bytes sd/qa/unit/export-tests-ooxml3.cxx | 23 +++++++++ 4 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 sd/qa/unit/data/ppt/tdf165262.ppt diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 754ae8bd7c32..77baafbe755d 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -4690,6 +4690,57 @@ void prepareTextArea(const EnhancedCustomShape2d& rEnhancedCustomShape2d, return; } + +void prepareGluePoints(const EnhancedCustomShape2d& rEnhancedCustomShape2d, + std::vector& rGuideList, + const uno::Sequence& rGluePoints, + const uno::Sequence& aTextFrames) +{ + if (rGluePoints.hasElements()) + { + OString sWidth, sHeight; + if (aTextFrames.hasElements()) + { + double fTop = 0.0, fLeft = 0.0, fBottom = 0.0, fRight = 0.0; + + rEnhancedCustomShape2d.GetParameter(fTop, aTextFrames[0].TopLeft.First, true, false); + rEnhancedCustomShape2d.GetParameter(fLeft, aTextFrames[0].TopLeft.Second, true, false); + rEnhancedCustomShape2d.GetParameter(fBottom, aTextFrames[0].BottomRight.First, false, + true); + rEnhancedCustomShape2d.GetParameter(fRight, aTextFrames[0].BottomRight.Second, false, + true); + + sWidth = OString::number(fLeft + fRight); + sHeight = OString::number(fTop + fBottom); + } + else + { + tools::Rectangle aLogicRectLO(rEnhancedCustomShape2d.GetLogicRect()); + sal_Int32 nWidth = aLogicRectLO.Right() - aLogicRectLO.Left(); + sal_Int32 nHeight = aLogicRectLO.Bottom() - aLogicRectLO.Top(); + sWidth = OString::number(oox::drawingml::convertHmmToEmu(nWidth)); + sHeight = OString::number(oox::drawingml::convertHmmToEmu(nHeight)); + } + + sal_Int32 nIndex = 1; + for (auto const& rGluePoint : rGluePoints) + { + Guide aGuide; + double fRetValueX; + rEnhancedCustomShape2d.GetParameter(fRetValueX, rGluePoint.First, false, false); + aGuide.sName = "GluePoint"_ostr + OString::number(nIndex) + "X"; + aGuide.sFormula = "*/ " + OString::number(fRetValueX) + " w " + sWidth; + rGuideList.push_back(aGuide); + + double fRetValueY; + rEnhancedCustomShape2d.GetParameter(fRetValueY, rGluePoint.Second, false, false); + aGuide.sName = "GluePoint"_ostr + OString::number(nIndex) + "Y"; + aGuide.sFormula = "*/ " + OString::number(fRetValueY) + " h " + sHeight; + rGuideList.push_back(aGuide); + nIndex++; + } + } +} } bool DrawingML::WriteCustomGeometry( @@ -4725,6 +4776,8 @@ bool DrawingML::WriteCustomGeometry( uno::Sequence aPathProp; pPathProp->Value >>= aPathProp; + uno::Sequence aGluePoints; + uno::Sequence aTextFrames; uno::Sequence aPairs; uno::Sequence aSegments; uno::Sequence aPathSize; @@ -4736,6 +4789,10 @@ bool DrawingML::WriteCustomGeometry( rPathProp.Value >>= aPairs; else if (rPathProp.Name == "Segments") rPathProp.Value >>= aSegments; + else if (rPathProp.Name == "GluePoints") + rPathProp.Value >>= aGluePoints; + else if (rPathProp.Name == "TextFrames") + rPathProp.Value >>= aTextFrames; else if (rPathProp.Name == "SubViewSize") rPathProp.Value >>= aPathSize; else if (rPathProp.Name == "StretchX") @@ -4775,6 +4832,7 @@ bool DrawingML::WriteCustomGeometry( TextAreaRect aTextAreaRect; std::vector aGuideList; // for now only for prepareTextArea(aCustomShape2d, aGuideList, aTextAreaRect); + prepareGluePoints(aCustomShape2d, aGuideList, aGluePoints, aTextFrames); mpFS->startElementNS(XML_a, XML_custGeom); mpFS->singleElementNS(XML_a, XML_avLst); if (aGuideList.empty()) @@ -4791,6 +4849,26 @@ bool DrawingML::WriteCustomGeometry( mpFS->endElementNS(XML_a, XML_gdLst); } mpFS->singleElementNS(XML_a, XML_ahLst); + + if (!aGuideList.empty()) + { + mpFS->startElementNS(XML_a, XML_cxnLst); + for (auto it = aGuideList.begin(); it != aGuideList.end(); ++it) + { + auto aNextIt = std::next(it); + if (aNextIt != aGuideList.end() && it->sName.startsWith("GluePoint") + && aNextIt->sName.startsWith("GluePoint")) + { + mpFS->startElementNS(XML_a, XML_cxn, XML_ang, "0"); + mpFS->singleElementNS(XML_a, XML_pos, XML_x, it->sName, XML_y, aNextIt->sName); + mpFS->endElementNS(XML_a, XML_cxn); + + ++it; + } + } + mpFS->endElementNS(XML_a, XML_cxnLst); + } + mpFS->singleElementNS(XML_a, XML_rect, XML_l, aTextAreaRect.left, XML_t, aTextAreaRect.top, XML_r, aTextAreaRect.right, XML_b, aTextAreaRect.bottom); mpFS->startElementNS(XML_a, XML_pathLst); diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx index 40bed3208567..e7dc5f4ef307 100644 --- a/oox/source/export/shapes.cxx +++ b/oox/source/export/shapes.cxx @@ -622,13 +622,14 @@ constexpr frozen::set constDenySet( u"flowchart-display" }); -constexpr frozen::set constAllowSet( +constexpr frozen::set constAllowSet( { u"heart", u"puzzle", u"col-60da8460", u"col-502ad400", - u"sinusoid" + u"sinusoid", + u"mso-spt100" }); } // end anonymous namespace diff --git a/sd/qa/unit/data/ppt/tdf165262.ppt b/sd/qa/unit/data/ppt/tdf165262.ppt new file mode 100644 index 0000000000000000000000000000000000000000..8fcb7379407b6230828fa4f2c0429ddeee97e381 GIT binary patch literal 87040 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 literal 0 HcmV?d00001 diff --git a/sd/qa/unit/export-tests-ooxml3.cxx b/sd/qa/unit/export-tests-ooxml3.cxx index 9e0b36b9096d..7d06160b4ce2 100644 --- a/sd/qa/unit/export-tests-ooxml3.cxx +++ b/sd/qa/unit/export-tests-ooxml3.cxx @@ -27,6 +27,29 @@ public: int testTdf115005_FallBack_Images(bool bAddReplacementImages); }; +CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf165262) +{ + createSdImpressDoc("ppt/tdf165262.ppt"); + save(u"Impress Office Open XML"_ustr); + + xmlDocUniquePtr pXmlDoc1 = parseExport(u"ppt/slides/slide1.xml"_ustr); + assertXPath(pXmlDoc1, "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[1]/p:spPr/a:custGeom"); + + // glue points export + assertXPath(pXmlDoc1, + "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[1]/p:spPr/a:custGeom/a:gdLst/a:gd[5]", "name", + u"GluePoint1X"); + assertXPath(pXmlDoc1, + "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[1]/p:spPr/a:custGeom/a:gdLst/a:gd[5]", "fmla", + u"*/ 15 w 21600"); + assertXPath(pXmlDoc1, + "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[1]/p:spPr/a:custGeom/a:gdLst/a:gd[6]", "name", + u"GluePoint1Y"); + assertXPath(pXmlDoc1, + "/p:sld/p:cSld/p:spTree/p:grpSp/p:sp[1]/p:spPr/a:custGeom/a:gdLst/a:gd[6]", "fmla", + u"*/ 0 h 21600"); +} + CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest3, testTdf164775_ConnectorShape) { createSdImpressDoc("odp/tdf164775.odp");