summaryrefslogtreecommitdiff
path: root/sw/source/core/layout/ssfrm.cxx
diff options
context:
space:
mode:
authorMark Hung <marklh9@gmail.com>2017-03-16 00:28:35 +0800
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-04-07 10:31:11 +0000
commitb13a0a27444ffbf9ef45cb16ad69fdff0dc64306 (patch)
tree9eef87084d2bac4b071dd63927a84f447d191a19 /sw/source/core/layout/ssfrm.cxx
parentcaf388959576da4f480b8c97443cb052f6201a33 (diff)
tdf#106390 improve table in table and table in frame clipping.
Set bottom of PaintArea() with the topmost botom of the upper frames, in case table might be cover by upper frame. Change-Id: Id379469114af2c3c5f844a69b584863f7dd7fd4c Reviewed-on: https://gerrit.libreoffice.org/35237 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'sw/source/core/layout/ssfrm.cxx')
-rw-r--r--sw/source/core/layout/ssfrm.cxx5
1 files changed, 5 insertions, 0 deletions
diff --git a/sw/source/core/layout/ssfrm.cxx b/sw/source/core/layout/ssfrm.cxx
index 2a4fd7421347..fa2e5673ea49 100644
--- a/sw/source/core/layout/ssfrm.cxx
+++ b/sw/source/core/layout/ssfrm.cxx
@@ -562,6 +562,7 @@ const SwRect SwFrame::PaintArea() const
SwRectFn fnRect = bVert ? ( IsVertLR() ? fnRectVertL2R : fnRectVert ) : fnRectHori;
long nRight = (aRect.*fnRect->fnGetRight)();
long nLeft = (aRect.*fnRect->fnGetLeft)();
+ long nBottom = (aRect.*fnRect->fnGetBottom)();
const SwFrame* pTmp = this;
bool bLeft = true;
bool bRight = true;
@@ -573,6 +574,7 @@ const SwRect SwFrame::PaintArea() const
nRowSpan = static_cast<const SwCellFrame*>(pTmp)->GetTabBox()->getRowSpan();
long nTmpRight = (pTmp->Frame().*fnRect->fnGetRight)();
long nTmpLeft = (pTmp->Frame().*fnRect->fnGetLeft)();
+ long nTmpBottom = (pTmp->Frame().*fnRect->fnGetBottom)();
if( pTmp->IsRowFrame() && nRowSpan > 1 )
{
const SwFrame* pNxt = pTmp;
@@ -588,6 +590,8 @@ const SwRect SwFrame::PaintArea() const
pTmp->IsCellFrame() || pTmp->IsRowFrame() || //nobody leaves a table!
pTmp->IsRootFrame() )
{
+ if( nTmpBottom < nBottom )
+ nBottom = nTmpBottom;
if( bLeft || nLeft < nTmpLeft )
nLeft = nTmpLeft;
if( bRight || nTmpRight < nRight )
@@ -640,6 +644,7 @@ const SwRect SwFrame::PaintArea() const
}
(aRect.*fnRect->fnSetLeft)( nLeft );
(aRect.*fnRect->fnSetRight)( nRight );
+ (aRect.*fnRect->fnSetBottom)( nBottom );
return aRect;
}