Я строю текстовый редактор, и я использую 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 ++.
После глубокого поиска в документации Microsoft по DirectWirte мне удалось найти предполагаемый интерфейс для этого с помощью TextAnalyzer2.
Обратите внимание, что DirectWrite добавляет новые функции и элементы для каждого нового TextAnalyzer. Это началось с TextAnalyzer, сопровождаемого TextAnalyzer1 и TextAnalyzer2. Вы найдете ту же эволюцию в других интерфейсах DirectWrite.
Итак, вот оно: IDWriteTextAnalyzer2 :: GetTypographicFeatures
Используйте интерфейс IDWriteTextAnalyzer2 — можно найти Вот. С использованием GetTypographicFeatures что «Возвращает полный список возможностей OpenType, доступных для скрипта или шрифта».
Других решений пока нет …