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

IDWriteFontFace

COM
IID5f49804d-7024-4d43-bfa9-d25984f53849継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

このインターフェースは、メトリクス、名前、グリフのアウトラインなど、さまざまなフォントデータを公開します。フォントフェイスの種類、適切なファイル参照、およびフェイスの識別データを保持します。

メソッド 15

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

vtbl 3 DWRITE_FONT_FACE_TYPE GetType()

フォントフェイスのファイル形式の種類を取得します。

戻り値

Type: DWRITE_FONT_FACE_TYPE

フォントフェイスの形式の種類(Type 1、TrueType、ベクター、ビットマップなど)を示す値。

vtbl 4 HRESULT GetFiles(DWORD* numberOfFiles, IDWriteFontFile** fontFiles)

フォントフェイスを表すフォントファイルを取得します。

numberOfFilesDWORD*inoutfontFilesNULL の場合、フォントフェイスを表すファイルの数を受け取ります。そうでない場合は、要求するフォントファイルの数を渡す必要があります。詳細は下記の「解説」を参照してください。
fontFilesIDWriteFontFile**outoptionalこのメソッドが返るときに、フォントフェイスを表すフォントファイルへのポインタを格納する、ユーザー提供の配列へのポインタを保持します。 フォントフェイスを表すファイルの数のみを取得したい場合、このパラメータは NULL にできます。 この API は、COM の規約に従って返されたフォントファイルポインタの参照カウントをインクリメントするため、クライアントは 使用が終わったらそれらを解放する必要があります。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。

解説(Remarks)

IDWriteFontFace::GetFiles メソッドは2回呼び出す必要があります。1回目の GetFiles 呼び出しでは fontFilesNULL にします。メソッドが返ると、numberOfFiles がフォントフェイスを表すフォントファイルの数を受け取ります。

その後、1回目の呼び出しで出力された numberOfFiles の値と、IDWriteFontFile ポインタを格納する適切なサイズの非NULLバッファを渡して、メソッドを2回目に呼び出します。

vtbl 5 DWORD GetIndex()

フォントファイルのコンテキストにおけるフォントフェイスのインデックスを取得します。

戻り値

Type: UINT32

フォントファイルがフォントフェイスのコレクションを含む場合の、フォントフェイスの0から始まるインデックス。 フォントファイルが単一のフェイスを含む場合、この値は0です。

vtbl 6 DWRITE_FONT_SIMULATIONS GetSimulations()

フォントフェイスのアルゴリズムによるスタイルシミュレーションフラグを取得します。(IDWriteFontFace.GetSimulations)

戻り値

Type: DWRITE_FONT_SIMULATIONS

テキストをアルゴリズム的に太字または斜体にするための、フォントフェイスのシミュレーションフラグ。

vtbl 7 BOOL IsSymbolFont()

フォントがシンボルフォントかどうかを判定します。(IDWriteFontFace.IsSymbolFont)

戻り値

Type: BOOL

フォントがシンボルフォントの場合は TRUE、そうでない場合は FALSE を返します。

vtbl 8 void GetMetrics(DWRITE_FONT_METRICS* fontFaceMetrics)

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

fontFaceMetricsDWRITE_FONT_METRICS*outこのメソッドが返るときに、現在のフォントフェイス要素のメトリクス(アセント、ディセント、キャップハイトなど)を保持する DWRITE_FONT_METRICS 構造体。 この関数が返すメトリクスはフォントのデザイン単位です。
vtbl 9 WORD GetGlyphCount()

フォントフェイス内のグリフの数を取得します。

戻り値

Type: UINT16

フォントフェイス内のグリフの数。

vtbl 10 HRESULT GetDesignGlyphMetrics(WORD* glyphIndices, DWORD glyphCount, DWRITE_GLYPH_METRICS* glyphMetrics, BOOL isSideways)

フォントのデザイン単位で、理想的な(解像度に依存しない)グリフメトリクスを取得します。

