Я пытаюсь нарисовать текущий выбранный системный шрифт, используя API-интерфейс ATSU в приложении Carbon. И шрифты выходят смелее, чем все другие нативные приложения. Вот скриншот того, о чем я говорю:
(источник: memecode.com )
Верхняя строка - это XCode, а средняя - это мое приложение, использующее не жирный шрифт, а нижняя - мое приложение, использующее жирный шрифт. Я использовал один и тот же текст, чтобы было легче увидеть разницу в весе между ними. Код, который я использую для создания стилей, которые я рисую:
if (Face() AND !(e = ATSUCreateStyle(&d->hFont)))
{
// Lookup ID
ATSUFontID atsuFont = 0;
e = ATSUFindFontFromName(Face(),
strlen(Face()),
kFontFamilyName,
(FontPlatformCode)kFontNoPlatform,
(FontScriptCode)kFontNoScript,
(FontLanguageCode)kFontNoLanguage,
&atsuFont);
if (!e)
{
Fixed Size;
Size = PointSize() << 16;
Boolean IsBold = Bold();
Boolean IsItalic = Italic();
Boolean IsUnder = Underline();
// Set style attr
ATSUAttributeTag Tags[] = {kATSUFontTag, kATSUSizeTag, kATSUQDItalicTag, kATSUQDUnderlineTag, kATSUQDBoldfaceTag};
ATSUAttributeValuePtr Values[] = {&atsuFont, &Size, &IsItalic, &IsUnder, &IsBold};
ByteCount Lengths[] = {sizeof(atsuFont), sizeof(Size), sizeof(IsItalic), sizeof(IsUnder), sizeof(IsBold)};
if (!(e = ATSUSetAttributes(d->hFont,
CountOf(Tags),
Tags,
Lengths,
Values)))
{
GDisplayString ds(this, "A");
d->Height = ds.Y();
return true;
}
}
}
Где «Face ()» возвращает строку C, содержащую имя шрифта, «PointSize ()» возвращает целое число, содержащее желаемый размер точки и т. Д., И т. Д. Я получаю эти значения с помощью этого кода:
Str255 Name;
SInt16 Size;
Style St;
OSStatus e = GetThemeFont( kThemeSmallSystemFont,
smSystemScript,
Name,
&Size,
&St);
if (e) printf("%s:%i - GetThemeFont failed with %i\n", __FILE__, __LINE__, e);
else
{
Info.Face(p2c(Name));
Info.PointSize(Size);
Status = true;
}
И он возвращает корректно выглядящую информацию о лице / размере, и на самом деле шрифт выглядит правильно, если не считать его более смелым, чем другие приложения. Это может не выглядеть большой разницей, но когда все ваше приложение заполнено текстом, это становится очевидным. А мой флагманский продукт - это почтовый клиент ... отсюда много текста.
Код рисования, который создает макеты и в конечном итоге вызывает ATSUDrawText, довольно длинный, и я не уверен, что это вызывает проблему .. Я думаю, что это больше связано со стилем ... но если потребуется, я опубликую ссылку на этот источник позже.
Может ли кто-нибудь помочь сделать мои шрифты менее смелыми?