[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