vcl/inc/PhysicalFontFace.hxx | 16 +++++++++++----- vcl/source/font/PhysicalFontFace.cxx | 32 ++++++++++++++------------------ vcl/source/font/PhysicalFontFamily.cxx | 3 ++- 3 files changed, 27 insertions(+), 24 deletions(-)
New commits: commit b890a0ed02968589029fedf1854be83f1ffe8600 Author: Chris Sherlock <chris.sherloc...@gmail.com> Date: Fri Jan 1 22:38:29 2016 +1100 Revert "vcl: Get rid of FontMatchStatus structure" This reverts commit 60676b3b376d5f3f6fb29fa68c34117c2149bbec. The FontMapStatus structure is passed as a reference to save the search state outside of the search loop in PhysicalFontFamily::FindBestFontFace. This *looked* like it would be an easy win, evidently not! Back to the drawing board. Change-Id: Icc7078543e50bc34221127d8df055f056e249cdb diff --git a/vcl/inc/PhysicalFontFace.hxx b/vcl/inc/PhysicalFontFace.hxx index 4c3704c..bb0b900 100644 --- a/vcl/inc/PhysicalFontFace.hxx +++ b/vcl/inc/PhysicalFontFace.hxx @@ -25,9 +25,19 @@ #include "outfont.hxx" class ImplFontEntry; +struct FontMatchStatus; class FontSelectPattern; class PhysicalFontFamily; +struct FontMatchStatus +{ +public: + int mnFaceMatch; + int mnHeightMatch; + int mnWidthMatch; + const OUString* mpTargetStyleName; +}; + // - PhysicalFontFace - // TODO: no more direct access to members @@ -68,11 +78,7 @@ public: bool IsScalable() const { return (mnHeight == 0); } bool CheckMagic( int n ) const { return (n == mnMagic); } - bool IsBetterMatch( const FontSelectPattern& rFSD, - const OUString* pTargetStyleName, - int nStatusFaceMatch=0, - int nStatusHeightMatch=0, - int nStatusWidthMatch=0 ) const; + bool IsBetterMatch( const FontSelectPattern&, FontMatchStatus& ) const; sal_Int32 CompareWithSize( const PhysicalFontFace& ) const; sal_Int32 CompareIgnoreSize( const PhysicalFontFace& ) const; virtual ~PhysicalFontFace() {} diff --git a/vcl/source/font/PhysicalFontFace.cxx b/vcl/source/font/PhysicalFontFace.cxx index 5383e36..c7c7ee2 100644 --- a/vcl/source/font/PhysicalFontFace.cxx +++ b/vcl/source/font/PhysicalFontFace.cxx @@ -84,11 +84,7 @@ sal_Int32 PhysicalFontFace::CompareWithSize( const PhysicalFontFace& rOther ) co return 0; } -bool PhysicalFontFace::IsBetterMatch( const FontSelectPattern& rFSD, - const OUString* pTargetStyleName, - int nStatusFaceMatch, - int nStatusHeightMatch, - int nStatusWidthMatch ) const +bool PhysicalFontFace::IsBetterMatch( const FontSelectPattern& rFSD, FontMatchStatus& rStatus ) const { int nMatch = 0; @@ -96,8 +92,8 @@ bool PhysicalFontFace::IsBetterMatch( const FontSelectPattern& rFSD, if( rFontName.equalsIgnoreAsciiCase( GetFamilyName() ) ) nMatch += 240000; - if( pTargetStyleName - && GetStyleName().equalsIgnoreAsciiCase( *pTargetStyleName ) ) + if( rStatus.mpTargetStyleName + && GetStyleName().equalsIgnoreAsciiCase( *rStatus.mpTargetStyleName ) ) nMatch += 120000; if( (rFSD.GetPitch() != PITCH_DONTKNOW) && (rFSD.GetPitch() == GetPitch()) ) @@ -202,31 +198,31 @@ bool PhysicalFontFace::IsBetterMatch( const FontSelectPattern& rFSD, } } - if( nStatusFaceMatch > nMatch ) + if( rStatus.mnFaceMatch > nMatch ) return false; - else if( nStatusFaceMatch < nMatch ) + else if( rStatus.mnFaceMatch < nMatch ) { - nStatusFaceMatch = nMatch; - nStatusHeightMatch = nHeightMatch; - nStatusWidthMatch = nWidthMatch; + rStatus.mnFaceMatch = nMatch; + rStatus.mnHeightMatch = nHeightMatch; + rStatus.mnWidthMatch = nWidthMatch; return true; } // when two fonts are still competing prefer the // one with the best matching height - if( nStatusHeightMatch > nHeightMatch ) + if( rStatus.mnHeightMatch > nHeightMatch ) return false; - else if( nStatusHeightMatch < nHeightMatch ) + else if( rStatus.mnHeightMatch < nHeightMatch ) { - nStatusHeightMatch = nHeightMatch; - nStatusWidthMatch = nWidthMatch; + rStatus.mnHeightMatch = nHeightMatch; + rStatus.mnWidthMatch = nWidthMatch; return true; } - if( nStatusWidthMatch > nWidthMatch ) + if( rStatus.mnWidthMatch > nWidthMatch ) return false; - nStatusWidthMatch = nWidthMatch; + rStatus.mnWidthMatch = nWidthMatch; return true; } diff --git a/vcl/source/font/PhysicalFontFamily.cxx b/vcl/source/font/PhysicalFontFamily.cxx index cc01487..8cc691b 100644 --- a/vcl/source/font/PhysicalFontFamily.cxx +++ b/vcl/source/font/PhysicalFontFamily.cxx @@ -229,10 +229,11 @@ PhysicalFontFace* PhysicalFontFamily::FindBestFontFace( const FontSelectPattern& // TODO: linear search improve! PhysicalFontFace* pBestFontFace = maFontFaces[0]; + FontMatchStatus aFontMatchStatus = {0,0,0, pTargetStyleName}; for( std::vector< PhysicalFontFace* >::const_iterator it=maFontFaces.begin(); it != maFontFaces.end(); ++it ) { PhysicalFontFace* pFoundFontFace = *it; - if( pFoundFontFace->IsBetterMatch( rFSD, pTargetStyleName ) ) + if( pFoundFontFace->IsBetterMatch( rFSD, aFontMatchStatus ) ) pBestFontFace = pFoundFontFace; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits