Поделиться через


Глифы и глифы

Глифы и глифы выполняются на самом низком уровне функциональных возможностей API DirectWrite, уровня отрисовки глифов.

Глифы

Глиф — это физическое представление символа в заданном шрифте. У символов может быть много глифов, при этом каждый шрифт в системе потенциально определяет другой глиф для этого символа.

Два или более глифов также могут быть объединены в один глиф, этот процесс называется композицией глифов. Это также можно сделать в противоположном направлении, один глиф разбивается на несколько глифов, известных как декомпозиция глифа.

Альтернативные глифы

Шрифты могут предоставлять альтернативные глифы для символов, например стилистические альтернативные глифы для шрифта Pericles OpenType, как показано на следующем снимке экрана. Символы A, E и O отображаются с помощью стилистических альтернативных глифов.

screen shot of

Еще одним примером альтернативных глифов являются глифы с косой чертой. На следующем снимке экрана показаны стандартные глифы и глифы косой черты для шрифта Pescadero.

screen shot of the letters

Swashes и другие типографические функции, включая более сложные альтернативные глифы, доступны через OpenType. Функции типографии OpenType можно применять к текстовому диапазону с помощью idWriteTextLayout::SetTypography и передачи константы перечисления DWRITE_FONT_FEATURE_TAG, связанной с нужной функцией.

Запуски Глифа

Запуск глифа представляет собой непрерывный набор глифов, которые имеют одинаковый размер и лицо шрифта, а также один и тот же эффект рисования клиента, если таковой имеется. Подчеркивание и зачеркиние не являются частью выполнения глифа для диапазона текста, к который они применяются, и рисуются позже. Встроенные объекты, такие как изображения, также рисуются отдельно, так как они не являются частью шрифта.

Интерфейс IDWriteFontFace

DirectWrite использует ту же систему для классификации шрифтов, что и Windows Pesentation Foundation (WPF), поэтому для каждого семейства шрифтов может быть несколько физических шрифтов. Лицо шрифта, например интерфейс IDWriteFontFace в DirectWrite, представляет физический шрифт с определенным весом, наклоном и растяжением. Он содержит тип лица шрифта, соответствующие ссылки на файлы, данные идентификации лиц и различные данные шрифта, такие как метрики, имена и контуры глифов.

IDWriteFontFace можно создать непосредственно из имени шрифта или получить из коллекции шрифтов.

Метрики глифа

С отдельными глифами связаны метрики. Метрики для всех глифов в глифе можно получить с помощью метода IDWriteFontFace::GetDesignGlyphMetrics . При этом возвращается DWRITE_GLYPH_METRICS структура с заранеей шириной, левой и правой стороны, верхней и нижней стороной, высотой и вертикальным источником базовых показателей.

На следующей схеме показаны различные метрики двух разных символов глифа.

diagram of the metrics of two different glyphs

Рисование глифа

При реализации пользовательского отрисовщика текста отрисовка глифов обрабатывается idWriteTextRenderer::D rawGlyphRun, метод обратного вызова, который реализуется как часть класса, производного от IDWriteTextRenderer. Структура DWRITE_GLYPH_RUN , передаваемая в DrawGlyphRun , содержит объект IDWriteFontFace с именем fontFace, представляющий лицо шрифта для всего выполнения глифа.

Объект IDWriteFontFace также предоставляет метод GetGlyphRunOutline , который вычисляет контуры глифа с помощью указанного обратного вызова приемника геометрии, например ID2D1SimplifiedGeometrySink при отрисовке с помощью Direct2D.

Дополнительные сведения см. в разделе " Реализация пользовательского отрисовщика текста ".