Знакомство с объектом GlyphRun и элементом Glyphs

В этом разделе описывается объект GlyphRun и элемент Glyphs.

Общие сведения о GlyphRun

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

  1. Отображение на экране документов фиксированного формата.

  2. Сценарии печати.

    • XAML как язык принтера.

    • Средство записи XPS-документов (Майкрософт).

    • Предыдущие драйверы принтера, вывод из приложений Win32 в фиксированный формат.

    • Формат очереди печати.

  3. Представление документов фиксированного формата, включая клиенты предыдущих версий Windows и другие вычислительные устройства.

Примечание.

Glyphs и GlyphRun предназначены для использования в сценариях представления и печати документов в фиксированном формате. WPF предоставляет несколько элементов для общих сценариев макета и пользовательского интерфейса, таких как Label и TextBlock. Дополнительные сведения о сценариях макета и пользовательского интерфейса см. в разделе " Типография" в WPF.

Объект GlyphRun

Объект GlyphRun представляет из себя последовательность глифов из одного начертания одного шрифта с одним размером и с одним стилем отрисовки.

Объект GlyphRun включает в себя такие сведения о шрифтах, как свойства Indices глифов и отдельные позиции глифов. Он также включает исходные кодовые точки Unicode, на основании которых был создан конкретный вариант, сведения о сопоставлении смещения буфера "символ — глиф" и флаги каждого символа и глифа.

В GlyphRun имеются соответствующие высокоуровневые объекты FrameworkElement, Glyphs. Glyphs можно использовать в дереве элементов в разметке XAML для предоставления вывода GlyphRun.

Элемент Glyphs

Элемент Glyphs предоставляет вывод GlyphRun в XAML. Следующий синтаксис разметки используется для описания элемента Glyphs.

<!-- The example shows how to use a Glyphs object. -->
<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  >

   <StackPanel Background="PowderBlue">

      <Glyphs
         FontUri             = "C:\WINDOWS\Fonts\TIMES.TTF"
         FontRenderingEmSize = "100"
         StyleSimulations    = "BoldSimulation"
         UnicodeString       = "Hello World!"
         Fill                = "Black"
         OriginX             = "100"
         OriginY             = "200"
      />

   </StackPanel>
</Page>

Следующие определения свойств соответствуют первым четырем атрибутам в примере разметки.

Свойство Description
FontUri Указывает идентификатор ресурса: имя файла, универсальный код веб-ресурса (URI) или ссылку на ресурс в исполняемом файле приложения или контейнере.
FontRenderingEmSize Указывает размер шрифта в единицах графической поверхности (по умолчанию — 0,96 дюйма).
StyleSimulations Задает флаги для полужирного шрифта и курсива.
BidiLevel Задает уровень двунаправленного макета. Четные и нулевые значения подразумевают макет слева направо; нечетные значения подразумевают макет справа налево.

Свойство Indices

Свойство Indices — это строка с характеристиками глифа. Если последовательность глифов образует единый кластер, спецификации первого глифа в кластере предшествует спецификация того, сколько глифов и сколько кодовых точек объединяются для формирования кластера. В свойстве Indices собраны в виде одной строки следующие свойства.

  • Индексы глифов

  • Дополнительная ширина глифа

  • Объединение векторов присоединения глифа

  • Сопоставление кластера от кодовых точек к глифам

  • Флаги глифов

Спецификация глифа имеет следующий вид.

[GlyphIndex][,[Advance][,[uOffset][,[vOffset][,[Flags]]]]]

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

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

Diagraph of glyph measurements

Разметка глифа

В следующем примере кода показано, как использовать различные свойства элемента Glyphs на языке XAML.

<!-- The example shows how to use different property settings of Glyphs objects. -->
<Canvas
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Background="PowderBlue"
  >

<Glyphs 
   FontUri             = "C:\WINDOWS\Fonts\ARIAL.TTF"
   FontRenderingEmSize = "36"
   StyleSimulations    = "ItalicSimulation"
   UnicodeString       = "Hello World!"
   Fill                = "SteelBlue"
   OriginX             = "50"
   OriginY             = "75"
/>

<!-- "Hello World!" with default kerning -->
<Glyphs 
   FontUri             = "C:\WINDOWS\Fonts\ARIAL.TTF"
   FontRenderingEmSize = "36"
   UnicodeString       = "Hello World!"
   Fill                = "Maroon"
   OriginX             = "50"
   OriginY             = "150"
/>

<!-- "Hello World!" with explicit character widths for proportional font -->
<Glyphs 
   FontUri             = "C:\WINDOWS\Fonts\ARIAL.TTF"
   FontRenderingEmSize = "36"
   UnicodeString       = "Hello World!"
   Indices             = ",80;,80;,80;,80;,80;,80;,80;,80;,80;,80;,80"
   Fill                = "Maroon"
   OriginX             = "50"
   OriginY             = "225"
/>

<!-- "Hello World!" with fixed-width font -->
<Glyphs 
     FontUri             = "C:\WINDOWS\Fonts\COUR.TTF"
     FontRenderingEmSize = "36"
     StyleSimulations    = "BoldSimulation"
     UnicodeString       = "Hello World!"
     Fill                = "Maroon"
     OriginX             = "50"
     OriginY             = "300"
/>

<!-- "Open file" without "fi" ligature -->
<Glyphs
   FontUri             = "C:\WINDOWS\Fonts\TIMES.TTF"
   FontRenderingEmSize = "36"
   StyleSimulations    = "BoldSimulation"
   UnicodeString       = "Open file"
   Fill                = "SlateGray"
   OriginX             = "400"
   OriginY             = "75"
/>

<!-- "Open file" with "fi" ligature -->
<Glyphs
   FontUri             = "C:\WINDOWS\Fonts\TIMES.TTF"
   FontRenderingEmSize = "36"
   StyleSimulations    = "BoldSimulation"
   UnicodeString       = "Open file"
   Indices             = ";;;;;(2:1)191"
   Fill                = "SlateGray"
   OriginX             = "400"
   OriginY             = "150"
/>

</Canvas>

См. также