Kaydet (Commit) 98cd2671 authored tarafından Caolán McNamara's avatar Caolán McNamara

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
üst 8003afa1
......@@ -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;
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment