mirror of
https://github.com/gnustep/libs-back.git
synced 2025-02-23 11:51:27 +00:00
Cairo: Reduce the hilarity of the font panel
Use many more weights and widths when generating the (still extremely stupid) synthetic PostScript font names.
This commit is contained in:
parent
390f82f064
commit
016f5eda25
5 changed files with 123 additions and 19 deletions
|
@ -63,6 +63,8 @@
|
|||
- (NSString *) familyName;
|
||||
- (void) setFamilyName: (NSString *)name;
|
||||
|
||||
- (NSString *) displayName;
|
||||
|
||||
- (void *) fontFace;
|
||||
- (FcPattern *) matchedPattern;
|
||||
|
||||
|
|
|
@ -241,6 +241,12 @@ BOOL _cairo_extents_for_NSGlyph(cairo_scaled_font_t *scaled_font, NSGlyph glyph,
|
|||
return NSZeroRect;
|
||||
}
|
||||
|
||||
- (NSString *) displayName
|
||||
{
|
||||
return [_faceInfo displayName];
|
||||
}
|
||||
|
||||
|
||||
- (CGFloat) widthOfString: (NSString *)string
|
||||
{
|
||||
cairo_text_extents_t ctext;
|
||||
|
|
|
@ -67,6 +67,17 @@
|
|||
return _familyName;
|
||||
}
|
||||
|
||||
- (NSString *) displayName
|
||||
{
|
||||
char *fcstyle;
|
||||
|
||||
if (FcPatternGetString(_pattern, FC_STYLE, 0, (FcChar8 **)&fcstyle) == FcResultMatch) {
|
||||
return [NSString stringWithFormat: @"%@ %@", _familyName,
|
||||
[NSString stringWithUTF8String: fcstyle]];
|
||||
}
|
||||
return _familyName;
|
||||
}
|
||||
|
||||
- (int) weight
|
||||
{
|
||||
return _weight;
|
||||
|
|
|
@ -78,9 +78,9 @@ NSMutableDictionary * __allFonts;
|
|||
// Make a GNUstep style font descriptor from a FcPattern
|
||||
static NSArray *faFromFc(FcPattern *pat)
|
||||
{
|
||||
int weight, slant, spacing, nsweight;
|
||||
int weight, slant, spacing, width, nsweight;
|
||||
unsigned int nstraits = 0;
|
||||
char *family;
|
||||
char *family, *fcstyle;
|
||||
NSMutableString *name, *style;
|
||||
|
||||
if (FcPatternGetInteger(pat, FC_WEIGHT, 0, &weight) != FcResultMatch
|
||||
|
@ -99,11 +99,28 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
|
||||
switch (weight)
|
||||
{
|
||||
case FC_WEIGHT_THIN:
|
||||
[style appendString: @"Thin"];
|
||||
nsweight = 1;
|
||||
break;
|
||||
case FC_WEIGHT_ULTRALIGHT:
|
||||
[style appendString: @"Ultralight"];
|
||||
nsweight = 2;
|
||||
break;
|
||||
case FC_WEIGHT_LIGHT:
|
||||
[style appendString: @"Light"];
|
||||
nsweight = 3;
|
||||
break;
|
||||
case FC_WEIGHT_BOOK:
|
||||
[style appendString: @"Book"];
|
||||
nsweight = 4;
|
||||
break;
|
||||
case FC_WEIGHT_REGULAR:
|
||||
// [style appendString: @"Regular"];
|
||||
nsweight = 5;
|
||||
break;
|
||||
case FC_WEIGHT_MEDIUM:
|
||||
[style appendString: @"Medium"];
|
||||
nsweight = 6;
|
||||
break;
|
||||
case FC_WEIGHT_DEMIBOLD:
|
||||
|
@ -115,13 +132,63 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
nsweight = 9;
|
||||
nstraits |= NSBoldFontMask;
|
||||
break;
|
||||
case FC_WEIGHT_ULTRABOLD:
|
||||
[style appendString: @"Ultrabold"];
|
||||
nsweight = 11;
|
||||
nstraits |= NSBoldFontMask;
|
||||
break;
|
||||
case FC_WEIGHT_BLACK:
|
||||
[style appendString: @"Black"];
|
||||
nsweight = 12;
|
||||
nstraits |= NSBoldFontMask;
|
||||
break;
|
||||
case FC_WEIGHT_ULTRABLACK:
|
||||
[style appendString: @"Ultrablack"];
|
||||
nsweight = 13;
|
||||
nstraits |= NSBoldFontMask;
|
||||
break;
|
||||
default:
|
||||
nsweight = 6;
|
||||
nsweight = 5;
|
||||
}
|
||||
|
||||
if (FcPatternGetInteger(pat, FC_WIDTH, 0, &width) == FcResultMatch)
|
||||
switch (width)
|
||||
{
|
||||
case FC_WIDTH_ULTRACONDENSED:
|
||||
[style appendString: @"Ultracondensed"];
|
||||
nstraits |= NSCondensedFontMask;
|
||||
break;
|
||||
case FC_WIDTH_EXTRACONDENSED:
|
||||
[style appendString: @"Extracondensed"];
|
||||
nstraits |= NSCondensedFontMask;
|
||||
break;
|
||||
case FC_WIDTH_CONDENSED:
|
||||
[style appendString: @"Condensed"];
|
||||
nstraits |= NSCondensedFontMask;
|
||||
break;
|
||||
case FC_WIDTH_SEMICONDENSED:
|
||||
[style appendString: @"Semicondensed"];
|
||||
nstraits |= NSCondensedFontMask;
|
||||
break;
|
||||
case FC_WIDTH_SEMIEXPANDED:
|
||||
[style appendString: @"Semiexpanded"];
|
||||
nstraits |= NSExpandedFontMask;
|
||||
break;
|
||||
case FC_WIDTH_EXPANDED:
|
||||
[style appendString: @"Expanded"];
|
||||
nstraits |= NSExpandedFontMask;
|
||||
break;
|
||||
case FC_WIDTH_EXTRAEXPANDED:
|
||||
[style appendString: @"Extraexpanded"];
|
||||
nstraits |= NSExpandedFontMask;
|
||||
break;
|
||||
case FC_WIDTH_ULTRAEXPANDED:
|
||||
[style appendString: @"Ultraexpanded"];
|
||||
nstraits |= NSExpandedFontMask;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (slant)
|
||||
|
@ -145,9 +212,13 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
}
|
||||
else
|
||||
{
|
||||
[style appendString: @"Roman"];
|
||||
[style setString: @"Regular"];
|
||||
}
|
||||
|
||||
if (FcPatternGetString(pat, FC_STYLE, 0, (FcChar8 **)&fcstyle) == FcResultMatch)
|
||||
style = [NSString stringWithUTF8String: fcstyle];
|
||||
|
||||
// NSLog (@"family: %@, style: %s/%@", name, fcstyle, style);
|
||||
return [NSArray arrayWithObjects: name,
|
||||
style,
|
||||
[NSNumber numberWithInt: nsweight],
|
||||
|
@ -164,7 +235,8 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
Class faceInfoClass = [[self class] faceInfoClass];
|
||||
|
||||
FcPattern *pat = FcPatternCreate();
|
||||
FcObjectSet *os = FcObjectSetBuild(FC_FAMILY, FC_SLANT, FC_WEIGHT,
|
||||
FcObjectSet *os = FcObjectSetBuild(FC_FAMILY, FC_STYLE, FC_FULLNAME,
|
||||
FC_SLANT, FC_WEIGHT, FC_WIDTH,
|
||||
FC_SPACING, NULL);
|
||||
FcFontSet *fs = FcFontList(NULL, pat, os);
|
||||
|
||||
|
@ -218,6 +290,18 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
|
||||
- (NSString *) defaultSystemFontName
|
||||
{
|
||||
if ([allFontNames containsObject: @"DejaVu Sans-Book"])
|
||||
{
|
||||
return @"DejaVu Sans-Book";
|
||||
}
|
||||
if ([allFontNames containsObject: @"DejaVu Sans"])
|
||||
{
|
||||
return @"DejaVu Sans";
|
||||
}
|
||||
if ([allFontNames containsObject: @"Bitstream Vera Sans-Roman"])
|
||||
{
|
||||
return @"Bitstream Vera Sans-Roman";
|
||||
}
|
||||
if ([allFontNames containsObject: @"Bitstream Vera Sans"])
|
||||
{
|
||||
return @"Bitstream Vera Sans";
|
||||
|
@ -226,10 +310,6 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
{
|
||||
return @"FreeSans";
|
||||
}
|
||||
if ([allFontNames containsObject: @"DejaVu Sans"])
|
||||
{
|
||||
return @"DejaVu Sans";
|
||||
}
|
||||
if ([allFontNames containsObject: @"Tahoma"])
|
||||
{
|
||||
return @"Tahoma";
|
||||
|
@ -243,6 +323,10 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
|
||||
- (NSString *) defaultBoldSystemFontName
|
||||
{
|
||||
if ([allFontNames containsObject: @"DejaVu Sans-Bold"])
|
||||
{
|
||||
return @"DejaVu Sans-Bold";
|
||||
}
|
||||
if ([allFontNames containsObject: @"Bitstream Vera Sans-Bold"])
|
||||
{
|
||||
return @"Bitstream Vera Sans-Bold";
|
||||
|
@ -251,10 +335,6 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
{
|
||||
return @"FreeSans-Bold";
|
||||
}
|
||||
if ([allFontNames containsObject: @"DejaVu Sans-Bold"])
|
||||
{
|
||||
return @"DejaVu Sans-Bold";
|
||||
}
|
||||
if ([allFontNames containsObject: @"Tahoma-Bold"])
|
||||
{
|
||||
return @"Tahoma-Bold";
|
||||
|
@ -268,6 +348,10 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
|
||||
- (NSString *) defaultFixedPitchFontName
|
||||
{
|
||||
if ([allFontNames containsObject: @"DejaVu Sans Mono"])
|
||||
{
|
||||
return @"DejaVu Sans Mono";
|
||||
}
|
||||
if ([allFontNames containsObject: @"Bitstream Vera Sans Mono"])
|
||||
{
|
||||
return @"Bitstream Vera Sans Mono";
|
||||
|
@ -276,10 +360,6 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
{
|
||||
return @"FreeMono";
|
||||
}
|
||||
if ([allFontNames containsObject: @"DejaVu Sans Mono"])
|
||||
{
|
||||
return @"DejaVu Sans Mono";
|
||||
}
|
||||
if ([allFontNames containsObject: @"Courier New"])
|
||||
{
|
||||
return @"Courier New";
|
||||
|
|
|
@ -149,6 +149,11 @@
|
|||
return NSZeroRect;
|
||||
}
|
||||
|
||||
- (NSString *) displayName
|
||||
{
|
||||
return [_faceInfo displayName];
|
||||
}
|
||||
|
||||
- (CGFloat) widthOfString: (NSString *)string
|
||||
{
|
||||
[self subclassResponsibility: _cmd];
|
||||
|
|
Loading…
Reference in a new issue