我試圖在Carbon應用程序中使用ATSU api繪製當前選定的系統字體。字體比其他所有原生應用都要大膽。以下是我在談論的一個截圖例子:碳/可可字體看起來不一樣
http://memecode.com/images/blog/carbon-fonts.png
最上面一行是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;
}
}
}
其中,「臉()」返回包含字體名稱的C字符串「的pointsize()」返回包含點大小我的整想等等等等,我retreiving這個值與此代碼:
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;
}
,並返回有效的臉孔/的pointsize信息,而實際上字體看起來正確的除了它看起來比其他應用更大膽。它看起來可能不是很大的差別,但是當你的整個應用程序充滿文本時,它會變得很明顯。而我的旗艦產品是一個電子郵件客戶端...因此很多文字。
創建佈局並最終調用ATSUDrawText的圖形代碼很長,我不確定它是否會導致問題..我認爲它的風格更相關...但如果需要,我會發布鏈接到後來的來源。
誰能幫助讓我的字體看起來越來越大膽?
但我傳遞假作爲kATSUQDBoldfaceTag標籤值。 碳棄用?那好吧......但我沒有時間現在重寫我的應用程序。 – fret 2009-06-19 09:56:01