Я создаю текстовый редактор и использую DirectWrite
, я хочу дать пользователю возможность включить OpenType features
для выделенного текста, но не каждый шрифт обладает всеми функциями, а многие шрифты вообще не имеют. У меня вопрос: как узнать, какие функции OpenType доступны в данном шрифте с использованием DirectWrite?
Я пробовал следующий код, но 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
UPDATE:
Я пробовал следующий код с 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();
}
Я пишу приложение на C # с использованием SharpDX, однако могу понять ответы / примеры, представленные на C ++.