【发布时间】:2019-04-02 21:13:54
【问题描述】:
我构建了一个文本编辑器并使用DirectWrite,我想让用户选择在选定的文本上启用OpenType features,但并非每种字体都具有所有功能,而且许多字体根本没有。我的问题是如何知道使用 DirectWrite 的给定字体中有哪些 OpenType 功能可用?
我尝试了以下代码,但 res 始终 == S_OK 甚至字体都缺少该功能:
DWRITE_FONT_FEATURE fontFeature = { DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7, 1 };
HRESULT res = pTypography->AddFontFeature(fontFeature); // res == S_OK
res = g_pFancyTextLayout->SetTypography(pTypography, range); // res == S_OK
更新:
我用SharpDx 尝试了以下代码,但list 始终为空,即使是Gabriola 字体:
public static FontFeatureTag[] GetOpenTypeFeatures(FontFace fontFace)
{
var list = new List<FontFeatureTag>();
foreach (FontFeatureTag tag in System.Enum.GetValues(typeof(FontFeatureTag)))
{
if (fontFace.TryGetFontTable((int)tag, out DataPointer dataPointer, out IntPtr intPtr))
{
list.Add(tag);
}
}
return list.ToArray();
}
我正在使用 SharpDX 编写 C# 应用程序,但是我可以理解 C++ 中提供的答案/示例。
【问题讨论】:
标签: c# c++ directx sharpdx directwrite