diff options
-rw-r--r-- | include/svx/svdoashp.hxx | 2 | ||||
-rw-r--r-- | include/svx/svdobj.hxx | 2 | ||||
-rw-r--r-- | include/svx/svdomeas.hxx | 2 | ||||
-rw-r--r-- | include/svx/svdotable.hxx | 2 | ||||
-rw-r--r-- | include/svx/svdotext.hxx | 2 | ||||
-rw-r--r-- | oox/source/drawingml/shape.cxx | 25 | ||||
-rw-r--r-- | sd/qa/unit/data/xml/n593612_0.xml | 4 | ||||
-rw-r--r-- | sd/qa/unit/import-tests-smartart.cxx | 2 | ||||
-rw-r--r-- | sd/qa/unit/import-tests2.cxx | 8 | ||||
-rw-r--r-- | sd/source/core/drawdoc4.cxx | 2 | ||||
-rw-r--r-- | svx/source/svdraw/svdoashp.cxx | 4 | ||||
-rw-r--r-- | svx/source/svdraw/svdobj.cxx | 2 | ||||
-rw-r--r-- | svx/source/svdraw/svdomeas.cxx | 4 | ||||
-rw-r--r-- | svx/source/svdraw/svdotext.cxx | 4 | ||||
-rw-r--r-- | svx/source/table/svdotable.cxx | 5 |
15 files changed, 48 insertions, 22 deletions
diff --git a/include/svx/svdoashp.hxx b/include/svx/svdoashp.hxx index 34f26acc33c1..a33fce0aca7a 100644 --- a/include/svx/svdoashp.hxx +++ b/include/svx/svdoashp.hxx @@ -218,7 +218,7 @@ public: virtual basegfx::B2DPolyPolygon TakeXorPoly() const override; virtual basegfx::B2DPolyPolygon TakeContour() const override; - virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject) override; + virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject, bool bAdjustTextFrameWidthAndHeight = true) override; virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier, bool bAddText) const override; diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx index 85446e9b35d0..d109c15f3ee3 100644 --- a/include/svx/svdobj.hxx +++ b/include/svx/svdobj.hxx @@ -633,7 +633,7 @@ public: // keep text in outliner's format // SetOutlinerParaObject: transfer ownership of *pTextObject! void SetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject); - virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject); + virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject, bool bAdjustTextFrameWidthAndHeight = true); virtual OutlinerParaObject* GetOutlinerParaObject() const; virtual void NbcReformatText(); diff --git a/include/svx/svdomeas.hxx b/include/svx/svdomeas.hxx index 775354020af0..dcef67aa2c4c 100644 --- a/include/svx/svdomeas.hxx +++ b/include/svx/svdomeas.hxx @@ -138,7 +138,7 @@ public: SAL_DLLPRIVATE virtual void TakeTextAnchorRect(tools::Rectangle& rAnchorRect) const override; SAL_DLLPRIVATE virtual void TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, tools::Rectangle* pViewInit, tools::Rectangle* pViewMin) const override; SAL_DLLPRIVATE virtual EEAnchorMode GetOutlinerViewAnchorMode() const override; - SAL_DLLPRIVATE virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject) override; + SAL_DLLPRIVATE virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject, bool bAdjustTextFrameWidthAndHeight = true) override; SAL_DLLPRIVATE virtual OutlinerParaObject* GetOutlinerParaObject() const override; SAL_DLLPRIVATE virtual bool CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_uInt16 nPos, diff --git a/include/svx/svdotable.hxx b/include/svx/svdotable.hxx index 4a7e8ad792b6..9abacce2b9ff 100644 --- a/include/svx/svdotable.hxx +++ b/include/svx/svdotable.hxx @@ -239,7 +239,7 @@ public: void TakeTextEditArea(const sdr::table::CellPos& rPos, Size* pPaperMin, Size* pPaperMax, tools::Rectangle* pViewInit, tools::Rectangle* pViewMin) const; virtual EEAnchorMode GetOutlinerViewAnchorMode() const override; - virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject) override; + virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject, bool bAdjustTextFrameWidthAndHeight = true) override; virtual OutlinerParaObject* GetOutlinerParaObject() const override; diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx index c9184def420e..92d0cf0b9bf3 100644 --- a/include/svx/svdotext.hxx +++ b/include/svx/svdotext.hxx @@ -518,7 +518,7 @@ public: virtual void EndTextEdit(SdrOutliner& rOutl); virtual EEAnchorMode GetOutlinerViewAnchorMode() const; - virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject) override; + virtual void NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject, bool bAdjustTextFrameWidthAndHeight = true) override; // @param bAdjustTextFrameWidthAndHeight pass false if you know it is safe to avoid the cost of doing // text layout right now. void NbcSetOutlinerParaObjectForText( std::optional<OutlinerParaObject> pTextObject, SdrText* pText, bool bAdjustTextFrameWidthAndHeight = true ); diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 9d39849e4985..496714ec1e1a 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -2166,6 +2166,31 @@ Reference< XShape > const & Shape::createAndInsert( rFilterBase.getMediaDescriptor()[utl::MediaDescriptor::PROP_DOCUMENTSERVICE] >>= sDocumentService; if (sDocumentService != u"com.sun.star.text.TextDocument") mpTextBody->getTextProperties().readjustTextDistances(mxShape); + + // tdf#156857: ooxml files can have shape size with spAutoFit=true and the first priority of + // shape size is the fix size even if TextAutoGrowHeight is true. + bool bAutoHeight = false; + Reference< XPropertySetInfo > xSetInfo(xSet->getPropertySetInfo()); + const OUString& rPropName = PropertyMap::getPropertyName(PROP_TextAutoGrowHeight); + if (xSetInfo.is() && xSetInfo->hasPropertyByName(rPropName)) + { + uno::Any aTextAutoGrowHeight = xSet->getPropertyValue(u"TextAutoGrowHeight"_ustr); + aTextAutoGrowHeight >>= bAutoHeight; + } + + SdrObject* pShape = SdrObject::getSdrObjectFromXShape(mxShape); + if (pShape && bAutoHeight && bIsCustomShape) + { + 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) + { + aAdaptSize.setHeight(aOrigSize.GetHeight()); + pShape->NbcSetLogicRect(aAdaptSize, false); + } + } } } return mxShape; diff --git a/sd/qa/unit/data/xml/n593612_0.xml b/sd/qa/unit/data/xml/n593612_0.xml index 0639294c5007..f278976b7d2a 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="15124" 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" fillTransparenceGradientName=""> + <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" fillTransparenceGradientName=""> <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="15125.000000" column3="1324.000000"/> + <Line2 column1="0.000000" column2="15972.000000" column3="1324.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> <CustomShapeGeometry> diff --git a/sd/qa/unit/import-tests-smartart.cxx b/sd/qa/unit/import-tests-smartart.cxx index ce947672cc93..be5a21aa482c 100644 --- a/sd/qa/unit/import-tests-smartart.cxx +++ b/sd/qa/unit/import-tests-smartart.cxx @@ -1032,7 +1032,7 @@ CPPUNIT_TEST_FIXTURE(SdImportTestSmartArt, testPictureStrip) // Without the accompanying fix in place, this test would have failed with 'Expected greater // than: 2873; Actual : 2320', i.e. the title shape and the diagram overlapped. uno::Reference<drawing::XShape> xFirstPair = getChildShape(xGroup, 1); - CPPUNIT_ASSERT_GREATER(xTitle->getPosition().Y + xTitle->getSize().Height, + CPPUNIT_ASSERT_GREATER(xTitle->getPosition().Y + xTitle->getSize().Height - 1069, xFirstPair->getPosition().Y); // Make sure that left margin is 60% of width (if you count width in points and margin in mms). diff --git a/sd/qa/unit/import-tests2.cxx b/sd/qa/unit/import-tests2.cxx index 3f01a678ca5b..d66e12a52663 100644 --- a/sd/qa/unit/import-tests2.cxx +++ b/sd/qa/unit/import-tests2.cxx @@ -111,18 +111,18 @@ 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: 2627 + // Expected: placeholder height: 3728 // Actual : placeholder height: 3476 - CPPUNIT_ASSERT_EQUAL(sal_Int32(2627), nHeight1); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3728), 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: 2373 + // Expected: placeholder height: 3367 // Actual : placeholder height: 3116 - CPPUNIT_ASSERT_EQUAL(sal_Int32(2373), nHeight2); + CPPUNIT_ASSERT_EQUAL(sal_Int32(3367), nHeight2); } CPPUNIT_TEST_FIXTURE(SdImportTest2, testTdf157285) diff --git a/sd/source/core/drawdoc4.cxx b/sd/source/core/drawdoc4.cxx index 5d4774b2ab0d..733d826123cd 100644 --- a/sd/source/core/drawdoc4.cxx +++ b/sd/source/core/drawdoc4.cxx @@ -896,7 +896,7 @@ void SdDrawDocument::SpellObject(SdrTextObj* pObj) // taking text from the outliner // use non-broadcasting version to avoid O(n^2) - pObj->NbcSetOutlinerParaObject( std::move(pOPO) ); + pObj->NbcSetOutlinerParaObject( std::move(pOPO), false ); } } } diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx index 394cf7486155..fb9cf0a9923f 100644 --- a/svx/source/svdraw/svdoashp.cxx +++ b/svx/source/svdraw/svdoashp.cxx @@ -2800,9 +2800,9 @@ void SdrObjCustomShape::TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRect=tools::Rectangle(aTextPos,aTextSiz); } -void SdrObjCustomShape::NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject) +void SdrObjCustomShape::NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject, bool bAdjustTextFrameWidthAndHeight) { - SdrTextObj::NbcSetOutlinerParaObject( std::move(pTextObject) ); + SdrTextObj::NbcSetOutlinerParaObject( std::move(pTextObject), bAdjustTextFrameWidthAndHeight ); SetBoundRectDirty(); SetBoundAndSnapRectsDirty(true); InvalidateRenderGeometry(); diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index c28770ab2f7c..da43e65d0fb7 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -1853,7 +1853,7 @@ void SdrObject::SetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObj } } -void SdrObject::NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> /*pTextObject*/) +void SdrObject::NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> /*pTextObject*/, bool /*bAdjustTextFrameWidthAndHeight = true*/) { } diff --git a/svx/source/svdraw/svdomeas.cxx b/svx/source/svdraw/svdomeas.cxx index 4e13258adaff..5647d0331539 100644 --- a/svx/source/svdraw/svdomeas.cxx +++ b/svx/source/svdraw/svdomeas.cxx @@ -1279,9 +1279,9 @@ OutlinerParaObject* SdrMeasureObj::GetOutlinerParaObject() const return SdrTextObj::GetOutlinerParaObject(); } -void SdrMeasureObj::NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject) +void SdrMeasureObj::NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject, bool bAdjustTextFrameWidthAndHeight) { - SdrTextObj::NbcSetOutlinerParaObject(std::move(pTextObject)); + SdrTextObj::NbcSetOutlinerParaObject(std::move(pTextObject), bAdjustTextFrameWidthAndHeight); if(SdrTextObj::GetOutlinerParaObject()) SetTextDirty(); // recalculate text } diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index 09fd8c945af3..3b4cf6ba72eb 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -1321,9 +1321,9 @@ OutlinerParaObject* SdrTextObj::GetOutlinerParaObject() const return nullptr; } -void SdrTextObj::NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject) +void SdrTextObj::NbcSetOutlinerParaObject(std::optional<OutlinerParaObject> pTextObject, bool bAdjustTextFrameWidthAndHeight) { - NbcSetOutlinerParaObjectForText( std::move(pTextObject), getActiveText() ); + NbcSetOutlinerParaObjectForText( std::move(pTextObject), getActiveText(), bAdjustTextFrameWidthAndHeight ); } namespace diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx index a2b4ee89cfcb..43a4d7be5a0a 100644 --- a/svx/source/table/svdotable.cxx +++ b/svx/source/table/svdotable.cxx @@ -1869,7 +1869,7 @@ OutlinerParaObject* SdrTableObj::GetOutlinerParaObject() const } -void SdrTableObj::NbcSetOutlinerParaObject( std::optional<OutlinerParaObject> pTextObject) +void SdrTableObj::NbcSetOutlinerParaObject( std::optional<OutlinerParaObject> pTextObject, bool bAdjustTextFrameWidthAndHeight ) { CellRef xCell( getActiveCell() ); if( !xCell.is() ) @@ -1885,7 +1885,8 @@ void SdrTableObj::NbcSetOutlinerParaObject( std::optional<OutlinerParaObject> pT xCell->SetOutlinerParaObject( std::move(pTextObject) ); SetTextSizeDirty(); - NbcAdjustTextFrameWidthAndHeight(); + if (bAdjustTextFrameWidthAndHeight) + NbcAdjustTextFrameWidthAndHeight(); } |