sw/qa/core/layout/data/btlr-nested-cell.odt |binary sw/qa/core/layout/layout.cxx | 28 +++++++++++++++++++++++++++- sw/source/core/layout/ssfrm.cxx | 3 ++- 3 files changed, 29 insertions(+), 2 deletions(-)
New commits: commit 20f12960ae546ab90b1e216d5ed3f0dc576f1b48 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Mon Dec 14 21:05:02 2020 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Wed Dec 16 09:08:55 2020 +0100 tdf#138600 sw: fix too small print area for btlr text in nested table Regression from commit 435ab51ec8920033b7865f27f4afee8a852a0b31 (tdf#128399 sw btlr: fix clicking to lower rotated cell, 2019-10-29), the bugdoc has a btlr table cell and the row frame of the outer table has a bottom value which is very small at the point when SwFrame::GetPaintArea() is invoked for the inner btlr cell. This means the "cell should not leave its parent" mechanism kicks in and reduces the bottom of the paint area to a small value, so the text is not visible at all. Fix the problem by teaching SwFrame::GetPaintArea() that btlr cell frames are OK to leave their parent towards the bottom of the page; that parent will grow at a later phase of the layout process anyway. Change-Id: I99334bbf0116df8d8ed27f192c81c0441b6c797d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107730 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107787 diff --git a/sw/qa/core/layout/data/btlr-nested-cell.odt b/sw/qa/core/layout/data/btlr-nested-cell.odt new file mode 100644 index 000000000000..ca7a4798db97 Binary files /dev/null and b/sw/qa/core/layout/data/btlr-nested-cell.odt differ diff --git a/sw/qa/core/layout/layout.cxx b/sw/qa/core/layout/layout.cxx index 2151b870da13..76445faa4cfe 100644 --- a/sw/qa/core/layout/layout.cxx +++ b/sw/qa/core/layout/layout.cxx @@ -10,6 +10,7 @@ #include <swmodeltestbase.hxx> #include <vcl/gdimtf.hxx> +#include <svx/svdpage.hxx> #include <wrtsh.hxx> #include <docsh.hxx> @@ -17,7 +18,8 @@ #include <drawdoc.hxx> #include <IDocumentDrawModelAccess.hxx> #include <IDocumentState.hxx> -#include <svx/svdpage.hxx> +#include <IDocumentLayoutAccess.hxx> +#include <rootfrm.hxx> char const DATA_DIRECTORY[] = "/sw/qa/core/layout/data/"; @@ -216,6 +218,30 @@ CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTextBoxAutoGrowVertical) CPPUNIT_ASSERT(aShapeRect.IsInside(aFlyRect)); } +CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testBtlrNestedCell) +{ + // Load a document with a nested table, the inner A1 cell has a btlr text direction. + load(DATA_DIRECTORY, "btlr-nested-cell.odt"); + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + SwFrame* pPage = pLayout->GetLower(); + SwFrame* pBody = pPage->GetLower(); + SwFrame* pOuterTable = pBody->GetLower()->GetNext(); + SwFrame* pInnerTable = pOuterTable->GetLower()->GetLower()->GetLower(); + + // Check the paint area of the only text frame in the cell. + SwFrame* pTextFrame = pInnerTable->GetLower()->GetLower()->GetLower(); + tools::Long nFrameBottom = pTextFrame->getFrameArea().Bottom(); + SwRect aPaintArea = pTextFrame->GetPaintArea(); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected greater or equal than: 2829 + // - Actual : 2080 + // i.e. part of the text frame area was not painted, hiding the actual text. + CPPUNIT_ASSERT_GREATEREQUAL(nFrameBottom, aPaintArea.Bottom()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/layout/ssfrm.cxx b/sw/source/core/layout/ssfrm.cxx index 467a60a9d374..d8404b947c04 100644 --- a/sw/source/core/layout/ssfrm.cxx +++ b/sw/source/core/layout/ssfrm.cxx @@ -633,7 +633,8 @@ SwRect SwFrame::GetPaintArea() const pTmp->IsCellFrame() || pTmp->IsRowFrame() || //nobody leaves a table! pTmp->IsRootFrame() ) { - if( bLeft || aRectFnSet.XDiff(nTmpLeft, nLeft) > 0 ) + // BTLR is OK to expand towards the physical down direction. Physical down is left. + if( bLeft || (aRectFnSet.XDiff(nTmpLeft, nLeft) > 0 && !IsVertLRBT()) ) nLeft = nTmpLeft; if( bRight || aRectFnSet.XDiff(nRight, nTmpRight) > 0 ) nRight = nTmpRight; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits