summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorChris Sherlock <chris.sherlock79@gmail.com>2016-01-01 22:38:29 +1100
committerChris Sherlock <chris.sherlock79@gmail.com>2016-01-02 02:04:16 +1100
commitb890a0ed02968589029fedf1854be83f1ffe8600 (patch)
tree69dc9ff9e3435a9c4b9356b217b977cc59189503 /vcl
parent3ac975dded6df870969f68ec00e8f3097c5146bf (diff)
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
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/PhysicalFontFace.hxx16
-rw-r--r--vcl/source/font/PhysicalFontFace.cxx32
-rw-r--r--vcl/source/font/PhysicalFontFamily.cxx3
3 files changed, 27 insertions, 24 deletions
diff --git a/vcl/inc/PhysicalFontFace.hxx b/vcl/inc/PhysicalFontFace.hxx
index 4c3704cf55db..bb0b9002d36b 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 5383e36f4024..c7c7ee283ab4 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 cc014871cf11..8cc691bb9b36 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;
}