IDWriteFontFace1
COM公式ドキュメント
フォントフェイスの種類、適切なファイル参照、およびフェイス識別データを保持します。(IDWriteFontFace1)
メソッド 12
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
フォントフェイスのデザイン単位と共通のメトリックを取得します。これらのメトリックはフォントフェイス内のすべてのグリフに適用され、アプリケーションがレイアウト計算に使用します。(IDWriteFontFace1.GetMetrics)
| fontMetrics | DWRITE_FONT_METRICS1* | out | 現在のフォントフェイス要素のメトリックを保持する、値が設定された DWRITE_FONT_METRICS1 構造体です。このメソッドが返すメトリックはフォントのデザイン単位で表されます。 |
フォントフェイスのデザイン単位と共通のメトリックを取得します。これらのメトリックはフォントフェイス内のすべてのグリフに適用され、アプリケーションがレイアウト計算に使用します。(IDWriteFontFace1.GetGdiCompatibleMetrics)
| emSize | FLOAT | in | DIP 単位でのフォントの論理サイズです。 |
| pixelsPerDip | FLOAT | in | DIP あたりの物理ピクセル数です。 |
| transform | DWRITE_MATRIX* | inoptional | グリフとその位置に適用される省略可能な変換です。この変換は、フォントサイズと pixelsPerDip で指定されたスケーリングの後に適用されます。 |
| fontMetrics | DWRITE_FONT_METRICS1* | out | 値を設定する DWRITE_FONT_METRICS1 構造体へのポインターです。この関数が返すメトリックはフォントのデザイン単位で表されます。 |
戻り値
型: HRESULT
標準的な HRESULT エラーコードです。
フォントのキャレットメトリックをデザイン単位で取得します。
| caretMetrics | DWRITE_CARET_METRICS* | out | 値が設定される DWRITE_CARET_METRICS 構造体へのポインターです。 |
解説(Remarks)
キャレットメトリックは、テキストエディターが正しいキャレットの配置と傾きを描画するために使用します。
フォントがサポートする文字範囲の一覧を取得します。
| maxRangeCount | DWORD | in | クライアントから渡される文字範囲の最大数です。 |
| unicodeRanges | DWRITE_UNICODE_RANGE* | outoptional | 文字範囲が設定される DWRITE_UNICODE_RANGE 構造体の配列です。 |
| actualRangeCount | DWORD* | out | 最大数に関係なく、実際の文字範囲の数へのポインターです。 |
戻り値
型: HRESULT
このメソッドは次のいずれかの値を返す場合があります。
| 戻り値 | 説明 |
|---|---|
| メソッドが正常に実行されました。 | |
|
バッファーが小さすぎます。actualRangeCount が maxRangeCount を超えていました。 |
解説(Remarks)
フォントがサポートする文字範囲の一覧は、文字の選択、グリフの表示、効率的なフォント選択の検索といったシナリオで役立ちます。これは GDI の GetFontUnicodeRanges に似ていますが、16 ビットの UCS-2 だけでなく Unicode の全範囲を返す点が異なります。
これらの範囲は OS/2::ulCodePageRange1 ではなく cmap から取得されます。
このメソッドが利用できない場合は、IDWriteFontFace::GetGlyphIndices メソッドを使用して欠落しているグリフを確認できます。このメソッドは、フォントに存在しないグリフに対してインデックス 0 を返します。
フォントフォールバックのように、単一の文字や複数の単一文字を連続して確認する必要がある場合は、IDWriteFont::HasCharacter メソッドのほうが簡単なことがよくあります。
テキスト範囲のフォントが等幅かどうか、つまりフォントの文字がすべて同じ固定ピッチ幅であるかどうかを判定します。
戻り値
型: BOOL
フォントが等幅の場合は TRUE を、それ以外の場合は FALSE を返します。
一連のグリフのアドバンスをデザイン単位で取得します。
| glyphCount | DWORD | in | アドバンスを取得するグリフの数です。 |
| glyphIndices | WORD* | in | アドバンスを取得するグリフ ID の配列です。 |
| glyphAdvances | INT* | out | 各グリフのアドバンスがフォントのデザイン単位で返されます。 |
| isSideways | BOOL | in | 水平方向のアドバンス幅ではなく、グリフの垂直方向のアドバンス高さを取得します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
これは GetGlyphMetrics を呼び出してアドバンスの幅と高さのみを使用することと同等です。
一連のグリフのピクセルにアラインされたアドバンスを返します。
| emSize | FLOAT | in | DIP 単位でのフォントの論理サイズです。DIP(「デバイス非依存ピクセル」)は 1/96 インチに相当します。 |
| pixelsPerDip | FLOAT | in | DIP あたりの物理ピクセル数です。たとえば、レンダリングサーフェスの DPI が 96 の場合、この値は 1.0f です。DPI が 120 の場合、この値は 120.0f/96 です。 |
| transform | DWRITE_MATRIX* | inoptional | グリフとその位置に適用される省略可能な変換です。この変換は、フォントサイズと pixelsPerDip で指定されたスケーリングの後に適用されます。 |
| useGdiNatural | BOOL | in | FALSE の場合、メトリックは GDI のエイリアス処理されたテキスト(DWRITE_MEASURING_MODE_GDI_CLASSIC)と同じになります。TRUE の場合、メトリックは GDI が CLEARTYPE_NATURAL_QUALITY を使用するフォントで測定したもの(DWRITE_MEASURING_MODE_GDI_NATURAL)と同じになります。 |
| isSideways | BOOL | in | 水平方向のアドバンスではなく、グリフの垂直方向のアドバンスを取得します。 |
| glyphCount | DWORD | in | 調整値を取得するグリフの総数です。 |
| glyphIndices | WORD* | in | アドバンスを取得するグリフ ID の配列です。 |
| glyphAdvances | INT* | out | 各グリフのアドバンスがフォントのデザイン単位で返されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
これは GetGdiCompatibleGlyphMetrics を呼び出してアドバンスの幅と高さのみを使用することと同等です。
GetGdiCompatibleGlyphMetrics と同様に、これらはデザイン単位で表されるため、DWRITE_FONT_METRICS::designUnitsPerEm で縮小する必要があります。
フォントの kern テーブルからカーニングペアの調整値を取得します。
| glyphCount | DWORD | in | 調整値を取得するグリフの数です。 |
| glyphIndices | WORD* | in | 調整値を取得するグリフ ID の配列です。 |
| glyphAdvanceAdjustments | INT* | out | 各グリフのアドバンスがフォントのデザイン単位で返されます。最後のグリフの調整値は 0 です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
GetKerningPairAdjustments は、GDI の文字ベースの GetKerningPairs を直接置き換えるものではありませんが、クライアントがローカルにキャッシュする必要なく、同じ役割を果たします。また、GetKerningPairAdjustments は(kern テーブルが実際に格納している)UCS-2 文字ではなくグリフ ID を直接使用するため、ダッシュとハイフン、あるいはスペースと非改行スペースといった、グリフの重複やあいまいさを回避できます。
新しいフォントでは、従来のペアテーブルによるカーニングではなく GPOS カーニングのみを備えている場合があります。Gabriola のようなそうしたフォントでは、調整値として 0 のみが返されます。GetKerningPairAdjustments は、これらの GPOS エントリを仮想化してカーニングペアへと平坦化することはしません。
IDWriteFontFace1::HasKerningPairs を呼び出して GetKerningPairAdjustments を呼び出す必要があるかどうかを判断することで、パフォーマンス上の利点が得られます。以前に IDWriteFontFace1::HasKerningPairs を呼び出して FALSE が返された場合、そのフォントにはカーニングペアテーブルのエントリがないため、GetKerningPairAdjustments の呼び出しを回避できます。つまり、この状況では GetKerningPairAdjustments の呼び出しは何も行わない(no-op)ことになります。
フォントがペアカーニングをサポートしているかどうかを判定します。
戻り値
フォントがカーニングペアをサポートしている場合は TRUE を、それ以外の場合は FALSE を返します。
解説(Remarks)
フォントがペアテーブルカーニングをサポートしていない場合、IDWriteFontFace1::GetKerningPairAdjustments はすべて 0 を取得することになるため、呼び出す必要はありません。
指定されたサイズとレンダリングパラメーターを使用して、フォントに推奨されるレンダリングモードを判定します。(IDWriteFontFace1.GetRecommendedRenderingMode)
| fontEmSize | FLOAT | in | DIP 単位でのフォントの論理サイズです。DIP(「デバイス非依存ピクセル」)は 1/96 インチに相当します。 |
| dpiX | FLOAT | in | 水平方向における DIP あたりの物理ピクセル数です。たとえば、レンダリングサーフェスの DPI が 96 の場合、この値は 1.0f です。DPI が 120 の場合、この値は 120.0f/96 です。 |
| dpiY | FLOAT | in | 垂直方向における DIP あたりの物理ピクセル数です。たとえば、レンダリングサーフェスの DPI が 96 の場合、この値は 1.0f です。DPI が 120 の場合、この値は 120.0f/96 です。 |
| transform | DWRITE_MATRIX* | inoptional | ワールド変換を指定します。 |
| isSideways | BOOL | in | ラン内のグリフが横向きかどうかを指定します。 |
| outlineThreshold | DWRITE_OUTLINE_THRESHOLD | in | グラフィックスシステムのアウトラインレンダリングの品質を指定する DWRITE_OUTLINE_THRESHOLD 型の値です。この値を超えるとアウトラインレンダリングが使用されるサイズしきい値に影響します。 |
| measuringMode | DWRITE_MEASURING_MODE | in | フォント内のグリフに使用される測定方法です。レンダラーの実装は、測定方法ごとに異なるレンダリングモードを選択する場合があります。たとえば次のとおりです。 |
| renderingMode | DWRITE_RENDERING_MODE* | out | このメソッドが返るとき、使用すべき推奨レンダリングモードを示す値が格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、レンダリングパラメーターオブジェクトのレンダリングモードが DWRITE_RENDERING_MODE_DEFAULT である場合に、実際のレンダリングモードを判定するために使用します。
GetGlyphIndices から取得した公称グリフの縦書き形を取得します。
| glyphCount | DWORD | in | 取得するグリフの数です。 |
| nominalGlyphIndices | WORD* | in | cmap から得られる元のグリフインデックスです。 |
| verticalGlyphIndices | WORD* | out | グリフインデックスの縦書き形です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
この取得ではフォントの 'vert' テーブルを使用します。これは CJK の縦書きレイアウトで、正しい文字が表示されるようにするために使用されます。
GetGlyphIndices を呼び出して公称グリフインデックスを取得し、ランが横向きでフォントに縦書きグリフバリアントがある場合に、続けてこのメソッドを呼び出して置換形へ再マッピングします。詳細については HasVerticalGlyphVariants を参照してください。
フォントに縦書きグリフバリアントがあるかどうかを判定します。
戻り値
フォントに縦書きグリフバリアントが含まれる場合は TRUE を、それ以外の場合は FALSE を返します。
解説(Remarks)
OpenType フォントの場合、HasVerticalGlyphVariants はフォントに "vert" 機能が含まれていれば TRUE を返します。
IDWriteFontFace1::GetVerticalGlyphVariants は、IDWriteFontFace::GetGlyphIndices から取得した公称グリフの縦書き形を取得します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDWriteFontFace1 "{A71EFDB4-9FDB-4838-AD90-CFC3BE8C3DAF}" #usecom global IDWriteFontFace1 IID_IDWriteFontFace1 "{}" #comfunc global IDWriteFontFace1_GetMetrics 18 var #comfunc global IDWriteFontFace1_GetGdiCompatibleMetrics 19 float,float,var,var #comfunc global IDWriteFontFace1_GetCaretMetrics 20 var #comfunc global IDWriteFontFace1_GetUnicodeRanges 21 int,var,var #comfunc global IDWriteFontFace1_IsMonospacedFont 22 #comfunc global IDWriteFontFace1_GetDesignGlyphAdvances 23 int,var,var,int #comfunc global IDWriteFontFace1_GetGdiCompatibleGlyphAdvances 24 float,float,var,int,int,int,var,var #comfunc global IDWriteFontFace1_GetKerningPairAdjustments 25 int,var,var #comfunc global IDWriteFontFace1_HasKerningPairs 26 #comfunc global IDWriteFontFace1_GetRecommendedRenderingMode 27 float,float,float,var,int,int,int,var #comfunc global IDWriteFontFace1_GetVerticalGlyphVariants 28 int,var,var #comfunc global IDWriteFontFace1_HasVerticalGlyphVariants 29 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IDWriteFontFace1 "{A71EFDB4-9FDB-4838-AD90-CFC3BE8C3DAF}" #usecom global IDWriteFontFace1 IID_IDWriteFontFace1 "{}" #comfunc global IDWriteFontFace1_GetMetrics 18 sptr #comfunc global IDWriteFontFace1_GetGdiCompatibleMetrics 19 float,float,sptr,sptr #comfunc global IDWriteFontFace1_GetCaretMetrics 20 sptr #comfunc global IDWriteFontFace1_GetUnicodeRanges 21 int,sptr,sptr #comfunc global IDWriteFontFace1_IsMonospacedFont 22 #comfunc global IDWriteFontFace1_GetDesignGlyphAdvances 23 int,sptr,sptr,int #comfunc global IDWriteFontFace1_GetGdiCompatibleGlyphAdvances 24 float,float,sptr,int,int,int,sptr,sptr #comfunc global IDWriteFontFace1_GetKerningPairAdjustments 25 int,sptr,sptr #comfunc global IDWriteFontFace1_HasKerningPairs 26 #comfunc global IDWriteFontFace1_GetRecommendedRenderingMode 27 float,float,float,sptr,int,int,int,sptr #comfunc global IDWriteFontFace1_GetVerticalGlyphVariants 28 int,sptr,sptr #comfunc global IDWriteFontFace1_HasVerticalGlyphVariants 29 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。