Kaydet (Commit) 26b06662 authored tarafından Luboš Luňák's avatar Luboš Luňák

avoid repeated table layouting (fdo#75622)

With the document from fdo#75622, this saves 3775 calls and leaves only 13.
e586fe45 removed avoiding the call
to LayoutTable(), which made loading slow. I checked that the doc from that
bugreport still works, so if very original code was correct in avoiding
the call sometimes, this should be ok too.

Change-Id: Ia80f974d4497e5cb04612331527eb87b579ddb76
üst 0cb272bb
......@@ -242,9 +242,19 @@ public:
void connectTableStyle();
void disconnectTableStyle();
virtual bool isInUse();
private:
static SdrTableObjImpl* lastLayoutTable;
static Rectangle lastLayoutRectangle;
static bool lastLayoutFitWidth;
static bool lastLayoutFitHeight;
static WritingMode lastLayoutMode;
};
SdrTableObjImpl* SdrTableObjImpl::lastLayoutTable = NULL;
Rectangle SdrTableObjImpl::lastLayoutRectangle;
bool SdrTableObjImpl::lastLayoutFitWidth;
bool SdrTableObjImpl::lastLayoutFitHeight;
WritingMode SdrTableObjImpl::lastLayoutMode;
SdrTableObjImpl::SdrTableObjImpl()
: mpTableObj( 0 )
......@@ -257,6 +267,8 @@ SdrTableObjImpl::SdrTableObjImpl()
SdrTableObjImpl::~SdrTableObjImpl()
{
if( lastLayoutTable == this )
lastLayoutTable = NULL;
}
......@@ -677,8 +689,21 @@ void SdrTableObjImpl::LayoutTable( Rectangle& rArea, bool bFitWidth, bool bFitHe
{
if( mpLayouter && mpTableObj->GetModel() )
{
TableModelNotifyGuard aGuard( mxTable.get() );
mpLayouter->LayoutTable( rArea, bFitWidth, bFitHeight );
// 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
|| lastLayoutFitWidth != bFitWidth || lastLayoutFitHeight != bFitHeight
|| lastLayoutMode != writingMode )
{
lastLayoutTable = this;
lastLayoutRectangle = rArea;
lastLayoutFitWidth = bFitWidth;
lastLayoutFitHeight = bFitHeight;
lastLayoutMode = writingMode;
TableModelNotifyGuard aGuard( mxTable.get() );
mpLayouter->LayoutTable( rArea, bFitWidth, bFitHeight );
}
}
}
......
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