[Libreoffice-commits] core.git: sw/qa sw/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Thu Feb 28 08:18:15 UTC 2019
sw/qa/extras/layout/layout.cxx | 9 +++++++++
sw/source/core/layout/newfrm.cxx | 4 ++--
sw/source/core/layout/trvlfrm.cxx | 12 ++++++------
3 files changed, 17 insertions(+), 8 deletions(-)
New commits:
commit 8ae5a98852c2f3d87d6efff598f0c7d54df835d3
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Wed Feb 27 21:31:06 2019 +0100
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Thu Feb 28 09:17:49 2019 +0100
sw btlr writing mode shell: left/right cursor travelling, fix dest para
Fix aVerticalLeftToRightBottomToTop:
- fnXDiff takes "logically larger, logically smaller" arguments, so it's
first - second for top to bottom text (existing directions) but it's
second - first for btlr
- fnXInc was effectively unused before, but it probably meant to provide
logical left + width, so set that to physical left - width for btlr
And then port 3 places in lcl_UpDown() to use aRectFnSet, so we get
correct behavior for both ttb and btt directions.
With this, pressing the left/right arrow jumps to the previous / next
paragraph correctly.
Change-Id: I1323e95e2ce0ab2d66a3ea6e02bd50df2cebf232
Reviewed-on: https://gerrit.libreoffice.org/68462
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index a1f805d42bd9..6b54065d9e88 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -2841,6 +2841,7 @@ void SwLayoutWriter::testBtlrCell()
CPPUNIT_ASSERT_LESS(nFirstParaBottom, rCharRect.Top());
// Test that pressing "up" at the start of the cell goes to the next character position.
+ sal_uLong nNodeIndex = pWrtShell->GetCursor()->Start()->nNode.GetIndex();
sal_Int32 nIndex = pWrtShell->GetCursor()->Start()->nContent.GetIndex();
KeyEvent aKeyEvent(0, KEY_UP);
SwEditWin& rEditWin = pShell->GetView()->GetEditWin();
@@ -2849,6 +2850,14 @@ void SwLayoutWriter::testBtlrCell()
// Without the accompanying fix in place, this test would have failed: "up" was interpreted as
// logical "left", which does nothing if you're at the start of the text anyway.
CPPUNIT_ASSERT_EQUAL(nIndex + 1, pWrtShell->GetCursor()->Start()->nContent.GetIndex());
+
+ // Test that pressing "right" goes to the next paragraph (logical "down").
+ aKeyEvent = KeyEvent(0, KEY_RIGHT);
+ rEditWin.KeyInput(aKeyEvent);
+ Scheduler::ProcessEventsToIdle();
+ // Without the accompanying fix in place, this test would have failed: the cursor went to the
+ // paragraph after the table.
+ CPPUNIT_ASSERT_EQUAL(nNodeIndex + 1, pWrtShell->GetCursor()->Start()->nNode.GetIndex());
#endif
}
diff --git a/sw/source/core/layout/newfrm.cxx b/sw/source/core/layout/newfrm.cxx
index 94e016434e47..bfaf62657091 100644
--- a/sw/source/core/layout/newfrm.cxx
+++ b/sw/source/core/layout/newfrm.cxx
@@ -275,9 +275,9 @@ static SwRectFnCollection aVerticalLeftToRightBottomToTop = {
/*.fnSetPos =*/&SwRect::SetLowerLeftCorner,
/*.fnMakePos =*/&SwFrame::MakeRightPos,
- /*.fnXDiff =*/&FirstMinusSecond,
+ /*.fnXDiff =*/&SecondMinusFirst,
/*.fnYDiff =*/&FirstMinusSecond,
- /*.fnXInc =*/&SwIncrement,
+ /*.fnXInc =*/&SwDecrement,
/*.fnYInc =*/&SwIncrement,
/*.fnSetLeftAndWidth =*/&SwRect::SetBottomAndHeight,
diff --git a/sw/source/core/layout/trvlfrm.cxx b/sw/source/core/layout/trvlfrm.cxx
index a434a20567c2..912cbafbb43e 100644
--- a/sw/source/core/layout/trvlfrm.cxx
+++ b/sw/source/core/layout/trvlfrm.cxx
@@ -757,8 +757,8 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart,
while ( pCell && !pCell->IsCellFrame() )
pCell = pCell->GetUpper();
OSL_ENSURE( pCell, "could not find the cell" );
- nX = aRectFnSet.GetLeft(pCell->getFrameArea()) +
- aRectFnSet.GetWidth(pCell->getFrameArea()) / 2;
+ nX = aRectFnSet.XInc(aRectFnSet.GetLeft(pCell->getFrameArea()),
+ aRectFnSet.GetWidth(pCell->getFrameArea()) / 2);
//The flow leads from one table to the next. The X-value needs to be
//corrected based on the middle of the starting cell by the amount
@@ -778,14 +778,14 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart,
const long nPrtLeft = bRTL ?
aRectFnSet.GetPrtRight(*pTable) :
aRectFnSet.GetPrtLeft(*pTable);
- if ( bRTL != (nX < nPrtLeft) )
+ if (bRTL != (aRectFnSet.XDiff(nPrtLeft, nX) > 0))
nX = nPrtLeft;
else
{
const long nPrtRight = bRTL ?
aRectFnSet.GetPrtLeft(*pTable) :
aRectFnSet.GetPrtRight(*pTable);
- if ( bRTL != (nX > nPrtRight) )
+ if (bRTL != (aRectFnSet.XDiff(nX, nPrtRight) > 0))
nX = nPrtRight;
}
}
@@ -884,7 +884,7 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart,
if ( aRectFnSet.IsVert() )
{
if ( nTmpTop )
- --nTmpTop;
+ nTmpTop = aRectFnSet.XInc(nTmpTop, -1);
aInsideCell = Point( nTmpTop, nX );
}
@@ -896,7 +896,7 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart,
if ( aRectFnSet.IsVert() )
{
if ( nTmpTop )
- --nTmpTop;
+ nTmpTop = aRectFnSet.XInc(nTmpTop, -1);
aInsideCnt = Point( nTmpTop, nX );
}
More information about the Libreoffice-commits
mailing list