3

我正在使用 Skia 在 BlackBerry 10 平台上绘制文本。我无法将 Condensed 或 Light 样式应用于字体。

在 Skia 中,它只有kNormalkBoldkItalickBoldItalic样式的枚举类型。

这些风格效果很好

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 字体的CondensedLight样式。

我尝试了所有这些组合,它导致了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);
     }
}

关于如何使用字体的CondensedLight样式有什么想法吗?谢谢

备注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
4

0 回答 0