Как получить доступ к функциям OpenType для данного шрифта в Directwrite?

Я строю текстовый редактор, и я использую 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

ОБНОВИТЬ:

Я пробовал следующий код с 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 ++.

-1

Решение

После глубокого поиска в документации Microsoft по DirectWirte мне удалось найти предполагаемый интерфейс для этого с помощью TextAnalyzer2.

Обратите внимание, что DirectWrite добавляет новые функции и элементы для каждого нового TextAnalyzer. Это началось с TextAnalyzer, сопровождаемого TextAnalyzer1 и TextAnalyzer2. Вы найдете ту же эволюцию в других интерфейсах DirectWrite.

Итак, вот оно: IDWriteTextAnalyzer2 :: GetTypographicFeatures

Используйте интерфейс IDWriteTextAnalyzer2 — можно найти Вот. С использованием GetTypographicFeatures что «Возвращает полный список возможностей OpenType, доступных для скрипта или шрифта».

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]