Win32 API 日本語リファレンス
ホームGraphics.DirectWrite › IDWriteFontFace1

IDWriteFontFace1

COM
IIDa71efdb4-9fdb-4838-ad90-cfc3be8c3daf継承元IDWriteFontFace自前メソッド開始 vtbl18

公式ドキュメント

フォントフェイスの種類、適切なファイル参照、およびフェイス識別データを保持します。(IDWriteFontFace1)

メソッド 12

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 18 void GetMetrics(DWRITE_FONT_METRICS1* fontMetrics)

フォントフェイスのデザイン単位と共通のメトリックを取得します。これらのメトリックはフォントフェイス内のすべてのグリフに適用され、アプリケーションがレイアウト計算に使用します。(IDWriteFontFace1.GetMetrics)

fontMetricsDWRITE_FONT_METRICS1*out現在のフォントフェイス要素のメトリックを保持する、値が設定された DWRITE_FONT_METRICS1 構造体です。このメソッドが返すメトリックはフォントのデザイン単位で表されます。
vtbl 19 HRESULT GetGdiCompatibleMetrics(FLOAT emSize, FLOAT pixelsPerDip, DWRITE_MATRIX* transform, DWRITE_FONT_METRICS1* fontMetrics)

フォントフェイスのデザイン単位と共通のメトリックを取得します。これらのメトリックはフォントフェイス内のすべてのグリフに適用され、アプリケーションがレイアウト計算に使用します。(IDWriteFontFace1.GetGdiCompatibleMetrics)

emSizeFLOATinDIP 単位でのフォントの論理サイズです。
pixelsPerDipFLOATinDIP あたりの物理ピクセル数です。
transformDWRITE_MATRIX*inoptionalグリフとその位置に適用される省略可能な変換です。この変換は、フォントサイズと pixelsPerDip で指定されたスケーリングの後に適用されます。
fontMetricsDWRITE_FONT_METRICS1*out値を設定する DWRITE_FONT_METRICS1 構造体へのポインターです。この関数が返すメトリックはフォントのデザイン単位で表されます。

戻り値

型: HRESULT

標準的な HRESULT エラーコードです。

vtbl 20 void GetCaretMetrics(DWRITE_CARET_METRICS* caretMetrics)

フォントのキャレットメトリックをデザイン単位で取得します。

caretMetricsDWRITE_CARET_METRICS*out値が設定される DWRITE_CARET_METRICS 構造体へのポインターです。

解説(Remarks)

キャレットメトリックは、テキストエディターが正しいキャレットの配置と傾きを描画するために使用します。

vtbl 21 HRESULT GetUnicodeRanges(DWORD maxRangeCount, DWRITE_UNICODE_RANGE* unicodeRanges, DWORD* actualRangeCount)

フォントがサポートする文字範囲の一覧を取得します。

maxRangeCountDWORDinクライアントから渡される文字範囲の最大数です。
unicodeRangesDWRITE_UNICODE_RANGE*outoptional文字範囲が設定される DWRITE_UNICODE_RANGE 構造体の配列です。
actualRangeCountDWORD*out最大数に関係なく、実際の文字範囲の数へのポインターです。

戻り値

型: HRESULT

このメソッドは次のいずれかの値を返す場合があります。

戻り値 説明
S_OK
メソッドが正常に実行されました。
E_NOT_SUFFICIENT_BUFFER
バッファーが小さすぎます。actualRangeCountmaxRangeCount を超えていました。

解説(Remarks)

フォントがサポートする文字範囲の一覧は、文字の選択、グリフの表示、効率的なフォント選択の検索といったシナリオで役立ちます。これは GDI の GetFontUnicodeRanges に似ていますが、16 ビットの UCS-2 だけでなく Unicode の全範囲を返す点が異なります。

これらの範囲は OS/2::ulCodePageRange1 ではなく cmap から取得されます。

このメソッドが利用できない場合は、IDWriteFontFace::GetGlyphIndices メソッドを使用して欠落しているグリフを確認できます。このメソッドは、フォントに存在しないグリフに対してインデックス 0 を返します。

