oox/source/drawingml/shape.cxx | 19 ++++++++++------- sd/qa/unit/data/pptx/tdf165321.pptx |binary sd/qa/unit/data/xml/n593612_0.xml | 4 +-- sd/qa/unit/import-tests2.cxx | 39 ++++++++++++++++++++++++++++-------- 4 files changed, 44 insertions(+), 18 deletions(-)
New commits: commit 89d9c6b41a084e99ef705bf5af39b621d392c435 Author: Balazs Varga <balazs.varga.ext...@allotropia.de> AuthorDate: Thu Mar 6 13:29:07 2025 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Thu Mar 20 10:27:32 2025 +0100 tdf#165321 - sd ooxml import fix missing shapes or shapes with near zero height Use the calculated shapes size (before we calculate the shape size with NbcAdjustTextFrameWidthAndHeight if the autoTextGrowHeight is true) instead of the shape size directly from the xml, which need to be transformed in some cases. Regression from commit: ebf13e890766f4cadbba81444784cfe3c8e1bbc3 (tdf#156857: sd ooxml import: fix shape size if spAutofit is set) Change-Id: Icddaf22d10a89b172a3f1ca3e55150162e51a877 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182581 Tested-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> Tested-by: Jenkins Reviewed-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de> (cherry picked from commit 620b89adea77519fd5d057cac7e1acf8a6fb2544) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182638 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 20776ea0b4e1..4cb0160facee 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -1235,6 +1235,7 @@ Reference< XShape > const & Shape::createAndInsert( } } HomogenMatrix3 aMatrix; + tools::Rectangle aOrigSize; if ( aServiceName == "com.sun.star.drawing.ConnectorShape" ) { ::basegfx::B2DPolygon aPoly; @@ -2007,6 +2008,10 @@ Reference< XShape > const & Shape::createAndInsert( if (mbWps && aServiceName == "com.sun.star.drawing.LineShape" && !pParentGroupShape) mxShape->setPosition(maPosition); + SdrObject* pShape = SdrObject::getSdrObjectFromXShape(mxShape); + if (pShape) + aOrigSize = pShape->GetLogicRect(); + if (bIsConnectorShape) { msConnectorName = mpCustomShapePropertiesPtr->getShapePresetTypeName(); @@ -2304,16 +2309,14 @@ Reference< XShape > const & Shape::createAndInsert( } SdrObject* pShape = SdrObject::getSdrObjectFromXShape(mxShape); - if (pShape && bAutoHeight && bIsCustomShape) + if (pShape && bAutoHeight) { - tools::Rectangle aOrigSize(aShapeRectHmm.X, aShapeRectHmm.Y, - aShapeRectHmm.X + aShapeRectHmm.Width, aShapeRectHmm.Y + aShapeRectHmm.Height); - tools::Rectangle aAdaptSize = pShape->GetLogicRect(); - // a little tolerance same as in \svx\source\svdraw\svdoashp.cxx:AdjustTextFrameWidthAndHeight - if (std::abs(aOrigSize.GetHeight() - aAdaptSize.GetHeight()) > 1) + tools::Rectangle aAutoSize = pShape->GetLogicRect(); + // little tolerance same as in \svx\source\svdraw\svdoashp.cxx:AdjustTextFrameWidthAndHeight + if (!aOrigSize.IsEmpty() && (std::abs(aOrigSize.GetHeight() - aAutoSize.GetHeight()) > 1 || + std::abs(aOrigSize.GetWidth() - aAutoSize.GetWidth()) > 1)) { - aAdaptSize.setHeight(aOrigSize.GetHeight()); - pShape->NbcSetLogicRect(aAdaptSize, false); + pShape->NbcSetLogicRect(aOrigSize, false); } } } diff --git a/sd/qa/unit/data/pptx/tdf165321.pptx b/sd/qa/unit/data/pptx/tdf165321.pptx new file mode 100644 index 000000000000..86736d94b563 Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf165321.pptx differ diff --git a/sd/qa/unit/data/xml/n593612_0.xml b/sd/qa/unit/data/xml/n593612_0.xml index f278976b7d2a..4c99db725cab 100644 --- a/sd/qa/unit/data/xml/n593612_0.xml +++ b/sd/qa/unit/data/xml/n593612_0.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <XShapes> - <XShape positionX="11429" positionY="1324" sizeX="2259" sizeY="15971" type="com.sun.star.drawing.CustomShape" name="Rectangle 52" text=" " fontHeight="24.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="TOP" textLeftDistance="254" textRightDistance="254" textUpperDistance="127" textLowerDistance="127" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="SOLID" fillColor="3c8c93" fillTransparence="0" fillTran sparenceGradientName=""> + <XShape positionX="11429" positionY="1324" sizeX="2259" sizeY="15969" type="com.sun.star.drawing.CustomShape" name="Rectangle 52" text=" " fontHeight="24.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="TOP" textLeftDistance="254" textRightDistance="254" textUpperDistance="127" textLowerDistance="127" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="SOLID" fillColor="3c8c93" fillTransparence="0" fillTran sparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="3465a4" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -10,7 +10,7 @@ <LineEnd/> <Transformation> <Line1 column1="2260.000000" column2="0.000000" column3="11429.000000"/> - <Line2 column1="0.000000" column2="15972.000000" column3="1324.000000"/> + <Line2 column1="0.000000" column2="15970.000000" column3="1324.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> <CustomShapeGeometry> diff --git a/sd/qa/unit/import-tests2.cxx b/sd/qa/unit/import-tests2.cxx index 9c16eebf1c39..5276f32713a7 100644 --- a/sd/qa/unit/import-tests2.cxx +++ b/sd/qa/unit/import-tests2.cxx @@ -113,18 +113,41 @@ CPPUNIT_TEST_FIXTURE(SdImportTest2, testTdf160490) sal_Int32 nHeight1 = xShape1->getSize().Height; // Without the fix in place, this test would have failed with - // Expected: placeholder height: 3728 + // Expected: placeholder height: 3726 // Actual : placeholder height: 3476 - CPPUNIT_ASSERT_EQUAL(sal_Int32(3728), nHeight1); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3726), nHeight1); uno::Reference<drawing::XShape> xShape2(getShapeFromPage(0, 1), uno::UNO_QUERY); CPPUNIT_ASSERT(xShape2.is()); sal_Int32 nHeight2 = xShape2->getSize().Height; // Without the fix in place, this test would have failed with - // Expected: placeholder height: 3367 + // Expected: placeholder height: 3365 // Actual : placeholder height: 3116 - CPPUNIT_ASSERT_EQUAL(sal_Int32(3367), nHeight2); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3365), nHeight2); +} + +CPPUNIT_TEST_FIXTURE(SdImportTest2, testTdf165321) +{ + createSdImpressDoc("pptx/tdf165321.pptx"); + + uno::Reference<container::XIndexAccess> xGroupShape(getShapeFromPage(0, 0), + uno::UNO_QUERY_THROW); + uno::Reference<drawing::XShape> xShape(xGroupShape->getByIndex(0), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT(xShape.is()); + // Without the fix in place, this test would have failed with + // Expected: shape height: 3597 + // Actual : shape height: 3 + CPPUNIT_ASSERT_EQUAL(sal_Int32(3597), xShape->getSize().Height); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6592), xShape->getSize().Width); + + xShape.set(xGroupShape->getByIndex(1), uno::UNO_QUERY_THROW); + CPPUNIT_ASSERT(xShape.is()); + // Without the fix in place, this test would have failed with + // Expected: shape height: 3597 + // Actual : shape height: 3 + CPPUNIT_ASSERT_EQUAL(sal_Int32(3597), xShape->getSize().Height); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6402), xShape->getSize().Width); } CPPUNIT_TEST_FIXTURE(SdImportTest2, testTdf165341) @@ -151,18 +174,18 @@ CPPUNIT_TEST_FIXTURE(SdImportTest2, testTdf157285) sal_Int32 nHeight1 = xShape1->getSize().Height; // Without the fix in place, this test would have failed with - // Expected: placeholder height: 2565 + // Expected: placeholder height: 2795 // Actual : placeholder height: 3435 - CPPUNIT_ASSERT_EQUAL(sal_Int32(2565), nHeight1); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2795), nHeight1); uno::Reference<drawing::XShape> xShape2(getShapeFromPage(1, 0), uno::UNO_QUERY); CPPUNIT_ASSERT(xShape2.is()); sal_Int32 nHeight2 = xShape2->getSize().Height; // Without the fix in place, this test would have failed with - // Expected: placeholder height: 1180 + // Expected: placeholder height: 1271 // Actual : placeholder height: 11303 - CPPUNIT_ASSERT_EQUAL(sal_Int32(1180), nHeight2); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1271), nHeight2); } CPPUNIT_TEST_FIXTURE(SdImportTest2, testTdf152186)