我正在使用 Skia 在 BlackBerry 10 平台上绘制文本。我无法将 Condensed 或 Light 样式应用于字体。
在 Skia 中,它只有kNormal、kBold、kItalic和kBoldItalic样式的枚举类型。
这些风格效果很好
skTypeface = SkTypeface::CreateFromName("Slate Pro", SkTypeface::kNormal);
skTypeface = SkTypeface::CreateFromName("Slate Pro", SkTypeface::kBold);
skTypeface = SkTypeface::CreateFromName("Slate Pro", SkTypeface::kItalic);
skTypeface = SkTypeface::CreateFromName("Slate Pro", SkTypeface::kBoldItalic);
但我需要使用同样内置在 BB10 设备中的 Slate Pro 字体的Condensed或Light样式。
我尝试了所有这些组合,它导致了SIGSEGV。
skTypeface = SkTypeface::CreateFromName("SlateProLight", SkTypeface::kNormal);
skTypeface = SkTypeface::CreateFromName("Slate Pro-Light", SkTypeface::kNormal);
skTypeface = SkTypeface::CreateFromName("Slate Pro - Light", SkTypeface::kNormal);
skTypeface = SkTypeface::CreateFromName("SlatePro Light", SkTypeface::kNormal);
skTypeface = SkTypeface::CreateFromName("Slate Pro Condensed", SkTypeface::kNormal);
太好了,我尝试了另一种方法,尝试直接加载系统字体。但是,即使 Font 文件存在,loadedTypeface 始终为 NULL,不知道为什么。
QString loadedFont="/usr/fonts/font_repository/monotype/SlatePro-Light.ttf";
SkTypeface *loadedTypeface = SkTypeface::CreateFromFile(loadedFont.toUtf8().constData());
QFile targetFile(loadedFont);
if(targetFile.exists())
{
if(loadedTypeface!=NULL)
{
skTypeface = SkTypeface::CreateFromTypeface(loadedTypeface , SkTypeface::kNormal);
}
else //Fallback to Arial
{
skTypeface = SkTypeface::CreateFromName("Arial",SkTypeface::kNormal);
}
}
关于如何使用字体的Condensed或Light样式有什么想法吗?谢谢
备注BB10文件系统内嵌 的 Slate Pro ttf 文件列表
位于 /usr/fonts/font_repository/monotype/
SlatePro.ttf
SlatePro-MediumItalic.ttf
SlatePro-MediumCondensed.ttf
SlatePro-Medium.ttf
SlatePro-LightItalic.ttf
SlatePro-Light.ttf
SlatePro-Italic.ttf
SlatePro-Condensed.ttf
SlatePro-BoldItalic.ttf
SlatePro-BoldCondensed.ttf
SlatePro-Bold.ttf