parent
7f779005fc
commit
fda1a37673
@ -0,0 +1,79 @@
|
|||||||
|
From f79f3d1322b396f5f45ccd7742015749e93ac57b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||||
|
Date: Thu, 13 Nov 2014 13:32:35 +0000
|
||||||
|
Subject: [PATCH] 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
|
||||||
|
(cherry picked from commit 98cd2671f0a215ced6203372ac673e2380031ac0)
|
||||||
|
---
|
||||||
|
svx/source/table/svdotable.cxx | 15 +++++++++++----
|
||||||
|
1 file changed, 11 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
|
||||||
|
index d49cfb3..fbd532a 100644
|
||||||
|
--- a/svx/source/table/svdotable.cxx
|
||||||
|
+++ b/svx/source/table/svdotable.cxx
|
||||||
|
@@ -244,7 +244,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;
|
||||||
|
@@ -253,7 +254,8 @@ private:
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrTableObjImpl* SdrTableObjImpl::lastLayoutTable = NULL;
|
||||||
|
-Rectangle SdrTableObjImpl::lastLayoutRectangle;
|
||||||
|
+Rectangle SdrTableObjImpl::lastLayoutInputRectangle;
|
||||||
|
+Rectangle SdrTableObjImpl::lastLayoutResultRectangle;
|
||||||
|
bool SdrTableObjImpl::lastLayoutFitWidth;
|
||||||
|
bool SdrTableObjImpl::lastLayoutFitHeight;
|
||||||
|
WritingMode SdrTableObjImpl::lastLayoutMode;
|
||||||
|
@@ -696,14 +698,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;
|
||||||
|
@@ -711,6 +713,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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.9.3
|
||||||
|
|
Loading…
Reference in new issue