glyphIndicesWORD*inメトリクスを計算する対象のグリフインデックスの配列。配列には glyphCount で指定した数以上の要素を含める必要があります。
glyphCountDWORDinglyphIndices 配列の要素数。
glyphMetricsDWRITE_GLYPH_METRICS*outこのメソッドが返るときに、DWRITE_GLYPH_METRICS 構造体の配列を保持します。glyphMetrics は、glyphCount と同じ数以上の要素を含む空のバッファで初期化する必要があります。 この関数が返すメトリクスはフォントのデザイン単位です。
isSidewaysBOOLinフォントが横倒し(sideways)のランで使用されているかどうかを示します。横倒しのオブリークシミュレーションは横倒しでない場合のオブリークシミュレーションと異なるため、 フォントがオブリークシミュレーションを持つ場合、これがグリフメトリクスに影響することがあります。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。

解説(Remarks)

デザイングリフメトリクスはグリフの配置に使用されます。

vtbl 11 HRESULT GetGlyphIndices(DWORD* codePoints, DWORD codePointCount, WORD* glyphIndices)

フォントの 'CMAP' テーブルで定義されている、UCS4 Unicode コードポイントからグリフインデックスへの名目上のマッピングを返します。

codePointsDWORD*in名目上のグリフインデックスを取得する対象の USC4 コードポイントの配列。配列は割り当て済みで、codePointCount で指定した数の要素を格納できる必要があります。
codePointCountDWORDincodePoints 配列の要素数。
glyphIndicesWORD*outこのメソッドが返るときに、この関数によって設定された名目上のグリフインデックスの配列へのポインタを保持します。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。

解説(Remarks)

このマッピングは主に、物理フォント API 上に構築された行レイアウトエンジンのために提供されている点に注意してください。 OpenType のグリフ置換や行レイアウトの文字置換のため、名目上の変換は、特定のフォントフェイスを使用してレンダリングする際に Unicode 文字列がグリフインデックスへどのようにマッピングされるかと必ずしも一致しません。 また、Unicode バリアントセレクタは、文字からグリフへの代替マッピングを提供する点にも注意してください。 この呼び出しは常に既定のバリアントを返します。

フォントに文字が存在しない場合、このメソッドはインデックス 0 を返します。これは未定義のグリフ、すなわち ".notdef" グリフです。文字がフォントに含まれない場合、IDWriteFont::HasCharacter は false を返し、GetUnicodeRanges はその文字を範囲として返しません。

vtbl 12 HRESULT TryGetFontTable(DWORD openTypeTableTag, void** tableData, DWORD* tableSize, void** tableContext, BOOL* exists)

指定された OpenType フォントテーブルが存在する場合はそれを見つけ、そのポインタを返します。この関数は、フォントファイルローダーが実装する IDWriteFontFileStream インターフェースを通じて、基盤となるフォントデータにアクセスします。

openTypeTableTagDWORDin検索する OpenType フォントテーブルの4文字のタグ。 DWRITE_MAKE_OPENTYPE_TAG マクロを使用して UINT32 として作成します。 GDI とは異なり、フォント全体にアクセスするための特別な TTCF タグや null タグはサポートされません。
tableDatavoid**outこのメソッドが返るときに、メモリ内のテーブルの先頭へのポインタのアドレスを保持します。 このポインタは、フォントテーブルの取得に使用したフォントフェイスが存在する間のみ有効です。 (たとえ実際に同じ物理フォントを参照していても、他のフォントフェイスでは有効ではありません)。 このパラメータは初期化されずに渡されます。
tableSizeDWORD*outこのメソッドが返るときに、フォントテーブルのサイズ(バイト単位)へのポインタを保持します。
tableContextvoid**outこのメソッドが返るときに、不透明なコンテキストへのポインタのアドレスを保持します。このコンテキストは ReleaseFontTable を呼び出して解放する必要があります。 コンテキストは実際には下位レベルの IDWriteFontFileStream に由来し、 これはアプリケーションまたは DWrite 自身によって実装されている場合があります。 特に実装がファイル全体を直接メモリマッピングする場合など、 NULLtableContext が返されることもあります。 それでも後で必ず解放し、関数の成否の判定には使用しないでください。 同じテーブルは複数回クエリできますが、 返される各コンテキストは異なる可能性があるため、各コンテキストを個別に解放する必要があります。
existsBOOL*outこのメソッドが返るときに、フォントテーブルが存在する場合は TRUE、そうでない場合は FALSE になります。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。

