sw/qa/extras/layout/data/tdf138951.odt |binary sw/qa/extras/layout/layout2.cxx | 32 ++++++++++++++++++++++++++++++ sw/qa/extras/ooxmlimport/ooxmlimport2.cxx | 15 ++++++++++++-- sw/source/core/doc/textboxhelper.cxx | 2 - 4 files changed, 46 insertions(+), 3 deletions(-)
New commits: commit c71cffdfc95c614fb2d5216bcf53a861dba04eb8 Author: Attila Bakos (NISZ) <bakos.attilakar...@nisz.hu> AuthorDate: Fri Jan 15 14:45:29 2021 +0100 Commit: Gabor Kelemen <kelemen.gab...@nisz.hu> CommitDate: Mon Jul 5 15:15:54 2021 +0200 tdf#136516 add positioning to SwTextBoxHelper::syncProperty() Before when the shape of the textbox moved, the anchor and the position synched. However if the new position of the shape required new anchor position, that was not handled. In addition after positioning and new anchor position the sync is necessary again, because anchor moving can change the calculated position values and that can change the anchor etc... The OOXMLImport test modification was necessary because a test failed during Jenkins tests however there was no difference between the test document before and after the fix. In addition I can not reproduce the fail of the test in my local repository, and only the Linux- and Windows builds showed the problem. Solved also tdf#138951, tdf#139686 and tdf#139092. Change-Id: Ibdfff89db01d75aeae74948e2ea41ce5a613b6fa Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109365 Tested-by: László Németh <nem...@numbertext.org> Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit c96c386c5db45dc4d5e358915caad7474e373068) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118425 Tested-by: Gabor Kelemen <kelemen.gab...@nisz.hu> Reviewed-by: Gabor Kelemen <kelemen.gab...@nisz.hu> diff --git a/sw/qa/extras/layout/data/tdf138951.odt b/sw/qa/extras/layout/data/tdf138951.odt new file mode 100755 index 000000000000..5cb4940bd5fe Binary files /dev/null and b/sw/qa/extras/layout/data/tdf138951.odt differ diff --git a/sw/qa/extras/layout/layout2.cxx b/sw/qa/extras/layout/layout2.cxx index 3e3d3b512be1..8cb41dde9b35 100644 --- a/sw/qa/extras/layout/layout2.cxx +++ b/sw/qa/extras/layout/layout2.cxx @@ -28,6 +28,7 @@ #include <fmtanchr.hxx> #include <fmtfsize.hxx> #include <fmtcntnt.hxx> +#include <fmtornt.hxx> #include <wrtsh.hxx> #include <edtwin.hxx> #include <view.hxx> @@ -285,6 +286,37 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineShowHideFootnotePagination) "zzz. zzz zzzz zzzz7 zzz zzz zzzzzzz zzz zzzz zzzzzzzzzzzzzz zzzzzzzzzzzz "); } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testtdf138951) +{ + // Open the bugdoc + auto pDoc = createDoc("tdf138951.odt"); + + // Get the only shape + uno::Reference<drawing::XShape> xShape(getShape(1), uno::UNO_QUERY); + CPPUNIT_ASSERT(xShape); + + // Gather its formats: the shape and textbox + const SwFrameFormat* pTxFrm = SwTextBoxHelper::getOtherTextBoxFormat(xShape); + CPPUNIT_ASSERT(pTxFrm); + const SwFrameFormat* pShFrm = SwTextBoxHelper::getOtherTextBoxFormat(pTxFrm, RES_FLYFRMFMT); + CPPUNIT_ASSERT(pShFrm); + + pDoc->getIDocumentLayoutAccess().GetCurrentViewShell()->CalcLayout(); + + // Get the bound rectangle of the textframe + tools::Rectangle aTxtFrmRect(pTxFrm->FindRealSdrObject()->GetLogicRect()); + + // Get the bound rectangle of the shape + tools::Rectangle aShpRect(pShFrm->FindRealSdrObject()->GetLogicRect()); + + // Check the anchor the same and the textbox is inside the shape + const bool bIsAnchTheSame + = *pShFrm->GetAnchor().GetContentAnchor() == *pShFrm->GetAnchor().GetContentAnchor(); + CPPUNIT_ASSERT_MESSAGE("The anchor is different for the textbox and shape!", bIsAnchTheSame); + CPPUNIT_ASSERT_MESSAGE("The textbox has fallen apart!", aShpRect.IsInside(aTxtFrmRect)); + // Without the fix the anchor differs, and the frame ouside of the shape +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testRedlineNumberInNumbering) { SwDoc* pDoc = createDoc("tdf42748.fodt"); diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx index 43608c5bd136..f81aeaec45a7 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx @@ -28,6 +28,7 @@ #include <wrtsh.hxx> #include <IDocumentMarkAccess.hxx> +#include <IDocumentLayoutAccess.hxx> #include <IMark.hxx> #include <sortedobjs.hxx> #include <anchoredobject.hxx> @@ -36,6 +37,7 @@ #include <unotxdoc.hxx> #include <docsh.hxx> #include <rootfrm.hxx> +#include <frame.hxx> class Test : public SwModelTestBase { @@ -438,8 +440,17 @@ DECLARE_OOXMLIMPORT_TEST(testTdf112443, "tdf112443.docx") { // the position of the flying text frame should be off page // 30624 below its anchor - OUString aTop = parseDump("//fly[1]/infos/bounds", "top"); - CPPUNIT_ASSERT_EQUAL(OUString("30624"), aTop); + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwRootFrame* pRootFrame = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + const SwRect aPageRect = pRootFrame->getFrameArea(); + const SwRect aShapeRect(getShape(1)->getPosition().X, getShape(1)->getPosition().Y, + getShape(1)->getSize().Width, getShape(1)->getSize().Height); + CPPUNIT_ASSERT_MESSAGE("The textframe must be off-page!", !aPageRect.IsInside(aShapeRect)); + + //OUString aTop = parseDump("//fly[1]/infos/bounds", "top"); + //CPPUNIT_ASSERT_EQUAL(sal_Int32(30624), aTop.toInt32() ); } // DOCX: Textbox wrap differs in MSO and LO diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index 9684c7d6e26c..ae855822f77b 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -721,6 +721,7 @@ void SwTextBoxHelper::syncProperty(SwFrameFormat* pShape, sal_uInt16 nWID, sal_u xPropertySet->setPropertyValue(UNO_NAME_ANCHOR_TYPE, aValue); } // After anchoring the position must be set as well: + // At-Page anchor this will be the following: if (aValue.get<text::TextContentAnchorType>() == text::TextContentAnchorType::TextContentAnchorType_AT_PAGE) { @@ -734,7 +735,6 @@ void SwTextBoxHelper::syncProperty(SwFrameFormat* pShape, sal_uInt16 nWID, sal_u return; } } - // At-Content Anchors have to be synced: if (aValue.get<text::TextContentAnchorType>() == text::TextContentAnchorType::TextContentAnchorType_AT_PARAGRAPH _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits