[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.1' - 2 commits - sc/inc sc/source

Kohei Yoshida kohei.yoshida at collabora.com
Sat Oct 8 04:23:45 UTC 2016


 sc/inc/document.hxx            |    6 ++++++
 sc/source/core/data/table2.cxx |   35 +++++++++++++++++++++++++++++++----
 2 files changed, 37 insertions(+), 4 deletions(-)

New commits:
commit 0638c640abea8b5b420ede90bb9d14e0560efe53
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Fri Oct 7 21:51:04 2016 -0400

    Reduce the number of calls to underlying flat_segment_tree structure.
    
    By replacing the getValue() call to getRangeData().
    
    Change-Id: Ia563b08dd356d9653e6a6ce16256196b28f56b65
    (cherry picked from commit 7345a032bb6758dcbe425c911d557d0b22d7d5ec)
    Reviewed-on: https://gerrit.libreoffice.org/29604
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index e6f09e2..5809930 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -3678,9 +3678,13 @@ sal_uLong ScTable::GetRowOffset( SCROW nRow, bool bHiddenAsZero ) const
 
 SCROW ScTable::GetRowForHeight(sal_uLong nHeight) const
 {
-    sal_uInt32 nSum = 0;
+    sal_uLong nSum = 0;
 
     ScFlatBoolRowSegments::RangeData aData;
+
+    ScFlatUInt16RowSegments::RangeData aRowHeightRange;
+    aRowHeightRange.mnRow2 = -1;
+
     for (SCROW nRow = 0; nRow <= MAXROW; ++nRow)
     {
         if (!mpHiddenRows->getRangeData(nRow, aData))
@@ -3694,8 +3698,15 @@ SCROW ScTable::GetRowForHeight(sal_uLong nHeight) const
             continue;
         }
 
-        sal_uInt32 nNew = mpRowHeights->getValue(nRow);
-        nSum += nNew;
+        if (aRowHeightRange.mnRow2 < nRow)
+        {
+            if (!mpRowHeights->getRangeData(nRow, aRowHeightRange))
+                // Failed to fetch the range data for whatever reason.
+                break;
+        }
+
+        nSum += aRowHeightRange.mnValue;
+
         if (nSum > nHeight)
         {
             if (nRow >= MAXROW)
commit a7a9bc35edbc3505d4f7b65a78c0b2d92d905a9a
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Fri Oct 7 21:34:51 2016 -0400

    Properly skip the hidden row(s) at the end.
    
    This method is supposed to return the first visible row that occurs
    below the specified hight.  The old code would sometimes return a
    hidden row.
    
    Change-Id: Idf32c625c4f51355cd5d8a9f12ae9bbdddd4e5aa
    (cherry picked from commit 61b76cd8ca6a4a98a2ffe6fb42c73eba561aa87f)
    Reviewed-on: https://gerrit.libreoffice.org/29603
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 574f937..70c6b32 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1566,6 +1566,12 @@ public:
     SC_DLLPUBLIC sal_uInt16         GetRowHeight( SCROW nRow, SCTAB nTab, bool bHiddenAsZero = true ) const;
     SC_DLLPUBLIC sal_uInt16         GetRowHeight( SCROW nRow, SCTAB nTab, SCROW* pStartRow, SCROW* pEndRow, bool bHiddenAsZero = true ) const;
     SC_DLLPUBLIC sal_uLong          GetRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bHiddenAsZero = true ) const;
+
+    /**
+     * Given the height i.e. total vertical distance from the top of the sheet
+     * grid, return the first visible row whose top position is below the
+     * specified height.
+     */
     SCROW                       GetRowForHeight( SCTAB nTab, sal_uLong nHeight ) const;
     sal_uLong                       GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, double fScale ) const;
     SC_DLLPUBLIC sal_uLong          GetColOffset( SCCOL nCol, SCTAB nTab, bool bHiddenAsZero = true ) const;
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index bdddb60..e6f09e2 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -3684,10 +3684,12 @@ SCROW ScTable::GetRowForHeight(sal_uLong nHeight) const
     for (SCROW nRow = 0; nRow <= MAXROW; ++nRow)
     {
         if (!mpHiddenRows->getRangeData(nRow, aData))
+            // Failed to fetch the range data for whatever reason.
             break;
 
         if (aData.mbValue)
         {
+            // This row is hidden.  Skip ahead all hidden rows.
             nRow = aData.mnRow2;
             continue;
         }
@@ -3696,7 +3698,21 @@ SCROW ScTable::GetRowForHeight(sal_uLong nHeight) const
         nSum += nNew;
         if (nSum > nHeight)
         {
-            return nRow < MAXROW ? nRow + 1 : MAXROW;
+            if (nRow >= MAXROW)
+                return MAXROW;
+
+            // Find the next visible row.
+            ++nRow;
+
+            if (!mpHiddenRows->getRangeData(nRow, aData))
+                // Failed to fetch the range data for whatever reason.
+                break;
+
+            if (aData.mbValue)
+                // These rows are hidden.
+                nRow = aData.mnRow2 + 1;
+
+            return nRow <= MAXROW ? nRow : MAXROW;
         }
     }
     return -1;


More information about the Libreoffice-commits mailing list