sw/qa/extras/uiwriter/data/tdf88453-table.odt |binary sw/qa/extras/uiwriter/uiwriter.cxx | 11 +++++++++++ sw/source/core/layout/tabfrm.cxx | 16 ++++++++++++++++ 3 files changed, 27 insertions(+)
New commits: commit f4eb82cf9fea5c1df49fad6ee2d91fc51854cd29 Author: Miklos Vajna <[email protected]> Date: Thu Mar 24 17:09:21 2016 +0100 tdf#88453 sw layout, nested table split: shrink inner tables as well Commit b4b5dbee1ec7770ed64d7270de46d5cfc06b87b6 (tdf#88453 sw layout: fix split of nested tables with large amount of rows, 2016-03-23) took care of two similar problems when splitting tables which has nested ones (setting cell height to 0 when its content height is 0, and setting row height to 0 when its cells' height are zero). Turns out there is a third aspect of the same problem: when row heights are set to 0 during shrinking for table split purposes, the table height has to be set to 0 as well, in case the table contains only 0-height rows. With this, the original bugdoc's layout is the expected one. Change-Id: I3f5392eb914a60e9caa5182dc6d44bd3a93f41d6 Reviewed-on: https://gerrit.libreoffice.org/23497 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Jenkins <[email protected]> diff --git a/sw/qa/extras/uiwriter/data/tdf88453-table.odt b/sw/qa/extras/uiwriter/data/tdf88453-table.odt new file mode 100644 index 0000000..2c20561 Binary files /dev/null and b/sw/qa/extras/uiwriter/data/tdf88453-table.odt differ diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 5a3cbb7..f6b9d74 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -189,6 +189,7 @@ public: void testTdf96479(); void testTdf96961(); void testTdf88453(); + void testTdf88453Table(); void testClassificationPaste(); CPPUNIT_TEST_SUITE(SwUiWriterTest); @@ -282,6 +283,7 @@ public: CPPUNIT_TEST(testTdf96479); CPPUNIT_TEST(testTdf96961); CPPUNIT_TEST(testTdf88453); + CPPUNIT_TEST(testTdf88453Table); CPPUNIT_TEST(testClassificationPaste); CPPUNIT_TEST_SUITE_END(); @@ -3523,6 +3525,15 @@ void SwUiWriterTest::testTdf88453() assertXPath(pXmlDoc, "/root/page[2]/body/tab", 1); } +void SwUiWriterTest::testTdf88453Table() +{ + createDoc("tdf88453-table.odt"); + calcLayout(); + // This was 2: layout could not split the large outer table in the document + // into 3 pages. + CPPUNIT_ASSERT_EQUAL(3, getPages()); +} + namespace { diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx index 2f16c98..e185feac 100644 --- a/sw/source/core/layout/tabfrm.cxx +++ b/sw/source/core/layout/tabfrm.cxx @@ -364,11 +364,27 @@ static void lcl_ShrinkCellsAndAllContent( SwRowFrame& rRow ) if ( pTmp->IsTabFrame() ) { SwRowFrame* pTmpRow = static_cast<SwRowFrame*>(static_cast<SwTabFrame*>(pTmp)->Lower()); + bool bAllRowsCollapsed = true; + while ( pTmpRow ) { lcl_ShrinkCellsAndAllContent( *pTmpRow ); + + if ((pTmpRow->Frame().*fnRect->fnGetHeight)() > 0) + bAllRowsCollapsed = false; + pTmpRow = static_cast<SwRowFrame*>(pTmpRow->GetNext()); } + + if (bAllRowsCollapsed) + { + // All rows of this table have 0 height -> set height of the table itself as well. + (pTmp->Frame().*fnRect->fnSetHeight)(0); + (pTmp->Prt().*fnRect->fnSetTop)(0); + (pTmp->Prt().*fnRect->fnSetHeight)(0); + } + else + bAllLowersCollapsed = false; } else { _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
