Я пытаюсь нарисовать текущий выбранный системный шрифт, используя 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, довольно длинный, и я не уверен, что это вызывает проблему.. Я думаю, что это больше связано со стилем... но если нужно, я опубликую ссылку на этот источник позже .
Может ли кто-нибудь помочь сделать мои шрифты менее жирными?