Глифы и Глиф запуска
Глифы и глифы доступны на самом низком уровне функциональных возможностей API DirectWrite, уровень отрисовки глифов.
Глифы
Глиф — это физическое представление символа в заданном шрифте. Символы могут иметь много глифов, причем каждый шрифт в системе потенциально определяет другой глиф для этого символа.
Два или более глифов также можно объединить в один глиф, этот процесс называется глифом композиции. Это также можно сделать в противоположном направлении, один глиф разбивается на несколько глифов, известных как декомпозиция глифа.
Альтернативные глифы
Шрифты могут предоставлять альтернативные глифы для символов, например стилистические альтернативные глифы для шрифта Pericles OpenType, как показано на следующем снимке экрана. Символы "A", "E" и "O" отображаются с помощью стилистических альтернативных глифов.
Еще одним примером альтернативных глифов являются глифы с косой чертой. На следующем снимке экрана показаны стандартные глифы и глифы косой черты для шрифта Pescadero.
Swashes и другие типографические функции, включая более сложные альтернативные глифы, доступны через OpenType. Функции типографических функций OpenType можно применять к текстовому диапазону с помощью IDWriteTextLayout::SetTypography и передачи константы перечисления DWRITE_FONT_FEATURE_TAG, связанной с требуемой функцией.
Запуски глифа
Выполнение глифа представляет собой непрерывный набор глифов, которые имеют одинаковый размер шрифта и размер, а также тот же эффект рисования клиента, если таковой имеется. Подчеркивание и зачеркнутые не являются частью глифа, выполняемого для диапазона текста, к который они применяются, и рисуются позже. Встроенные объекты, такие как изображения, также рисуются отдельно, так как они не являются частью шрифта.
Интерфейс IDWriteFontFace
DirectWrite использует ту же систему для классификации шрифтов, что и Windows Presentation Foundation (WPF), поэтому для каждого семейства шрифтов может быть несколько физических шрифтов. Лицо шрифта, например интерфейс IDWriteFontFace в DirectWrite, представляет физический шрифт с определенным весом, косой и растянутой. Он содержит тип лица шрифта, соответствующие ссылки на файлы, данные идентификации лиц и различные данные шрифта, такие как метрики, имена и контуры глифов.
IDWriteFontFace можно создать непосредственно из имени шрифта или получить из коллекции шрифтов.
Метрики Глифа
Отдельные глифы имеют метрики, связанные с ними. Метрики для всех глифов в глифе можно получить с помощью метода IDWriteFontFace::GetDesignGlyphMetrics. Это возвращает DWRITE_GLYPH_METRICS структуру, которая имеет расширенную ширину, левую и правую сторону, верхнюю и нижнюю сторону, высоту и источник вертикального базового плана.
На следующей схеме показаны различные метрики двух разных символов глифа.
Рисование глифа запуска
При реализации пользовательского отрисовщика текста отрисовка глифов обрабатывается методом IDWriteTextRenderer::D rawGlyphRun, метод обратного вызова, который реализуется как часть класса, производного от IDWriteTextRenderer. Структура DWRITE_GLYPH_RUN, передаваемая в DrawGlyphRun, содержит объект IDWriteFontFace с именем fontFace, представляющий лицо шрифта для всего выполнения глифа.
Объект IDWriteFontFace также предоставляет метод GetGlyphRunOutline, который вычисляет контуры глифа с помощью указанного обратного вызова приемника геометрии, например ID2D1SimplifiedGeometrySink при отрисовке с помощью Direct2D.
Дополнительные сведения см. в разделе Реализации пользовательского средства отрисовки текста разделе.