[Libreoffice-commits] core.git: sc/inc sc/source

Noel Grandin noel at peralex.com
Mon Nov 30 04:54:03 PST 2015


 sc/inc/document.hxx                 |    2 -
 sc/source/filter/excel/xeescher.cxx |   57 +++++++++++++++++++++++++++++++-----
 2 files changed, 51 insertions(+), 8 deletions(-)

New commits:
commit 343e405f18a51abd6d386072ad33978fa83b8b31
Author: Noel Grandin <noel at peralex.com>
Date:   Mon Nov 30 14:50:14 2015 +0200

    tdf#66668 - FILESAVE: Saving an XLSX file freezes Calc
    
    Change-Id: I7abbb1cc5056f33458257afe28ed933e2d3c378d

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 781db63..4720d34 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -693,7 +693,7 @@ public:
     void            SetPendingRowHeights( SCTAB nTab, bool bSet );
     SC_DLLPUBLIC void           SetLayoutRTL( SCTAB nTab, bool bRTL );
     SC_DLLPUBLIC bool           IsLayoutRTL( SCTAB nTab ) const;
-    bool            IsNegativePage( SCTAB nTab ) const;
+    SC_DLLPUBLIC bool           IsNegativePage( SCTAB nTab ) const;
     SC_DLLPUBLIC void           SetScenario( SCTAB nTab, bool bFlag );
     SC_DLLPUBLIC bool           IsScenario( SCTAB nTab ) const;
     SC_DLLPUBLIC void GetScenarioData( SCTAB nTab, OUString& rComment,
diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx
index cbaf7c2..6e04a38 100644
--- a/sc/source/filter/excel/xeescher.cxx
+++ b/sc/source/filter/excel/xeescher.cxx
@@ -159,15 +159,15 @@ static void lcl_WriteAnchorVertex( sax_fastparser::FSHelperPtr rComments, Rectan
 
 static void lcl_GetFromTo( const XclExpRoot& rRoot, const Rectangle &aRect, sal_Int32 nTab, Rectangle &aFrom, Rectangle &aTo )
 {
-    bool bTo = false;
     sal_Int32 nCol = 0, nRow = 0;
     sal_Int32 nColOff = 0, nRowOff= 0;
 
-    while(true)
+    const bool bRTL = rRoot.GetDocRef().IsNegativePage( nTab );
+    if (!bRTL)
     {
-        Rectangle r = rRoot.GetDocRef().GetMMRect( nCol,nRow,nCol,nRow,nTab );
-        if( !bTo )
+        while(true)
         {
+            Rectangle r = rRoot.GetDocRef().GetMMRect( nCol,nRow,nCol,nRow,nTab );
             if( r.Left() <= aRect.Left() )
             {
                 nCol++;
@@ -182,11 +182,38 @@ static void lcl_GetFromTo( const XclExpRoot& rRoot, const Rectangle &aRect, sal_
             {
                 aFrom = Rectangle( nCol-1, static_cast<long>(HMM2XL( nColOff )),
                                    nRow-1, static_cast<long>(HMM2XL( nRowOff )) );
-                bTo=true;
+                break;
             }
         }
-        if( bTo )
+    }
+    else
+    {
+        while(true)
         {
+            Rectangle r = rRoot.GetDocRef().GetMMRect( nCol,nRow,nCol,nRow,nTab );
+            if( r.Left() >= aRect.Left() )
+            {
+                nCol++;
+                nColOff = r.Left() - aRect.Left();
+            }
+            if( r.Top() <= aRect.Top() )
+            {
+                nRow++;
+                nRowOff = aRect.Top() - r.Top();
+            }
+            if( r.Left() < aRect.Left() && r.Top() > aRect.Top() )
+            {
+                aFrom = Rectangle( nCol-1, static_cast<long>(HMM2XL( nColOff )),
+                                   nRow-1, static_cast<long>(HMM2XL( nRowOff )) );
+                break;
+            }
+        }
+    }
+    if (!bRTL)
+    {
+        while(true)
+        {
+            Rectangle r = rRoot.GetDocRef().GetMMRect( nCol,nRow,nCol,nRow,nTab );
             if( r.Right() < aRect.Right() )
                 nCol++;
             if( r.Bottom() < aRect.Bottom() )
@@ -199,7 +226,23 @@ static void lcl_GetFromTo( const XclExpRoot& rRoot, const Rectangle &aRect, sal_
             }
         }
     }
-    return;
+    else
+    {
+        while(true)
+        {
+            Rectangle r = rRoot.GetDocRef().GetMMRect( nCol,nRow,nCol,nRow,nTab );
+            if( r.Right() >= aRect.Right() )
+                nCol++;
+            if( r.Bottom() < aRect.Bottom() )
+                nRow++;
+            if( r.Right() < aRect.Right() && r.Bottom() >= aRect.Bottom() )
+            {
+                aTo = Rectangle( nCol, static_cast<long>(HMM2XL( r.Left() - aRect.Right() )),
+                                 nRow, static_cast<long>(HMM2XL( aRect.Bottom() - r.Top() )));
+                break;
+            }
+        }
+    }
 }
 
 // Escher client anchor =======================================================


More information about the Libreoffice-commits mailing list