フォントフォールバックのように、単一の文字や複数の単一文字を連続して確認する必要がある場合は、IDWriteFont::HasCharacter メソッドのほうが簡単なことがよくあります。

vtbl 22 BOOL IsMonospacedFont()

テキスト範囲のフォントが等幅かどうか、つまりフォントの文字がすべて同じ固定ピッチ幅であるかどうかを判定します。

戻り値

型: BOOL

フォントが等幅の場合は TRUE を、それ以外の場合は FALSE を返します。

vtbl 23 HRESULT GetDesignGlyphAdvances(DWORD glyphCount, WORD* glyphIndices, INT* glyphAdvances, BOOL isSideways)

一連のグリフのアドバンスをデザイン単位で取得します。

glyphCountDWORDinアドバンスを取得するグリフの数です。
glyphIndicesWORD*inアドバンスを取得するグリフ ID の配列です。
glyphAdvancesINT*out各グリフのアドバンスがフォントのデザイン単位で返されます。
isSidewaysBOOLin水平方向のアドバンス幅ではなく、グリフの垂直方向のアドバンス高さを取得します。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

これは GetGlyphMetrics を呼び出してアドバンスの幅と高さのみを使用することと同等です。

vtbl 24 HRESULT GetGdiCompatibleGlyphAdvances(FLOAT emSize, FLOAT pixelsPerDip, DWRITE_MATRIX* transform, BOOL useGdiNatural, BOOL isSideways, DWORD glyphCount, WORD* glyphIndices, INT* glyphAdvances)

一連のグリフのピクセルにアラインされたアドバンスを返します。

emSizeFLOATinDIP 単位でのフォントの論理サイズです。DIP(「デバイス非依存ピクセル」)は 1/96 インチに相当します。
pixelsPerDipFLOATinDIP あたりの物理ピクセル数です。たとえば、レンダリングサーフェスの DPI が 96 の場合、この値は 1.0f です。DPI が 120 の場合、この値は 120.0f/96 です。
transformDWRITE_MATRIX*inoptionalグリフとその位置に適用される省略可能な変換です。この変換は、フォントサイズと pixelsPerDip で指定されたスケーリングの後に適用されます。
useGdiNaturalBOOLinFALSE の場合、メトリックは GDI のエイリアス処理されたテキスト(DWRITE_MEASURING_MODE_GDI_CLASSIC)と同じになります。TRUE の場合、メトリックは GDI が CLEARTYPE_NATURAL_QUALITY を使用するフォントで測定したもの(DWRITE_MEASURING_MODE_GDI_NATURAL)と同じになります。
isSidewaysBOOLin水平方向のアドバンスではなく、グリフの垂直方向のアドバンスを取得します。
glyphCountDWORDin調整値を取得するグリフの総数です。
glyphIndicesWORD*inアドバンスを取得するグリフ ID の配列です。
glyphAdvancesINT*out各グリフのアドバンスがフォントのデザイン単位で返されます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

これは GetGdiCompatibleGlyphMetrics を呼び出してアドバンスの幅と高さのみを使用することと同等です。

GetGdiCompatibleGlyphMetrics と同様に、これらはデザイン単位で表されるため、DWRITE_FONT_METRICS::designUnitsPerEm で縮小する必要があります。

vtbl 25 HRESULT GetKerningPairAdjustments(DWORD glyphCount, WORD* glyphIndices, INT* glyphAdvanceAdjustments)

フォントの kern テーブルからカーニングペアの調整値を取得します。

glyphCountDWORDin調整値を取得するグリフの数です。
glyphIndicesWORD*in調整値を取得するグリフ ID の配列です。
glyphAdvanceAdjustmentsINT*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)ことになります。

vtbl 26 BOOL HasKerningPairs()

フォントがペアカーニングをサポートしているかどうかを判定します。

戻り値

