Carbon アプリで ATSU API を使用して、現在選択されているシステム フォントを描画しようとしています。また、フォントは他のすべてのネイティブ アプリよりも太字になっています。これが私が話していることのスクリーンショットの例です:
(ソース: 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;
}
そして、有効な外観/ポイントサイズ情報を返します。実際、フォントは他のアプリよりも太く見えることを除けば、正しく見えます。大きな違いのようには見えないかもしれませんが、アプリ全体がテキストでいっぱいになると、それは明らかです。そして、私の主力製品はメール クライアントです。
レイアウトを作成し、最終的に ATSDrawText を呼び出す描画コードは非常に長く、それが問題の原因であるかどうかはわかりません.スタイルに関連していると思います...しかし、必要に応じて後でそのソースへのリンクを投稿します.
フォントの太さを減らすのを手伝ってくれる人はいますか?