From b8f7ea5da41d61d405adec54dcd10b54ee0e5591 Mon Sep 17 00:00:00 2001 From: Matúš Kukan Date: Mon, 23 Jun 2014 19:20:07 +0200 Subject: Related bnc#822625: Minimum height was not invalidated when rectangle changes. 5792e76cb5beb630c135f57b74f57d74dd2dc2b0 was too optimistic and did not invalidate mnCachedMinHeight often enough. This was resulting in a grey area below table frame when resizing it. So, revert 5792e76cb5beb630c135f57b74f57d74dd2dc2b0 "Related bnc#822625: Cache minimum height for table cells." and istead just use getMinimumWidth() in TableLayouter if that's all we need. getMinimumHeight() is expensive. Change-Id: I34c49dda75d6ccccaa5b4d3746114352621a40dd --- svx/source/table/cell.cxx | 14 +++++--------- svx/source/table/cell.hxx | 1 - svx/source/table/tablelayouter.cxx | 8 ++++---- 3 files changed, 9 insertions(+), 14 deletions(-) (limited to 'svx/source/table') diff --git a/svx/source/table/cell.cxx b/svx/source/table/cell.cxx index 6b0fc19e78dd..0407bbe6b163 100644 --- a/svx/source/table/cell.cxx +++ b/svx/source/table/cell.cxx @@ -359,7 +359,6 @@ Cell::Cell( SdrTableObj& rTableObj, OutlinerParaObject* pOutlinerParaObject ) th , mbMerged( false ) , mnRowSpan( 1 ) , mnColSpan( 1 ) -, mnCachedMinHeight( -1 ) , mxTable( rTableObj.getTable() ) { if( rTableObj.GetModel() ) @@ -526,7 +525,6 @@ void Cell::setMerged() void Cell::notifyModified() { - mnCachedMinHeight = -1; if( mxTable.is() ) mxTable->setModified( sal_True ); } @@ -683,10 +681,8 @@ sal_Int32 Cell::getMinimumHeight() if( !mpProperties ) return 0; - if( mnCachedMinHeight != -1 ) - return mnCachedMinHeight; - SdrTableObj& rTableObj = dynamic_cast< SdrTableObj& >( GetObject() ); + sal_Int32 nMinimumHeight = 0; Rectangle aTextRect; TakeTextAnchorRect( aTextRect ); @@ -697,7 +693,7 @@ sal_Int32 Cell::getMinimumHeight() if(pEditOutliner) { pEditOutliner->SetMaxAutoPaperSize(aSize); - mnCachedMinHeight = pEditOutliner->GetTextHeight()+1; + nMinimumHeight = pEditOutliner->GetTextHeight()+1; } else /*if ( hasText() )*/ { @@ -710,12 +706,12 @@ sal_Int32 Cell::getMinimumHeight() { rOutliner.SetText(*GetOutlinerParaObject()); } - mnCachedMinHeight=rOutliner.GetTextHeight()+1; + nMinimumHeight=rOutliner.GetTextHeight()+1; rOutliner.Clear(); } - mnCachedMinHeight += GetTextUpperDistance() + GetTextLowerDistance(); - return mnCachedMinHeight; + nMinimumHeight += GetTextUpperDistance() + GetTextLowerDistance(); + return nMinimumHeight; } diff --git a/svx/source/table/cell.hxx b/svx/source/table/cell.hxx index d5d7eb001875..82d717d849e8 100644 --- a/svx/source/table/cell.hxx +++ b/svx/source/table/cell.hxx @@ -226,7 +226,6 @@ private: bool mbMerged; ::sal_Int32 mnRowSpan; ::sal_Int32 mnColSpan; - ::sal_Int32 mnCachedMinHeight; Rectangle maCellRect; diff --git a/svx/source/table/tablelayouter.cxx b/svx/source/table/tablelayouter.cxx index 7f4651d31f10..b3743ebda907 100644 --- a/svx/source/table/tablelayouter.cxx +++ b/svx/source/table/tablelayouter.cxx @@ -554,7 +554,7 @@ void TableLayouter::LayoutTableWidth( Rectangle& rArea, bool bFit ) } else { - nMinWidth = std::max( nMinWidth, xCell->getMinimumSize().Width ); + nMinWidth = std::max( nMinWidth, xCell->getMinimumWidth() ); } } } @@ -620,7 +620,7 @@ void TableLayouter::LayoutTableWidth( Rectangle& rArea, bool bFit ) while( iter != aMergedCells[nCol].end() ) { CellRef xCell( (*iter++) ); - sal_Int32 nMinWidth = xCell->getMinimumSize().Width; + sal_Int32 nMinWidth = xCell->getMinimumWidth(); for( sal_Int32 nMCol = nCol - xCell->getColumnSpan() + 1; (nMCol > 0) && (nMCol < nCol); ++nMCol ) nMinWidth -= maColumns[nMCol].mnSize; @@ -704,7 +704,7 @@ void TableLayouter::LayoutTableHeight( Rectangle& rArea, bool bFit ) } else { - nMinHeight = std::max( nMinHeight, xCell->getMinimumSize().Height ); + nMinHeight = std::max( nMinHeight, xCell->getMinimumHeight() ); } } } @@ -771,7 +771,7 @@ void TableLayouter::LayoutTableHeight( Rectangle& rArea, bool bFit ) while( iter != aMergedCells[nRow].end() ) { CellRef xCell( (*iter++) ); - sal_Int32 nMinHeight = xCell->getMinimumSize().Height; + sal_Int32 nMinHeight = xCell->getMinimumHeight(); for( sal_Int32 nMRow = nRow - xCell->getRowSpan() + 1; (nMRow > 0) && (nMRow < nRow); ++nMRow ) nMinHeight -= maRows[nMRow].mnSize; -- cgit v1.2.3