フォントがカーニングペアをサポートしている場合は TRUE を、それ以外の場合は FALSE を返します。

解説(Remarks)

フォントがペアテーブルカーニングをサポートしていない場合、IDWriteFontFace1::GetKerningPairAdjustments はすべて 0 を取得することになるため、呼び出す必要はありません。

vtbl 27 HRESULT GetRecommendedRenderingMode(FLOAT fontEmSize, FLOAT dpiX, FLOAT dpiY, DWRITE_MATRIX* transform, BOOL isSideways, DWRITE_OUTLINE_THRESHOLD outlineThreshold, DWRITE_MEASURING_MODE measuringMode, DWRITE_RENDERING_MODE* renderingMode)

指定されたサイズとレンダリングパラメーターを使用して、フォントに推奨されるレンダリングモードを判定します。(IDWriteFontFace1.GetRecommendedRenderingMode)

fontEmSizeFLOATinDIP 単位でのフォントの論理サイズです。DIP(「デバイス非依存ピクセル」)は 1/96 インチに相当します。
dpiXFLOATin水平方向における DIP あたりの物理ピクセル数です。たとえば、レンダリングサーフェスの DPI が 96 の場合、この値は 1.0f です。DPI が 120 の場合、この値は 120.0f/96 です。
dpiYFLOATin垂直方向における DIP あたりの物理ピクセル数です。たとえば、レンダリングサーフェスの DPI が 96 の場合、この値は 1.0f です。DPI が 120 の場合、この値は 120.0f/96 です。
transformDWRITE_MATRIX*inoptionalワールド変換を指定します。
isSidewaysBOOLinラン内のグリフが横向きかどうかを指定します。
outlineThresholdDWRITE_OUTLINE_THRESHOLDinグラフィックスシステムのアウトラインレンダリングの品質を指定する DWRITE_OUTLINE_THRESHOLD 型の値です。この値を超えるとアウトラインレンダリングが使用されるサイズしきい値に影響します。
measuringModeDWRITE_MEASURING_MODEin

フォント内のグリフに使用される測定方法です。レンダラーの実装は、測定方法ごとに異なるレンダリングモードを選択する場合があります。たとえば次のとおりです。

renderingModeDWRITE_RENDERING_MODE*outこのメソッドが返るとき、使用すべき推奨レンダリングモードを示す値が格納されます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、レンダリングパラメーターオブジェクトのレンダリングモードが DWRITE_RENDERING_MODE_DEFAULT である場合に、実際のレンダリングモードを判定するために使用します。

vtbl 28 HRESULT GetVerticalGlyphVariants(DWORD glyphCount, WORD* nominalGlyphIndices, WORD* verticalGlyphIndices)

GetGlyphIndices から取得した公称グリフの縦書き形を取得します。

glyphCountDWORDin取得するグリフの数です。
nominalGlyphIndicesWORD*incmap から得られる元のグリフインデックスです。
verticalGlyphIndicesWORD*outグリフインデックスの縦書き形です。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

この取得ではフォントの 'vert' テーブルを使用します。これは CJK の縦書きレイアウトで、正しい文字が表示されるようにするために使用されます。

GetGlyphIndices を呼び出して公称グリフインデックスを取得し、ランが横向きでフォントに縦書きグリフバリアントがある場合に、続けてこのメソッドを呼び出して置換形へ再マッピングします。詳細については HasVerticalGlyphVariants を参照してください。

vtbl 29 BOOL HasVerticalGlyphVariants()

フォントに縦書きグリフバリアントがあるかどうかを判定します。

戻り値

フォントに縦書きグリフバリアントが含まれる場合は TRUE を、それ以外の場合は FALSE を返します。

解説(Remarks)

OpenType フォントの場合、HasVerticalGlyphVariants はフォントに "vert" 機能が含まれていれば TRUE を返します。

IDWriteFontFace1::GetVerticalGlyphVariants は、IDWriteFontFace::GetGlyphIndices から取得した公称グリフの縦書き形を取得します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 方式にも切替可。