Как получить доступ к функциям OpenType для данного шрифта в Directwrite? - PullRequest
0 голосов
/ 30 октября 2018

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

1 Ответ

0 голосов
/ 13 ноября 2018

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

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

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

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

...