解説(Remarks)

同じタグに対するコンテキストは呼び出しごとに異なる場合があるため、 それぞれを個別に保持し、解放する必要があります。

vtbl 13 void ReleaseFontTable(void* tableContext)

先に TryGetFontTable から取得したテーブルを解放します。

tableContextvoid*inTryGetFontTable から得られた不透明なコンテキストへのポインタ。
vtbl 14 HRESULT GetGlyphRunOutline(FLOAT emSize, WORD* glyphIndices, FLOAT* glyphAdvances, DWRITE_GLYPH_OFFSET* glyphOffsets, DWORD glyphCount, BOOL isSideways, BOOL isRightToLeft, ID2D1SimplifiedGeometrySink* geometrySink)

アウトラインシンクインターフェースへコールバックすることで、グリフのランのアウトラインを計算します。

emSizeFLOATinDIP 単位でのフォントの論理サイズ。DIP(「デバイス非依存ピクセル」)は 1/96 インチに相当します。
glyphIndicesWORD*inグリフインデックスの配列。グリフは論理順で並び、送り方向は isRightToLeft パラメータに依存します。配列は割り当て済みで、glyphCount で指定した数の要素を格納できる必要があります。
glyphAdvancesFLOAT*inoptionalDIP 単位でのグリフの送り幅の配列(省略可能)。グリフの送り幅とは、グリフを描画した後に(ベースラインの方向に)位置を進める量です。glyphAdvancesglyphCount で指定した数の要素を含みます。
glyphOffsetsDWRITE_GLYPH_OFFSET*inoptionalグリフオフセットの配列(省略可能)。各要素は、現在のペン位置に対するグリフの、ベースラインに沿ったオフセットとベースラインに垂直な方向のオフセットを指定します。 glyphOffsetsglyphCount で指定した数の要素を含みます。
glyphCountDWORDinランに含まれるグリフの数。
isSidewaysBOOLin

TRUE の場合、グリフのアセンダーはベースラインに沿って走ります。FALSE の場合、グリフのアセンダーはベースラインに垂直に走ります。たとえば、垂直なベースライン上の英語のアルファベットでは isSidewaysFALSE に設定されます。

クライアントは、isSidewaysTRUE に設定し、結果として得られるジオメトリを変換によって右に90度回転させることで、 縦書きのランをレンダリングできます。isSidewaysisRightToLeft のパラメータを両方とも true にすることはできません。

isRightToLeftBOOLinグリフの視覚的な順序。このパラメータが FALSE の場合、グリフの送りは左から右です。TRUE の場合、送り方向は右から左です。既定では送り方向は 左から右です。
geometrySinkID2D1SimplifiedGeometrySink*inアウトラインの描画操作を実行するためにコールバックされるインターフェースへのポインタ。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。

vtbl 15 HRESULT GetRecommendedRenderingMode(FLOAT emSize, FLOAT pixelsPerDip, DWRITE_MEASURING_MODE measuringMode, IDWriteRenderingParams* renderingParams, DWRITE_RENDERING_MODE* renderingMode)

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

emSizeFLOATinDIP 単位でのフォントの論理サイズ。DIP(「デバイス非依存ピクセル」)は 1/96 インチに相当します。
pixelsPerDipFLOATinDIP あたりの物理ピクセル数。たとえば、レンダリングサーフェスの DPI が 96 の場合、この 値は 1.0f です。DPI が 120 の場合、この値は 120.0f/96 です。
measuringModeDWRITE_MEASURING_MODEin

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

