svx/source/table/cell.cxx | 14 +++++++++----- svx/source/table/cell.hxx | 1 + vcl/inc/outdev.h | 2 +- vcl/source/outdev/font.cxx | 12 +++++++----- 4 files changed, 18 insertions(+), 11 deletions(-)
New commits: commit a6b00d16eb27a5e7e31c721671001a909ecef960 Author: Matúš Kukan <matus.ku...@collabora.com> Date: Tue May 27 16:37:30 2014 +0200 Related bnc#822625: Cache FontEntry with the original FontSelectPattern. Otherwise we never hit cache directly, only after expensive call to ImplFindByFont. Change-Id: If15b368feeba94c8fff8ee7cbe049fc4a2069768 diff --git a/vcl/inc/outdev.h b/vcl/inc/outdev.h index dcde57c..e468ae2 100644 --- a/vcl/inc/outdev.h +++ b/vcl/inc/outdev.h @@ -149,7 +149,7 @@ public: ImplFontEntry* GetFontEntry( PhysicalFontCollection*, const Font&, const Size& rPixelSize, float fExactHeight); - ImplFontEntry* GetFontEntry( PhysicalFontCollection*, FontSelectPattern& ); + ImplFontEntry* GetFontEntry( PhysicalFontCollection*, const FontSelectPattern& ); ImplFontEntry* GetGlyphFallbackFont( PhysicalFontCollection*, FontSelectPattern&, int nFallbackLevel, OUString& rMissingCodes ); void Release( ImplFontEntry* ); diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx index 9e40712..d8b77db 100644 --- a/vcl/source/outdev/font.cxx +++ b/vcl/source/outdev/font.cxx @@ -1227,22 +1227,23 @@ ImplFontEntry* ImplFontCache::GetFontEntry( PhysicalFontCollection* pFontList, } ImplFontEntry* ImplFontCache::GetFontEntry( PhysicalFontCollection* pFontList, - FontSelectPattern& aFontSelData ) + const FontSelectPattern& rFontSelData ) { // check if a directly matching logical font instance is already cached, // the most recently used font usually has a hit rate of >50% ImplFontEntry *pEntry = NULL; PhysicalFontFamily* pFontFamily = NULL; IFSD_Equal aIFSD_Equal; - if( mpFirstEntry && aIFSD_Equal( aFontSelData, mpFirstEntry->maFontSelData ) ) + if( mpFirstEntry && aIFSD_Equal( rFontSelData, mpFirstEntry->maFontSelData ) ) pEntry = mpFirstEntry; else { - FontInstanceList::iterator it = maFontInstanceList.find( aFontSelData ); + FontInstanceList::iterator it = maFontInstanceList.find( rFontSelData ); if( it != maFontInstanceList.end() ) pEntry = (*it).second; } + FontSelectPattern aFontSelData(rFontSelData); if( !pEntry ) // no direct cache hit { // find the best matching logical font family and update font selector accordingly @@ -1315,8 +1316,9 @@ ImplFontEntry* ImplFontCache::GetFontEntry( PhysicalFontCollection* pFontList, } #endif - // add the new entry to the cache - maFontInstanceList[ aFontSelData ] = pEntry; + // Add the new entry to the cache with the original FontSelectPattern, + // so that we can find it next time as a direct cache hit. + maFontInstanceList[ rFontSelData ] = pEntry; } mpFirstEntry = pEntry; commit 5792e76cb5beb630c135f57b74f57d74dd2dc2b0 Author: Matúš Kukan <matus.ku...@collabora.com> Date: Tue May 27 10:39:45 2014 +0200 Related bnc#822625: Cache minimum height for table cells. Change-Id: I35e295347a046376289f5d4fd5468860d0b8f0ae diff --git a/svx/source/table/cell.cxx b/svx/source/table/cell.cxx index d26d70c..20d676d 100644 --- a/svx/source/table/cell.cxx +++ b/svx/source/table/cell.cxx @@ -359,6 +359,7 @@ Cell::Cell( SdrTableObj& rTableObj, OutlinerParaObject* pOutlinerParaObject ) th , mbMerged( false ) , mnRowSpan( 1 ) , mnColSpan( 1 ) +, mnCachedMinHeight( -1 ) , mxTable( rTableObj.getTable() ) { if( rTableObj.GetModel() ) @@ -525,6 +526,7 @@ void Cell::setMerged() void Cell::notifyModified() { + mnCachedMinHeight = -1; if( mxTable.is() ) mxTable->setModified( sal_True ); } @@ -681,8 +683,10 @@ 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 ); @@ -693,7 +697,7 @@ sal_Int32 Cell::getMinimumHeight() if(pEditOutliner) { pEditOutliner->SetMaxAutoPaperSize(aSize); - nMinimumHeight = pEditOutliner->GetTextHeight()+1; + mnCachedMinHeight = pEditOutliner->GetTextHeight()+1; } else /*if ( hasText() )*/ { @@ -706,12 +710,12 @@ sal_Int32 Cell::getMinimumHeight() { rOutliner.SetText(*GetOutlinerParaObject()); } - nMinimumHeight=rOutliner.GetTextHeight()+1; + mnCachedMinHeight=rOutliner.GetTextHeight()+1; rOutliner.Clear(); } - nMinimumHeight += GetTextUpperDistance() + GetTextLowerDistance(); - return nMinimumHeight; + mnCachedMinHeight += GetTextUpperDistance() + GetTextLowerDistance(); + return mnCachedMinHeight; } diff --git a/svx/source/table/cell.hxx b/svx/source/table/cell.hxx index 82d717d..d5d7eb0 100644 --- a/svx/source/table/cell.hxx +++ b/svx/source/table/cell.hxx @@ -226,6 +226,7 @@ private: bool mbMerged; ::sal_Int32 mnRowSpan; ::sal_Int32 mnColSpan; + ::sal_Int32 mnCachedMinHeight; Rectangle maCellRect;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits