summaryrefslogtreecommitdiff
path: root/vcl/source/gdi/outdev3.cxx
diff options
context:
space:
mode:
authorNorbert Thiebaud <nthiebaud@gmail.com>2014-03-20 00:21:17 -0500
committerNorbert Thiebaud <nthiebaud@gmail.com>2014-03-20 16:11:57 -0500
commit7154b092a716d4d0041a8a563294511ec9e5dbc6 (patch)
tree2e2cbbd319a3ee008b536f584bf7a160f0f8ee01 /vcl/source/gdi/outdev3.cxx
parent5971a040f974dcdd0b0d8491d720fa7ad74439b4 (diff)
cosmetic: split PhysicalFontFace class it its own source/header
oudev,2,3,4,5,6 are a dumping ground for a lot of things chipping at it one class at the time... organize the #include of the impacted source while at it. Change-Id: I57bbb1f9e3c6b2ac6b3ca127e5976bf16f3e3cf8
Diffstat (limited to 'vcl/source/gdi/outdev3.cxx')
-rw-r--r--vcl/source/gdi/outdev3.cxx211
1 files changed, 0 insertions, 211 deletions
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx
index e624d0bf1e1c..8dd4b9206302 100644
--- a/vcl/source/gdi/outdev3.cxx
+++ b/vcl/source/gdi/outdev3.cxx
@@ -699,217 +699,6 @@ static void ImplCalcType( sal_uLong& rType, FontWeight& rWeight, FontWidth& rWid
}
}
-PhysicalFontFace::PhysicalFontFace( const ImplDevFontAttributes& rDFA, int nMagic )
-: ImplDevFontAttributes( rDFA ),
- mnWidth(0),
- mnHeight(0),
- mnMagic( nMagic ),
- mpNext( NULL )
-{
- // StarSymbol is a unicode font, but it still deserves the symbol flag
- if( !IsSymbolFont() )
- if ( IsStarSymbol( GetFamilyName() ) )
- SetSymbolFlag( true );
-}
-
-sal_Int32 PhysicalFontFace::CompareIgnoreSize( const PhysicalFontFace& rOther ) const
-{
- // compare their width, weight, italic, style name and family name
- if( GetWidthType() < rOther.GetWidthType() )
- return -1;
- else if( GetWidthType() > rOther.GetWidthType() )
- return 1;
-
- if( GetWeight() < rOther.GetWeight() )
- return -1;
- else if( GetWeight() > rOther.GetWeight() )
- return 1;
-
- if( GetSlant() < rOther.GetSlant() )
- return -1;
- else if( GetSlant() > rOther.GetSlant() )
- return 1;
-
- sal_Int32 nRet = GetFamilyName().compareTo( rOther.GetFamilyName() );
-
- if (nRet == 0)
- {
- nRet = GetStyleName().compareTo( rOther.GetStyleName() );
- }
-
- return nRet;
-}
-
-sal_Int32 PhysicalFontFace::CompareWithSize( const PhysicalFontFace& rOther ) const
-{
- sal_Int32 nCompare = CompareIgnoreSize( rOther );
- if (nCompare != 0)
- return nCompare;
-
- if( mnHeight < rOther.mnHeight )
- return -1;
- else if( mnHeight > rOther.mnHeight )
- return 1;
-
- if( mnWidth < rOther.mnWidth )
- return -1;
- else if( mnWidth > rOther.mnWidth )
- return 1;
-
- return 0;
-}
-
-struct FontMatchStatus
-{
-public:
- int mnFaceMatch;
- int mnHeightMatch;
- int mnWidthMatch;
- const OUString* mpTargetStyleName;
-};
-
-bool PhysicalFontFace::IsBetterMatch( const FontSelectPattern& rFSD, FontMatchStatus& rStatus ) const
-{
- int nMatch = 0;
-
- const OUString& rFontName = rFSD.maTargetName;
- if( rFontName.equalsIgnoreAsciiCase( GetFamilyName() ) )
- nMatch += 240000;
-
- if( rStatus.mpTargetStyleName
- && GetStyleName().equalsIgnoreAsciiCase( *rStatus.mpTargetStyleName ) )
- nMatch += 120000;
-
- if( (rFSD.GetPitch() != PITCH_DONTKNOW) && (rFSD.GetPitch() == GetPitch()) )
- nMatch += 20000;
-
- // prefer NORMAL font width
- // TODO: change when the upper layers can tell their width preference
- if( GetWidthType() == WIDTH_NORMAL )
- nMatch += 400;
- else if( (GetWidthType() == WIDTH_SEMI_EXPANDED) || (GetWidthType() == WIDTH_SEMI_CONDENSED) )
- nMatch += 300;
-
- if( rFSD.GetWeight() != WEIGHT_DONTKNOW )
- {
- // if not bold or requiring emboldening prefer light fonts to bold fonts
- FontWeight ePatternWeight = rFSD.mbEmbolden ? WEIGHT_NORMAL : rFSD.GetWeight();
-
- int nReqWeight = (int)ePatternWeight;
- if ( ePatternWeight > WEIGHT_MEDIUM )
- nReqWeight += 100;
-
- int nGivenWeight = (int)GetWeight();
- if( GetWeight() > WEIGHT_MEDIUM )
- nGivenWeight += 100;
-
- int nWeightDiff = nReqWeight - nGivenWeight;
-
- if ( nWeightDiff == 0 )
- nMatch += 1000;
- else if ( nWeightDiff == +1 || nWeightDiff == -1 )
- nMatch += 700;
- else if ( nWeightDiff < +50 && nWeightDiff > -50)
- nMatch += 200;
- }
- else // requested weight == WEIGHT_DONTKNOW
- {
- // prefer NORMAL font weight
- // TODO: change when the upper layers can tell their weight preference
- if( GetWeight() == WEIGHT_NORMAL )
- nMatch += 450;
- else if( GetWeight() == WEIGHT_MEDIUM )
- nMatch += 350;
- else if( (GetWeight() == WEIGHT_SEMILIGHT) || (GetWeight() == WEIGHT_SEMIBOLD) )
- nMatch += 200;
- else if( GetWeight() == WEIGHT_LIGHT )
- nMatch += 150;
- }
-
- // if requiring custom matrix to fake italic, prefer upright font
- FontItalic ePatternItalic = rFSD.maItalicMatrix != ItalicMatrix() ? ITALIC_NONE : rFSD.GetSlant();
-
- if ( ePatternItalic == ITALIC_NONE )
- {
- if( GetSlant() == ITALIC_NONE )
- nMatch += 900;
- }
- else
- {
- if( ePatternItalic == GetSlant() )
- nMatch += 900;
- else if( GetSlant() != ITALIC_NONE )
- nMatch += 600;
- }
-
- if( mbDevice )
- nMatch += 1;
-
- int nHeightMatch = 0;
- int nWidthMatch = 0;
-
- if( IsScalable() )
- {
- if( rFSD.mnOrientation != 0 )
- nMatch += 80;
- else if( rFSD.mnWidth != 0 )
- nMatch += 25;
- else
- nMatch += 5;
- }
- else
- {
- if( rFSD.mnHeight == mnHeight )
- {
- nMatch += 20;
- if( rFSD.mnWidth == mnWidth )
- nMatch += 10;
- }
- else
- {
- // for non-scalable fonts the size difference is very important
- // prefer the smaller font face because of clipping/overlapping issues
- int nHeightDiff = (rFSD.mnHeight - mnHeight) * 1000;
- nHeightMatch = (nHeightDiff >= 0) ? -nHeightDiff : 100+nHeightDiff;
- if( rFSD.mnHeight )
- nHeightMatch /= rFSD.mnHeight;
-
- if( (rFSD.mnWidth != 0) && (mnWidth != 0) && (rFSD.mnWidth != mnWidth) )
- {
- int nWidthDiff = (rFSD.mnWidth - mnWidth) * 100;
- nWidthMatch = (nWidthDiff >= 0) ? -nWidthDiff : +nWidthDiff;
- }
- }
- }
-
- if( rStatus.mnFaceMatch > nMatch )
- return false;
- else if( rStatus.mnFaceMatch < nMatch )
- {
- 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( rStatus.mnHeightMatch > nHeightMatch )
- return false;
- else if( rStatus.mnHeightMatch < nHeightMatch )
- {
- rStatus.mnHeightMatch = nHeightMatch;
- rStatus.mnWidthMatch = nWidthMatch;
- return true;
- }
-
- if( rStatus.mnWidthMatch > nWidthMatch )
- return false;
-
- rStatus.mnWidthMatch = nWidthMatch;
- return true;
-}
-
ImplFontEntry::ImplFontEntry( const FontSelectPattern& rFontSelData )
: maFontSelData( rFontSelData )
, maMetric( rFontSelData )