renderingParamsIDWriteRenderingParams*inガンマレベル、拡張コントラスト、ClearType レベルなどのレンダリング設定を含むオブジェクトへのポインタ。このパラメータは、レンダリングパラメータ オブジェクトがレンダリングモードをオーバーライドする場合に必要です。
renderingModeDWRITE_RENDERING_MODE*outこのメソッドが返るときに、使用が推奨されるレンダリングモードを示す値を保持します。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。

vtbl 16 HRESULT GetGdiCompatibleMetrics(FLOAT emSize, FLOAT pixelsPerDip, DWRITE_MATRIX* transform, DWRITE_FONT_METRICS* fontFaceMetrics)

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

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

戻り値

Type: HRESULT

標準の HRESULT エラーコード。

vtbl 17 HRESULT GetGdiCompatibleGlyphMetrics(FLOAT emSize, FLOAT pixelsPerDip, DWRITE_MATRIX* transform, BOOL useGdiNatural, WORD* glyphIndices, DWORD glyphCount, DWRITE_GLYPH_METRICS* glyphMetrics, BOOL isSideways)

GDI が生成する値と互換性のある戻り値で、フォントのデザイン単位でグリフメトリクスを取得します。

emSizeFLOATinDIP 単位でのフォントの論理サイズ。
pixelsPerDipFLOATinDIP あたりの物理ピクセル数。
transformDWRITE_MATRIX*inoptionalグリフとその位置に適用される変換(省略可能)。この変換は、フォントサイズと pixelsPerDip で指定された スケーリングの後に適用されます。
useGdiNaturalBOOLinFALSE に設定した場合、メトリクスは GDI のエイリアス表示テキストのメトリクスと同じになります。TRUE に設定した場合、メトリクスは CLEARTYPE_NATURAL_QUALITY で作成したフォントを使用して GDI が測定したテキストのメトリクスと同じになります。
glyphIndicesWORD*inメトリクスを計算する対象のグリフインデックスの配列。
glyphCountDWORDinglyphIndices 配列の要素数。
glyphMetricsDWRITE_GLYPH_METRICS*outこの関数によって設定される DWRITE_GLYPH_METRICS 構造体の配列。メトリクスはフォントのデザイン単位です。
isSidewaysBOOLinフォントが横倒し(sideways)のランで使用されているかどうかを示す BOOL 値。横倒しのオブリークシミュレーションは横倒しでない場合のオブリークシミュレーションと異なるため、フォントがオブリークシミュレーションを持つ場合、これがグリフメトリクスに影響することがあります。

戻り値

Type: HRESULT

標準の HRESULT エラーコード。入力されたグリフインデックスのいずれかが現在のフォントフェイスの有効なグリフインデックスの範囲外である場合、E_INVALIDARG が返されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IDWriteFontFace "{5F49804D-7024-4D43-BFA9-D25984F53849}"
#usecom global IDWriteFontFace IID_IDWriteFontFace "{}"
#comfunc global IDWriteFontFace_GetType                       3
#comfunc global IDWriteFontFace_GetFiles                      4 var,sptr
#comfunc global IDWriteFontFace_GetIndex                      5
#comfunc global IDWriteFontFace_GetSimulations                6
#comfunc global IDWriteFontFace_IsSymbolFont                  7
#comfunc global IDWriteFontFace_GetMetrics                    8 var
#comfunc global IDWriteFontFace_GetGlyphCount                 9
#comfunc global IDWriteFontFace_GetDesignGlyphMetrics         10 var,int,var,int
#comfunc global IDWriteFontFace_GetGlyphIndices               11 var,int,var
#comfunc global IDWriteFontFace_TryGetFontTable               12 int,sptr,var,sptr,var
#comfunc global IDWriteFontFace_ReleaseFontTable              13 sptr
#comfunc global IDWriteFontFace_GetGlyphRunOutline            14 float,var,var,var,int,int,int,sptr
#comfunc global IDWriteFontFace_GetRecommendedRenderingMode   15 float,float,int,sptr,var
#comfunc global IDWriteFontFace_GetGdiCompatibleMetrics       16 float,float,var,var
#comfunc global IDWriteFontFace_GetGdiCompatibleGlyphMetrics  17 float,float,var,int,var,int,var,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。