sc/inc/document.hxx             |    1 +
 sc/source/core/data/column2.cxx |    6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)

New commits:
commit 50774644bbede54784bf710e8f4c527110513361
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Fri Apr 22 10:03:47 2022 +0200
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Fri Apr 22 11:11:50 2022 +0200

    fix an off-by-one error in GetEmptyLinesInBlock()
    
    The function has been there since the initial commit and is not
    documented, but I think it counts the shortest amount of empty
    cells in the given area starting from the direction given. And
    AFAICT the off-by-one error was there since the initial commit,
    when it returned one less if the entire area was empty and
    the direction was vertical (horizontal was fine). And
    ScHTMLExport::FillGraphList() even was adjusted for this until
    my recent commit changing that code). But then ad2bc869bfe2d34bde
    added a shortcut for unallocated columns that didn't have
    the error. And the error even got corrected during the rewrite
    in c008dc483f8c6840803983e7e351cec6fdd32070, but then
    01de94471c20a8b9c36d6080638d70e57eac55bf reverted that. Anyway,
    so fix this, I think all the relevant code should(?) now work
    properly.
    
    Change-Id: I194691f7276a1cea75945de05cb0dda2cdca859a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133319
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 5e5af3a31fa6..e28992d21cfe 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1534,6 +1534,7 @@ public:
                                                  SCCOL& rEndCol, SCROW nEndRow 
) const;
     SC_DLLPUBLIC bool           IsEmptyBlock(SCCOL nStartCol, SCROW nStartRow,
                                              SCCOL nEndCol, SCROW nEndRow, 
SCTAB nTab) const;
+    // I think this returns the number of empty cells starting from the given 
direction.
     SC_DLLPUBLIC SCSIZE         GetEmptyLinesInBlock( SCCOL nStartCol, SCROW 
nStartRow, SCTAB nStartTab,
                                                       SCCOL nEndCol, SCROW 
nEndRow, SCTAB nEndTab,
                                                       ScDirection eDir );
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index c29b49e9d0de..f933497b4a75 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -1329,13 +1329,13 @@ bool ScColumn::IsNotesEmptyBlock(SCROW nStartRow, SCROW 
nEndRow) const
 
 SCSIZE ScColumn::GetEmptyLinesInBlock( SCROW nStartRow, SCROW nEndRow, 
ScDirection eDir ) const
 {
-    // Given a range of rows, find a top or bottom empty segment.  Skip the 
start row.
+    // Given a range of rows, find a top or bottom empty segment.
     switch (eDir)
     {
         case DIR_TOP:
         {
             // Determine the length of empty head segment.
-            size_t nLength = nEndRow - nStartRow;
+            size_t nLength = nEndRow - nStartRow + 1;
             std::pair<sc::CellStoreType::const_iterator,size_t> aPos = 
maCells.position(nStartRow);
             sc::CellStoreType::const_iterator it = aPos.first;
             if (it->type != sc::element_type_empty)
@@ -1350,7 +1350,7 @@ SCSIZE ScColumn::GetEmptyLinesInBlock( SCROW nStartRow, 
SCROW nEndRow, ScDirecti
         case DIR_BOTTOM:
         {
             // Determine the length of empty tail segment.
-            size_t nLength = nEndRow - nStartRow;
+            size_t nLength = nEndRow - nStartRow + 1;
             std::pair<sc::CellStoreType::const_iterator,size_t> aPos = 
maCells.position(nEndRow);
             sc::CellStoreType::const_iterator it = aPos.first;
             if (it->type != sc::element_type_empty)

Reply via email to