summaryrefslogtreecommitdiff
path: root/sw/source/core/layout/ssfrm.cxx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2019-10-29 15:29:59 +0100
committerMiklos Vajna <vmiklos@collabora.com>2019-10-29 18:59:41 +0100
commit435ab51ec8920033b7865f27f4afee8a852a0b31 (patch)
treec9c36ad076e7aef85cc78e3af399340d3998efc8 /sw/source/core/layout/ssfrm.cxx
parentc3877269eebc591578e1c6f7e19781b26774697b (diff)
tdf#128399 sw btlr: fix clicking to lower rotated cell
In case a table has more than 1 btlr cells in multiple rows, the first captured the mouse. This was because SwFrame::GetPaintArea() assumed that left and right edges can be compared directly, without going via the SwRectFnSet abstraction. This works for hozizontal and plain vertical directions, but not for btlr. Change-Id: Ia3bd7623a5d8d9ad3bdfabceb10adc0dbf105059 Reviewed-on: https://gerrit.libreoffice.org/81688 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
Diffstat (limited to 'sw/source/core/layout/ssfrm.cxx')
-rw-r--r--sw/source/core/layout/ssfrm.cxx13
1 files changed, 7 insertions, 6 deletions
diff --git a/sw/source/core/layout/ssfrm.cxx b/sw/source/core/layout/ssfrm.cxx
index fea37d6f3310..a38c784f146f 100644
--- a/sw/source/core/layout/ssfrm.cxx
+++ b/sw/source/core/layout/ssfrm.cxx
@@ -585,6 +585,7 @@ SwRect SwFrame::GetPaintArea() const
SwRect aRect = IsRowFrame() ? GetUpper()->getFrameArea() : getFrameArea();
const bool bVert = IsVertical();
SwRectFn fnRect = bVert ? ( IsVertLR() ? (IsVertLRBT() ? fnRectVertL2RB2T : fnRectVertL2R) : fnRectVert ) : fnRectHori;
+ SwRectFnSet aRectFnSet(this);
long nRight = (aRect.*fnRect->fnGetRight)();
long nLeft = (aRect.*fnRect->fnGetLeft)();
const SwFrame* pTmp = this;
@@ -613,9 +614,9 @@ SwRect SwFrame::GetPaintArea() const
pTmp->IsCellFrame() || pTmp->IsRowFrame() || //nobody leaves a table!
pTmp->IsRootFrame() )
{
- if( bLeft || nLeft < nTmpLeft )
+ if( bLeft || aRectFnSet.XDiff(nTmpLeft, nLeft) > 0 )
nLeft = nTmpLeft;
- if( bRight || nTmpRight < nRight )
+ if( bRight || aRectFnSet.XDiff(nRight, nTmpRight) > 0 )
nRight = nTmpRight;
if( pTmp->IsPageFrame() || pTmp->IsFlyFrame() || pTmp->IsRootFrame() )
break;
@@ -628,14 +629,14 @@ SwRect SwFrame::GetPaintArea() const
// the first column has _no_ influence to the left range
if( bR2L ? pTmp->GetNext() : pTmp->GetPrev() )
{
- if( bLeft || nLeft < nTmpLeft )
+ if( bLeft || aRectFnSet.XDiff(nTmpLeft, nLeft) > 0 )
nLeft = nTmpLeft;
bLeft = false;
}
// the last column has _no_ influence to the right range
if( bR2L ? pTmp->GetPrev() : pTmp->GetNext() )
{
- if( bRight || nTmpRight < nRight )
+ if( bRight || aRectFnSet.XDiff(nRight, nTmpRight) > 0 )
nRight = nTmpRight;
bRight = false;
}
@@ -648,14 +649,14 @@ SwRect SwFrame::GetPaintArea() const
// the next frame of a body frame may be a footnotecontainer or
// a footer. The footnotecontainer has the same direction like
// the body frame.
- if( pTmp->GetPrev() && ( bLeft || nLeft < nTmpLeft ) )
+ if( pTmp->GetPrev() && ( bLeft || aRectFnSet.XDiff(nTmpLeft, nLeft) > 0 ) )
{
nLeft = nTmpLeft;
bLeft = false;
}
if( pTmp->GetNext() &&
( pTmp->GetNext()->IsFooterFrame() || pTmp->GetNext()->GetNext() )
- && ( bRight || nTmpRight < nRight ) )
+ && ( bRight || aRectFnSet.XDiff(nRight, nTmpRight) > 0 ) )
{
nRight = nTmpRight;
bRight = false;