| 1 | #import <Cocoa/Cocoa.h> |
|---|
| 2 | #include <stdio.h> |
|---|
| 3 | |
|---|
| 4 | int main(int argc, char** argv) { |
|---|
| 5 | if (argc != 3) { |
|---|
| 6 | printf("Syntax error. %s fontname size\n", argv[0]); |
|---|
| 7 | return 1; |
|---|
| 8 | } |
|---|
| 9 | const char* font_name = argv[1]; |
|---|
| 10 | int size = atoi(argv[2]); |
|---|
| 11 | |
|---|
| 12 | CFStringRef cfstr = CFStringCreateWithCString (NULL, font_name, kCFStringEncodingUTF8); |
|---|
| 13 | ATSFontRef ats_font = ATSFontFindFromPostScriptName(cfstr, kATSOptionFlagsDefault); |
|---|
| 14 | CFRelease(cfstr); |
|---|
| 15 | if (ats_font == kATSFontRefUnspecified) { |
|---|
| 16 | printf("Undefined font %s\n", font_name); |
|---|
| 17 | return 1; |
|---|
| 18 | } |
|---|
| 19 | |
|---|
| 20 | ATSFontMetrics ats_metrics; |
|---|
| 21 | ATSFontGetHorizontalMetrics(ats_font, kATSOptionFlagsDefault, &ats_metrics); |
|---|
| 22 | |
|---|
| 23 | CGFontRef cg_font = CGFontCreateWithPlatformFont (&ats_font); |
|---|
| 24 | CTFontRef ct_font = CTFontCreateWithGraphicsFont(cg_font, size, NULL, NULL); |
|---|
| 25 | double ats_ascent = ats_metrics.ascent * size; |
|---|
| 26 | double ct_ascent = CTFontGetAscent(ct_font); |
|---|
| 27 | double ats_descent = ats_metrics.descent * size; |
|---|
| 28 | double ct_descent = -CTFontGetDescent(ct_font); |
|---|
| 29 | double ats_underline_pos = ats_metrics.underlinePosition * size; |
|---|
| 30 | double ct_underline_pos = CTFontGetUnderlinePosition(ct_font); |
|---|
| 31 | double ats_underline_thickness = ats_metrics.underlineThickness * size; |
|---|
| 32 | double ct_underline_thickness = CTFontGetUnderlineThickness(ct_font); |
|---|
| 33 | |
|---|
| 34 | printf("size = %i, ats_ascent = %f, ct_ascent = %f, ats_descent = %f, ct_descent = %f\n", size, ats_ascent, ct_ascent, ats_descent, ct_descent); |
|---|
| 35 | printf("ats_underline_pos = %f, ct_underline_pos = %f, ats_underline_thickness = %f, ct_underline_thickness = %f\n", ats_underline_pos, ct_underline_pos, ats_underline_thickness, ct_underline_thickness); |
|---|
| 36 | |
|---|
| 37 | return 0; |
|---|
| 38 | } |
|---|