Re: Font scaling and string size problem?!?
Re: Font scaling and string size problem?!?
- Subject: Re: Font scaling and string size problem?!?
- From: "Gerriet M. Denkmann" <email@hidden>
- Date: Sat, 17 Sep 2005 22:37:56 +0200
On 17.09.2005, at 19:49, glenn andreas wrote:
On Sep 17, 2005, at 1:53 AM, Gerriet M. Denkmann wrote:
On 17.09.2005, at 07:15, glenn andreas <email@hidden> wrote:
So as a result, the metrics of a font changes with the size in a non-
linear form for both practical and aesthetic reasons, so it would be
extremely rare if a string in 60pt text were exactly 6 times wider
than 10pt text (sometimes you're lucky if it is 6 time taller).
Well I have been lucky to find 3 of these rare fonts where "a string
in 60pt text is exactly 6 times wider than 10pt text",
I found that:
[[NSFont userFontOfSize: fsize ] advancementForGlyph: [ffs
glyphWithName: @"m" ]].width == 0.833008 * fsize
regardless for fsize. Tested for fsize = 3 ... 60pt in steps of 3 on
Panther.
Same for systemFontOfSize: CGS LucidaGrande with a constant factor of
0.933594.
Same for CGS Times-Roman with a constant factor of 0.777832.
Could you tell me a font which actually has this non-linear behaviour
you were mentioning?
Pretty much all of them. You're looking at advancementForGlyph, which
isn't the same as the width of a string (since advancementForGlyph is
"the nominal spacing"
Given this code, which measures the width of both 10 and 60 point
versions of the same string
NSEnumerator *allFontsEnum =[[[NSFontManager sharedFontManager]
availableFonts] objectEnumerator];
NSString *fontName;
NSString *testMessage = @"Hello World!";
while ((fontName = [allFontsEnum nextObject]) != NULL) {
NSFont *font10 = [NSFont fontWithName:fontName size:10.0];
NSFont *font60 = [NSFont fontWithName: fontName size:60.0];
NSSize size10 = [testMessage sizeWithAttributes:[NSDictionary
dictionaryWithObject:font10 forKey:NSFontAttributeName]];
NSSize size60 = [testMessage sizeWithAttributes:[NSDictionary
dictionaryWithObject:font60 forKey:NSFontAttributeName]];
NSLog(@"Font %@, 10 pt = %g, 60 pt = %g, ratio: %g",fontName,
size10.width, size60.width, size60.width / size10.width);
}
Here's what I see (10.4.2):
2005-09-17 12:43:10.388 TestFontWidth[1389] Font Sathu, 10 pt = 55, 60
pt = 336.64, ratio: 6.12073
2005-09-17 12:43:10.399 TestFontWidth[1389] Font CharcoalCY, 10 pt =
61, 60 pt = 367.178, ratio: 6.01931
[...]
Well, and when I run on 10.3.9 a slightly different program:
NSEnumerator *allFontsEnum =[[[NSFontManager sharedFontManager]
availableFonts] objectEnumerator];
NSString *fontName;
NSString *testMessage = @"Hello World!";
while ((fontName = [allFontsEnum nextObject]) != NULL)
{
NSFont *font10 = [NSFont fontWithName:fontName size:17.0];
NSFont *font60 = [NSFont fontWithName: fontName size:102.0];
NSSize size10 = [testMessage sizeWithAttributes:
[NSDictionary dictionaryWithObject:font10 forKey:NSFontAttributeName]];
NSSize size60 = [testMessage sizeWithAttributes:
[NSDictionary dictionaryWithObject:font60 forKey:NSFontAttributeName]];
fprintf(stderr,"ratio: %5.3f 17 pt = %6.2f, 102 pt = %6.2f, Font %s\n",
size60.width / size10.width, size10.width, size60.width,
[ fontName UTF8String ] );
}
I get:
ratio: 6.000 17 pt = 95.38, 102 pt = 572.29, Font Sathu
ratio: 6.000 17 pt = 104.03, 102 pt = 624.20, Font CharcoalCY
ratio: 6.000 17 pt = 122.42, 102 pt = 734.52, Font CourierNewPS-ItalicMT
ratio: 6.000 17 pt = 91.11, 102 pt = 546.66, Font Symbol
ratio: 6.000 17 pt = 100.47, 102 pt = 602.84, Font Futura-Medium
ratio: 6.000 17 pt = 105.88, 102 pt = 635.31, Font Charcoal
....
continues for a long time without any change in the ratio of 6.000.
My theory is that:
1. fonts should not just scale (here absolutely I agree with you)
2. fonts just scale anyway
3. fonts ≤ 16pt are replaced by screen-fonts, which, in order to have
integral width, have quite different metrics. (This is the reason why
my program compares 17pt and 102pt).
Kind regards,
Gerriet.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden