ここでは、GlyphRun オブジェクトと Glyphs 要素について説明します。
このトピックは、次のセクションで構成されています。
- GlyphRun の概要
- GlyphRun オブジェクト
- Glyphs 要素
- グリフのメトリック
- グリフのマークアップ
- 関連トピック
GlyphRun の概要
Windows Presentation Foundation (WPF) は、ユーザーが書式設定後にテキストを途中受信および永続化できるように、Glyphs に直接アクセスできるグリフ レベルのマークアップを含む高度なテキストをサポートします。 これらの機能によって、次の各シナリオにおけるさまざまなテキスト レンダリングの要件が満たされます。
固定形式ドキュメントの画面表示。
印刷シナリオ。
デバイス プリンター言語としての Extensible Application Markup Language (XAML)。
Microsoft XPS Document Writer.
Win32 アプリケーションから固定形式に出力される以前のプリンター ドライバー。
印刷スプール形式。
前のバージョンの Windows のクライアントやその他のコンピューティング デバイスを含む固定形式のドキュメントの表示。
![]() |
---|
Glyphs および GlyphRun は、固定形式のドキュメントの表示および印刷シナリオのために設計されています。Windows Presentation Foundation (WPF) には、Label や TextBlock などの一般的なレイアウトおよびuser interface (UI) シナリオのための要素がいくつか用意されています。レイアウトと UI シナリオの詳細については、「WPF のタイポグラフィ」を参照してください。 |
GlyphRun オブジェクト
GlyphRun オブジェクトは、同じ描画スタイルが設定され、サイズ、フォント、およびフォントの書体が同じである一連のグリフを表します。
GlyphRun は、グリフの Indices や個々のグリフの位置などの両方のフォントの詳細を格納します。 さらに、グリフ実行が生成された元の Unicode コード ポイント、文字からグリフへのバッファー オフセット マッピングの情報、および文字別とグリフ別のフラグが格納されています。
GlyphRun には、対応する高レベルの FrameworkElement である Glyphs があります。 Glyphs は、GlyphRun 出力を表すために要素ツリーおよび XAML マークアップで使用できます。
Glyphs 要素
Glyphs 要素は、XAML の GlyphRun の出力を表します。 Glyphs 要素を記述するには、次のマークアップ構文を使用します。
<!-- The example shows how to use a Glyphs object. -->
<Page
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://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>
次のプロパティ定義は、サンプル マークアップの最初の 4 つの属性に対応します。
プロパティ |
説明 |
---|---|
リソース識別子 (ファイル名、Web uniform resource identifier (URI)、またはアプリケーション .exe かコンテナー内のリソース参照) を指定します。 |
|
描画サーフェイスの単位でフォント サイズを指定します (既定値は .96 インチです)。 |
|
太字と斜体のスタイルのフラグを指定します。 |
|
双方向のレイアウト レベルを指定します。 偶数値および 0 の値は左から右へのレイアウトを意味します。奇数値は右から左へのレイアウトを意味します。 |
Indices プロパティ
Indices プロパティは、グリフ指定の文字列です。 一連のグリフが単一のクラスターを形成する場合、クラスター内の最初のグリフの指定の前に、クラスターを形成するために結合されるグリフの数およびコード ポイントの数が指定されます。 Indices プロパティは、次のプロパティを 1 つの文字列に収集します。
グリフ インデックス
グリフのアドバンス幅
結合グリフの結合ベクター
コード ポイントからグリフへのクラスターのマッピング
グリフ フラグ
各グリフ指定の形式は次のとおりです。
[GlyphIndex][,[Advance][,[uOffset][,[vOffset][,[Flags]]]]]
グリフのメトリック
各グリフは、他の Glyphs および位置をどのように揃えるかを指定するメトリックを定義します。 次のグラフィックは、2 種類のグリフ文字の文字体裁のさまざまな特性を明確に示しています。
グリフのマークアップ
XAML で Glyphs 要素のさまざまなプロパティを使用する方法を次のコード例に示します。
<!-- The example shows how to use different property settings of Glyphs objects. -->
<Canvas
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://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>