Kaydet (Commit) b890a0ed authored tarafından Chris Sherlock's avatar Chris Sherlock

Revert "vcl: Get rid of FontMatchStatus structure"

This reverts commit 60676b3b.

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
üst 3ac975dd
......@@ -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() {}
......
......@@ -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;
}
......
......@@ -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;
}
......
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