IDWriteInlineObject
COM公式ドキュメント
アプリケーション定義のインライングラフィックをラップし、そのグラフィックがテキスト中のグリフであるかのように DWrite がメトリックを照会できるようにします。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アプリケーションが実装するレンダリングコールバック(IDWriteTextRenderer::DrawInlineObject)は、これを使用してオブジェクトの型をキャストしたり照会したりすることなくインラインオブジェクトを描画できます。テキストレイアウトがこのメソッドを直接呼び出すことはありません。
| clientDrawingContext | void* | inoptional | IDWriteTextLayout::Draw に渡される描画コンテキストです。このパラメーターは NULL の場合があります。 |
| renderer | IDWriteTextRenderer* | in | オブジェクトを含む親として IDWriteTextLayout::Draw に渡されたものと同じレンダラーです。これは、インラインオブジェクトが入れ子になったレイアウトのように再帰的である場合に役立ちます。 |
| originX | FLOAT | in | インラインオブジェクトの左上隅の x 座標です。 |
| originY | FLOAT | in | インラインオブジェクトの左上隅の y 座標です。 |
| isSideways | BOOL | in | オブジェクトのベースラインが行のベースライン軸に沿って走るかどうかを示すブール値フラグです。 |
| isRightToLeft | BOOL | in | オブジェクトが右から左へのコンテキスト内にあり、反転して描画すべきかどうかを示すブール値フラグです。 |
| clientDrawingEffect | IUnknown* | inoptional | IDWriteTextLayout::SetDrawingEffect で設定された描画効果です。通常この効果は、グリフの描画に使用される前景ブラシです。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
IDWriteTextLayout は、インラインオブジェクトの測定値を取得するためにこのコールバック関数を呼び出します。
| metrics | DWRITE_INLINE_OBJECT_METRICS* | out | このメソッドが返るとき、アプリケーション定義のインラインオブジェクトの幾何学的な測定値を記述する構造体が格納されます。これらのメトリックは、隣接するテキストのベースラインを基準としています。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
IDWriteTextLayout は、インラインオブジェクトの可視範囲(DIP 単位)を取得するためにこのコールバック関数を呼び出します。パディングもオーバーハングもない単純なビットマップの場合、すべてのオーバーハングは単純にゼロになります。
| overhangs | DWRITE_OVERHANG_METRICS* | out | オブジェクトの外側にはみ出す可視範囲(DIP 単位)のオーバーシュートです。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
レイアウトはこれを使用して、テキスト中のインラインオブジェクトの行分割動作を決定します。
| breakConditionBefore | DWRITE_BREAK_CONDITION* | out | このメソッドが返るとき、オブジェクトとその直前のコンテンツとの間の行分割条件を示す値が格納されます。 |
| breakConditionAfter | DWRITE_BREAK_CONDITION* | out | このメソッドが返るとき、オブジェクトとその直後のコンテンツとの間の行分割条件を示す値が格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDWriteInlineObject "{8339FDE3-106F-47AB-8373-1C6295EB10B3}" #usecom global IDWriteInlineObject IID_IDWriteInlineObject "{}" #comfunc global IDWriteInlineObject_Draw 3 sptr,sptr,float,float,int,int,sptr #comfunc global IDWriteInlineObject_GetMetrics 4 var #comfunc global IDWriteInlineObject_GetOverhangMetrics 5 var #comfunc global IDWriteInlineObject_GetBreakConditions 6 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDWriteInlineObject "{8339FDE3-106F-47AB-8373-1C6295EB10B3}" #usecom global IDWriteInlineObject IID_IDWriteInlineObject "{}" #comfunc global IDWriteInlineObject_Draw 3 sptr,sptr,float,float,int,int,sptr #comfunc global IDWriteInlineObject_GetMetrics 4 sptr #comfunc global IDWriteInlineObject_GetOverhangMetrics 5 sptr #comfunc global IDWriteInlineObject_GetBreakConditions 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。