svx/source/table/svdotable.cxx |   15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

New commits:
commit 98cd2671f0a215ced6203372ac673e2380031ac0
Author: Caolán McNamara <caol...@redhat.com>
Date:   Thu Nov 13 13:32:35 2014 +0000

    table layout cache returns wrong rectangle
    
    the layouter can modify its input rectangle to grow
    it to the necessary size to contain the layout
    
    but we're returning the input rectangle when the inputs are the same as the
    last call, not returning the output rectangle.
    
    cache the output rect for a given input and return that
    
    so now insert->table in impress and tab so extra cells are added and
    then select the table and the blue border contains the whole
    table, not just the first two rows
    
    Change-Id: I4f09594d82c1597204afbd059e175af9bf8e2527

diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
index 71d6f3e..c775c4b 100644
--- a/svx/source/table/svdotable.cxx
+++ b/svx/source/table/svdotable.cxx
@@ -241,7 +241,8 @@ public:
     virtual bool isInUse() SAL_OVERRIDE;
 private:
     static SdrTableObjImpl* lastLayoutTable;
-    static Rectangle lastLayoutRectangle;
+    static Rectangle lastLayoutInputRectangle;
+    static Rectangle lastLayoutResultRectangle;
     static bool lastLayoutFitWidth;
     static bool lastLayoutFitHeight;
     static WritingMode lastLayoutMode;
@@ -250,7 +251,8 @@ private:
 };
 
 SdrTableObjImpl* SdrTableObjImpl::lastLayoutTable = NULL;
-Rectangle SdrTableObjImpl::lastLayoutRectangle;
+Rectangle SdrTableObjImpl::lastLayoutInputRectangle;
+Rectangle SdrTableObjImpl::lastLayoutResultRectangle;
 bool SdrTableObjImpl::lastLayoutFitWidth;
 bool SdrTableObjImpl::lastLayoutFitHeight;
 WritingMode SdrTableObjImpl::lastLayoutMode;
@@ -693,14 +695,14 @@ void SdrTableObjImpl::LayoutTable( Rectangle& rArea, bool 
bFitWidth, bool bFitHe
         // Optimization: SdrTableObj::SetChanged() can call this very often, 
repeatedly
         // with the same settings, noticeably increasing load time. Skip if 
already done.
         WritingMode writingMode = mpTableObj->GetWritingMode();
-        if( lastLayoutTable != this || lastLayoutRectangle != rArea
+        if( lastLayoutTable != this || lastLayoutInputRectangle != rArea
             || lastLayoutFitWidth != bFitWidth || lastLayoutFitHeight != 
bFitHeight
             || lastLayoutMode != writingMode
             || lastRowCount != getRowCount()
             || lastColCount != getColumnCount() )
         {
             lastLayoutTable = this;
-            lastLayoutRectangle = rArea;
+            lastLayoutInputRectangle = rArea;
             lastLayoutFitWidth = bFitWidth;
             lastLayoutFitHeight = bFitHeight;
             lastLayoutMode = writingMode;
@@ -708,6 +710,11 @@ void SdrTableObjImpl::LayoutTable( Rectangle& rArea, bool 
bFitWidth, bool bFitHe
             lastColCount = getColumnCount();
             TableModelNotifyGuard aGuard( mxTable.get() );
             mpLayouter->LayoutTable( rArea, bFitWidth, bFitHeight );
+            lastLayoutResultRectangle = rArea;
+        }
+        else
+        {
+            rArea = lastLayoutResultRectangle;
         }
     }
 }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to