IDWriteFontFace
COM公式ドキュメント
このインターフェースは、メトリクス、名前、グリフのアウトラインなど、さまざまなフォントデータを公開します。フォントフェイスの種類、適切なファイル参照、およびフェイスの識別データを保持します。
メソッド 15
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
フォントフェイスのファイル形式の種類を取得します。
戻り値
Type: DWRITE_FONT_FACE_TYPE
フォントフェイスの形式の種類(Type 1、TrueType、ベクター、ビットマップなど)を示す値。
フォントフェイスを表すフォントファイルを取得します。
| numberOfFiles | DWORD* | inout | fontFiles が NULL の場合、フォントフェイスを表すファイルの数を受け取ります。そうでない場合は、要求するフォントファイルの数を渡す必要があります。詳細は下記の「解説」を参照してください。 |
| fontFiles | IDWriteFontFile** | outoptional | このメソッドが返るときに、フォントフェイスを表すフォントファイルへのポインタを格納する、ユーザー提供の配列へのポインタを保持します。 フォントフェイスを表すファイルの数のみを取得したい場合、このパラメータは NULL にできます。 この API は、COM の規約に従って返されたフォントファイルポインタの参照カウントをインクリメントするため、クライアントは 使用が終わったらそれらを解放する必要があります。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。
解説(Remarks)
IDWriteFontFace::GetFiles メソッドは2回呼び出す必要があります。1回目の GetFiles 呼び出しでは fontFiles を NULL にします。メソッドが返ると、numberOfFiles がフォントフェイスを表すフォントファイルの数を受け取ります。
その後、1回目の呼び出しで出力された numberOfFiles の値と、IDWriteFontFile ポインタを格納する適切なサイズの非NULLバッファを渡して、メソッドを2回目に呼び出します。
フォントファイルのコンテキストにおけるフォントフェイスのインデックスを取得します。
戻り値
Type: UINT32
フォントファイルがフォントフェイスのコレクションを含む場合の、フォントフェイスの0から始まるインデックス。 フォントファイルが単一のフェイスを含む場合、この値は0です。
フォントフェイスのアルゴリズムによるスタイルシミュレーションフラグを取得します。(IDWriteFontFace.GetSimulations)
戻り値
Type: DWRITE_FONT_SIMULATIONS
テキストをアルゴリズム的に太字または斜体にするための、フォントフェイスのシミュレーションフラグ。
フォントがシンボルフォントかどうかを判定します。(IDWriteFontFace.IsSymbolFont)
戻り値
Type: BOOL
フォントがシンボルフォントの場合は TRUE、そうでない場合は FALSE を返します。
フォントフェイスのデザイン単位と共通のメトリクスを取得します。これらのメトリクスはフォントフェイス内のすべてのグリフに適用され、アプリケーションのレイアウト計算に使用されます。(IDWriteFontFace.GetMetrics)
| fontFaceMetrics | DWRITE_FONT_METRICS* | out | このメソッドが返るときに、現在のフォントフェイス要素のメトリクス(アセント、ディセント、キャップハイトなど)を保持する DWRITE_FONT_METRICS 構造体。 この関数が返すメトリクスはフォントのデザイン単位です。 |
フォントフェイス内のグリフの数を取得します。
戻り値
Type: UINT16
フォントフェイス内のグリフの数。
フォントのデザイン単位で、理想的な(解像度に依存しない)グリフメトリクスを取得します。
| glyphIndices | WORD* | in | メトリクスを計算する対象のグリフインデックスの配列。配列には glyphCount で指定した数以上の要素を含める必要があります。 |
| glyphCount | DWORD | in | glyphIndices 配列の要素数。 |
| glyphMetrics | DWRITE_GLYPH_METRICS* | out | このメソッドが返るときに、DWRITE_GLYPH_METRICS 構造体の配列を保持します。glyphMetrics は、glyphCount と同じ数以上の要素を含む空のバッファで初期化する必要があります。 この関数が返すメトリクスはフォントのデザイン単位です。 |
| isSideways | BOOL | in | フォントが横倒し(sideways)のランで使用されているかどうかを示します。横倒しのオブリークシミュレーションは横倒しでない場合のオブリークシミュレーションと異なるため、 フォントがオブリークシミュレーションを持つ場合、これがグリフメトリクスに影響することがあります。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。
解説(Remarks)
デザイングリフメトリクスはグリフの配置に使用されます。
フォントの 'CMAP' テーブルで定義されている、UCS4 Unicode コードポイントからグリフインデックスへの名目上のマッピングを返します。
| codePoints | DWORD* | in | 名目上のグリフインデックスを取得する対象の USC4 コードポイントの配列。配列は割り当て済みで、codePointCount で指定した数の要素を格納できる必要があります。 |
| codePointCount | DWORD | in | codePoints 配列の要素数。 |
| glyphIndices | WORD* | out | このメソッドが返るときに、この関数によって設定された名目上のグリフインデックスの配列へのポインタを保持します。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。
解説(Remarks)
このマッピングは主に、物理フォント API 上に構築された行レイアウトエンジンのために提供されている点に注意してください。 OpenType のグリフ置換や行レイアウトの文字置換のため、名目上の変換は、特定のフォントフェイスを使用してレンダリングする際に Unicode 文字列がグリフインデックスへどのようにマッピングされるかと必ずしも一致しません。 また、Unicode バリアントセレクタは、文字からグリフへの代替マッピングを提供する点にも注意してください。 この呼び出しは常に既定のバリアントを返します。
フォントに文字が存在しない場合、このメソッドはインデックス 0 を返します。これは未定義のグリフ、すなわち ".notdef" グリフです。文字がフォントに含まれない場合、IDWriteFont::HasCharacter は false を返し、GetUnicodeRanges はその文字を範囲として返しません。
指定された OpenType フォントテーブルが存在する場合はそれを見つけ、そのポインタを返します。この関数は、フォントファイルローダーが実装する IDWriteFontFileStream インターフェースを通じて、基盤となるフォントデータにアクセスします。
| openTypeTableTag | DWORD | in | 検索する OpenType フォントテーブルの4文字のタグ。 DWRITE_MAKE_OPENTYPE_TAG マクロを使用して UINT32 として作成します。 GDI とは異なり、フォント全体にアクセスするための特別な TTCF タグや null タグはサポートされません。 |
| tableData | void** | out | このメソッドが返るときに、メモリ内のテーブルの先頭へのポインタのアドレスを保持します。 このポインタは、フォントテーブルの取得に使用したフォントフェイスが存在する間のみ有効です。 (たとえ実際に同じ物理フォントを参照していても、他のフォントフェイスでは有効ではありません)。 このパラメータは初期化されずに渡されます。 |
| tableSize | DWORD* | out | このメソッドが返るときに、フォントテーブルのサイズ(バイト単位)へのポインタを保持します。 |
| tableContext | void** | out | このメソッドが返るときに、不透明なコンテキストへのポインタのアドレスを保持します。このコンテキストは ReleaseFontTable を呼び出して解放する必要があります。 コンテキストは実際には下位レベルの IDWriteFontFileStream に由来し、 これはアプリケーションまたは DWrite 自身によって実装されている場合があります。 特に実装がファイル全体を直接メモリマッピングする場合など、 NULL の tableContext が返されることもあります。 それでも後で必ず解放し、関数の成否の判定には使用しないでください。 同じテーブルは複数回クエリできますが、 返される各コンテキストは異なる可能性があるため、各コンテキストを個別に解放する必要があります。 |
| exists | BOOL* | out | このメソッドが返るときに、フォントテーブルが存在する場合は TRUE、そうでない場合は FALSE になります。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。
解説(Remarks)
同じタグに対するコンテキストは呼び出しごとに異なる場合があるため、 それぞれを個別に保持し、解放する必要があります。
先に TryGetFontTable から取得したテーブルを解放します。
| tableContext | void* | in | TryGetFontTable から得られた不透明なコンテキストへのポインタ。 |
アウトラインシンクインターフェースへコールバックすることで、グリフのランのアウトラインを計算します。
| emSize | FLOAT | in | DIP 単位でのフォントの論理サイズ。DIP(「デバイス非依存ピクセル」)は 1/96 インチに相当します。 |
| glyphIndices | WORD* | in | グリフインデックスの配列。グリフは論理順で並び、送り方向は isRightToLeft パラメータに依存します。配列は割り当て済みで、glyphCount で指定した数の要素を格納できる必要があります。 |
| glyphAdvances | FLOAT* | inoptional | DIP 単位でのグリフの送り幅の配列(省略可能)。グリフの送り幅とは、グリフを描画した後に(ベースラインの方向に)位置を進める量です。glyphAdvances は glyphCount で指定した数の要素を含みます。 |
| glyphOffsets | DWRITE_GLYPH_OFFSET* | inoptional | グリフオフセットの配列(省略可能)。各要素は、現在のペン位置に対するグリフの、ベースラインに沿ったオフセットとベースラインに垂直な方向のオフセットを指定します。 glyphOffsets は glyphCount で指定した数の要素を含みます。 |
| glyphCount | DWORD | in | ランに含まれるグリフの数。 |
| isSideways | BOOL | in | TRUE の場合、グリフのアセンダーはベースラインに沿って走ります。FALSE の場合、グリフのアセンダーはベースラインに垂直に走ります。たとえば、垂直なベースライン上の英語のアルファベットでは isSideways は FALSE に設定されます。 クライアントは、isSideways を TRUE に設定し、結果として得られるジオメトリを変換によって右に90度回転させることで、 縦書きのランをレンダリングできます。isSideways と isRightToLeft のパラメータを両方とも true にすることはできません。 |
| isRightToLeft | BOOL | in | グリフの視覚的な順序。このパラメータが FALSE の場合、グリフの送りは左から右です。TRUE の場合、送り方向は右から左です。既定では送り方向は 左から右です。 |
| geometrySink | ID2D1SimplifiedGeometrySink* | in | アウトラインの描画操作を実行するためにコールバックされるインターフェースへのポインタ。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。
指定されたサイズとレンダリングパラメータを使用して、フォントに推奨されるレンダリングモードを判定します。(IDWriteFontFace.GetRecommendedRenderingMode)
| emSize | FLOAT | in | DIP 単位でのフォントの論理サイズ。DIP(「デバイス非依存ピクセル」)は 1/96 インチに相当します。 |
| pixelsPerDip | FLOAT | in | DIP あたりの物理ピクセル数。たとえば、レンダリングサーフェスの DPI が 96 の場合、この 値は 1.0f です。DPI が 120 の場合、この値は 120.0f/96 です。 |
| measuringMode | DWRITE_MEASURING_MODE | in | フォント内のグリフに使用される測定方法。 レンダラーの実装は、測定方法ごとに異なるレンダリングモードを選択する場合があります。たとえば次のとおりです。 |
| renderingParams | IDWriteRenderingParams* | in | ガンマレベル、拡張コントラスト、ClearType レベルなどのレンダリング設定を含むオブジェクトへのポインタ。このパラメータは、レンダリングパラメータ オブジェクトがレンダリングモードをオーバーライドする場合に必要です。 |
| renderingMode | DWRITE_RENDERING_MODE* | out | このメソッドが返るときに、使用が推奨されるレンダリングモードを示す値を保持します。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。そうでない場合は HRESULT エラーコードを返します。
フォントフェイスのデザイン単位と共通のメトリクスを取得します。これらのメトリクスはフォントフェイス内のすべてのグリフに適用され、アプリケーションのレイアウト計算に使用されます。(IDWriteFontFace.GetGdiCompatibleMetrics)
| emSize | FLOAT | in | DIP 単位でのフォントの論理サイズ。 |
| pixelsPerDip | FLOAT | in | DIP あたりの物理ピクセル数。 |
| transform | DWRITE_MATRIX* | inoptional | グリフとその位置に適用される変換(省略可能)。この変換は、フォントサイズと pixelsPerDip で指定されたスケーリングの後に適用されます。 |
| fontFaceMetrics | DWRITE_FONT_METRICS* | out | 埋めるための DWRITE_FONT_METRICS 構造体へのポインタ。この関数が返すメトリクスはフォントのデザイン単位です。 |
戻り値
Type: HRESULT
標準の HRESULT エラーコード。
GDI が生成する値と互換性のある戻り値で、フォントのデザイン単位でグリフメトリクスを取得します。
| emSize | FLOAT | in | DIP 単位でのフォントの論理サイズ。 |
| pixelsPerDip | FLOAT | in | DIP あたりの物理ピクセル数。 |
| transform | DWRITE_MATRIX* | inoptional | グリフとその位置に適用される変換(省略可能)。この変換は、フォントサイズと pixelsPerDip で指定された スケーリングの後に適用されます。 |
| useGdiNatural | BOOL | in | FALSE に設定した場合、メトリクスは GDI のエイリアス表示テキストのメトリクスと同じになります。TRUE に設定した場合、メトリクスは CLEARTYPE_NATURAL_QUALITY で作成したフォントを使用して GDI が測定したテキストのメトリクスと同じになります。 |
| glyphIndices | WORD* | in | メトリクスを計算する対象のグリフインデックスの配列。 |
| glyphCount | DWORD | in | glyphIndices 配列の要素数。 |
| glyphMetrics | DWRITE_GLYPH_METRICS* | out | この関数によって設定される DWRITE_GLYPH_METRICS 構造体の配列。メトリクスはフォントのデザイン単位です。 |
| isSideways | BOOL | in | フォントが横倒し(sideways)のランで使用されているかどうかを示す BOOL 値。横倒しのオブリークシミュレーションは横倒しでない場合のオブリークシミュレーションと異なるため、フォントがオブリークシミュレーションを持つ場合、これがグリフメトリクスに影響することがあります。 |
戻り値
Type: HRESULT
標準の HRESULT エラーコード。入力されたグリフインデックスのいずれかが現在のフォントフェイスの有効なグリフインデックスの範囲外である場合、E_INVALIDARG が返されます。
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 指定が可能。#define global IID_IDWriteFontFace "{5F49804D-7024-4D43-BFA9-D25984F53849}" #usecom global IDWriteFontFace IID_IDWriteFontFace "{}" #comfunc global IDWriteFontFace_GetType 3 #comfunc global IDWriteFontFace_GetFiles 4 sptr,sptr #comfunc global IDWriteFontFace_GetIndex 5 #comfunc global IDWriteFontFace_GetSimulations 6 #comfunc global IDWriteFontFace_IsSymbolFont 7 #comfunc global IDWriteFontFace_GetMetrics 8 sptr #comfunc global IDWriteFontFace_GetGlyphCount 9 #comfunc global IDWriteFontFace_GetDesignGlyphMetrics 10 sptr,int,sptr,int #comfunc global IDWriteFontFace_GetGlyphIndices 11 sptr,int,sptr #comfunc global IDWriteFontFace_TryGetFontTable 12 int,sptr,sptr,sptr,sptr #comfunc global IDWriteFontFace_ReleaseFontTable 13 sptr #comfunc global IDWriteFontFace_GetGlyphRunOutline 14 float,sptr,sptr,sptr,int,int,int,sptr #comfunc global IDWriteFontFace_GetRecommendedRenderingMode 15 float,float,int,sptr,sptr #comfunc global IDWriteFontFace_GetGdiCompatibleMetrics 16 float,float,sptr,sptr #comfunc global IDWriteFontFace_GetGdiCompatibleGlyphMetrics 17 float,float,sptr,int,sptr,int,sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。