From 401c175d1bbe3c64e5dd96e3b23779999271cfb1 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Mon, 4 Sep 2023 08:31:18 +0200 Subject: [PATCH] tdf#156318 sw floattable: fix follow text flow handling on interactive edit Once the bugdoc has 1 col for pages, setting the top and bottom margins to 2.5cm created a split fly, but the follow fly was on page 3, not on page 2. What happened is that the layout was already wrong before calling into SwFrame::GetNextFlyLeaf() (that does the split), the "follow text flow" feature shifted the fly down (top was originally 1341, then the increased margin means 2475, but an additional 4329 was set), and then the fly was created on the wrong page. Fix the problem by not calling GetAnchoredObj().SetObjTop() in SwToContentAnchoredObjectPosition::CalcPosition() when the fly doesn't fit anymore, this way the fly can shrink, a follow can be created and some of the content will be moved to the follow fly, leading to a correct split fly on pages 1 & 2. This also fixes the previously appearing "fly frame has negative height now" warnings on setting the page margin. Change-Id: I75bf9cfa19dc5c7ce9607417d6a4121b8e85ac47 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156506 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- sw/CppunitTest_sw_core_objectpositioning.mk | 4 ++ .../data/floattable-follow-on-wrong-page.odt | Bin 0 -> 38658 bytes .../objectpositioning/objectpositioning.cxx | 56 ++++++++++++++---- .../tocntntanchoredobjectposition.cxx | 7 ++- 4 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 sw/qa/core/objectpositioning/data/floattable-follow-on-wrong-page.odt diff --git a/sw/CppunitTest_sw_core_objectpositioning.mk b/sw/CppunitTest_sw_core_objectpositioning.mk index 0f1a9dcff0be..8edae42595c8 100644 --- a/sw/CppunitTest_sw_core_objectpositioning.mk +++ b/sw/CppunitTest_sw_core_objectpositioning.mk @@ -21,6 +21,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_core_objectpositioning, \ comphelper \ cppu \ cppuhelper \ + editeng \ sal \ sfx \ subsequenttest \ @@ -70,6 +71,9 @@ $(eval $(call gb_CppunitTest_use_uiconfigs,sw_core_objectpositioning, \ modules/swriter \ )) +# assert if font/glyph fallback occurs +$(eval $(call gb_CppunitTest_set_non_application_font_use,sw_core_objectpositioning,abort)) + $(eval $(call gb_CppunitTest_use_more_fonts,sw_core_objectpositioning)) # vim: set noet sw=4 ts=4: diff --git a/sw/qa/core/objectpositioning/data/floattable-follow-on-wrong-page.odt b/sw/qa/core/objectpositioning/data/floattable-follow-on-wrong-page.odt new file mode 100644 index 0000000000000000000000000000000000000000..6401747fd9d369904127d0b2b5876490f42a38c4 GIT binary patch literal 38658 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 literal 0 HcmV?d00001 diff --git a/sw/qa/core/objectpositioning/objectpositioning.cxx b/sw/qa/core/objectpositioning/objectpositioning.cxx index 611ce1294c22..4e0db43c475f 100644 --- a/sw/qa/core/objectpositioning/objectpositioning.cxx +++ b/sw/qa/core/objectpositioning/objectpositioning.cxx @@ -12,6 +12,8 @@ #include #include +#include + #include #include #include @@ -21,18 +23,21 @@ #include #include #include +#include +namespace +{ /// Covers sw/source/core/objectpositioning/ fixes. -class SwCoreObjectpositioningTest : public SwModelTestBase +class Test : public SwModelTestBase { public: - SwCoreObjectpositioningTest() + Test() : SwModelTestBase("/sw/qa/core/objectpositioning/data/") { } }; -CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testOverlapCrash) +CPPUNIT_TEST_FIXTURE(Test, testOverlapCrash) { // Load a document with 2 images. createSwDoc("overlap-crash.odt"); @@ -51,7 +56,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testOverlapCrash) pWrtShell->SplitNode(); } -CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVertPosFromBottom) +CPPUNIT_TEST_FIXTURE(Test, testVertPosFromBottom) { // Create a document, insert a shape and position it 1cm above the bottom of the body area. createSwDoc(); @@ -80,7 +85,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVertPosFromBottom) CPPUNIT_ASSERT_EQUAL(static_cast(565), nBodyBottom - nAnchoredBottom); } -CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVertAlignBottomMargin) +CPPUNIT_TEST_FIXTURE(Test, testVertAlignBottomMargin) { // Create a document, insert three shapes and align it the bottom,center,top of page print area bottom. // The size of shapes are 284 ~ 0.5cm @@ -151,7 +156,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVertAlignBottomMargin) CPPUNIT_ASSERT_EQUAL(static_cast(0), nThirdShapeTop - nBodyBottom); } -CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVertAlignBottomMarginWithFooter) +CPPUNIT_TEST_FIXTURE(Test, testVertAlignBottomMarginWithFooter) { // Load an empty document with footer. createSwDoc("bottom-margin-with-footer.docx"); @@ -223,7 +228,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVertAlignBottomMarginWithF CPPUNIT_ASSERT_EQUAL(static_cast(0), nThirdShapeTop - nBodyBottom); } -CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testInsideOutsideVertAlignBottomMargin) +CPPUNIT_TEST_FIXTURE(Test, testInsideOutsideVertAlignBottomMargin) { // Load a document, with two shapes. // The shapes align the outside and inside of page print area bottom. @@ -244,7 +249,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testInsideOutsideVertAlignBott CPPUNIT_ASSERT_EQUAL(static_cast(0), nBodyBottom - nSecondShapeInside); } -CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVMLVertAlignBottomMargin) +CPPUNIT_TEST_FIXTURE(Test, testVMLVertAlignBottomMargin) { // Load a document, with five shapes. // The shapes align the top,center,bottom,outside and inside of page print area bottom. @@ -286,7 +291,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testVMLVertAlignBottomMargin) CPPUNIT_ASSERT_EQUAL(static_cast(1), nFifthVMLShapeOutside - nPageBottom); } -CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testFloatingTableOverlapNever) +CPPUNIT_TEST_FIXTURE(Test, testFloatingTableOverlapNever) { // Given a document with two floating tables, positioned in a way that normally these would // overlap, but SwFormatWrapInfluenceOnObjPos::mbAllowOverlap == false explicitly asks to avoid @@ -313,7 +318,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testFloatingTableOverlapNever) CPPUNIT_ASSERT_GREATER(pFlyFrame1->getFrameArea().Bottom(), pFlyFrame2->getFrameArea().Top()); } -CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testFloatingTableVertOrientTop) +CPPUNIT_TEST_FIXTURE(Test, testFloatingTableVertOrientTop) { // Given a document with a vert-orient=from-top anchored floating table: createSwDoc("floattable-vert-orient-top.odt"); @@ -337,6 +342,37 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, testFloatingTableVertOrientTop CPPUNIT_ASSERT_EQUAL(static_cast(1), rPage2Objs.size()); } +CPPUNIT_TEST_FIXTURE(Test, testFloatingTableFollowWrongPage) +{ + // Given a document with text on 2 pages, the first page has a fly frame that can split: + createSwDoc("floattable-follow-on-wrong-page.odt"); + + // When increasing the top and bottom margins from 0.5cm to 2.5cm: + SwDoc* pDoc = getSwDoc(); + SwPageDesc aStandard(pDoc->GetPageDesc(0)); + SvxULSpaceItem aPageMargin(aStandard.GetMaster().GetULSpace()); + aPageMargin.SetUpper(1417); + aPageMargin.SetLower(1417); + aStandard.GetMaster().SetFormatAttr(aPageMargin); + pDoc->ChgPageDesc(0, aStandard); + + // Then make sure the first and second page has fly frames: + SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + auto pPage1 = pLayout->Lower()->DynCastPageFrame(); + CPPUNIT_ASSERT(pPage1); + CPPUNIT_ASSERT(pPage1->GetSortedObjs()); + const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), rPage1Objs.size()); + auto pPage2 = pPage1->GetNext()->DynCastPageFrame(); + CPPUNIT_ASSERT(pPage2); + // Without the accompanying fix in place, this test would have failed, page 2 had no fly frame + // (page 3 had one). + CPPUNIT_ASSERT(pPage2->GetSortedObjs()); + const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs(); + CPPUNIT_ASSERT_EQUAL(static_cast(1), rPage2Objs.size()); +} +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx b/sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx index 561c16fd8115..73b8b088d1f7 100644 --- a/sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx +++ b/sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx @@ -193,6 +193,8 @@ void SwToContentAnchoredObjectPosition::CalcPosition() // If true, this means that the anchored object is a split fly frame and it's not a master but // one of the follows. bool bFollowSplitFly = false; + // The anchored object is a fly that is allowed to split. + bool bSplitFly = false; { // if object is at-character anchored, determine character-rectangle // and frame, position has to be oriented at. @@ -257,6 +259,7 @@ void SwToContentAnchoredObjectPosition::CalcPosition() // Anchored object has a precede, so it's a follow. bFollowSplitFly = true; } + bSplitFly = true; } } } @@ -952,7 +955,9 @@ void SwToContentAnchoredObjectPosition::CalcPosition() } } } - else + // Don't move split flys around for follow text flow purposes; if they don't fit their + // parent anymore, they will shrink and part of the content will move to the follow fly. + else if (!bSplitFly) { // follow text flow const bool bInFootnote = rAnchorTextFrame.IsInFootnote();