IDWriteTextRenderer1
COM公式ドキュメント
テキスト、インラインオブジェクト、および下線などの装飾のレンダリングを実行する、アプリケーション定義のコールバックのセットを表します。(IDWriteTextRenderer1)
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IDWriteTextLayout::Draw は、グリフのランをレンダリングするようクライアントに指示するためにこの関数を呼び出します。(IDWriteTextRenderer1.DrawGlyphRun)
| clientDrawingContext | void* | inoptional | IDWriteTextLayout::Draw に渡された、アプリケーション定義の描画コンテキストです。 |
| baselineOriginX | FLOAT | in | グリフランのベースライン原点のピクセル位置(X 座標)です。 |
| baselineOriginY | FLOAT | in | グリフランのベースライン原点のピクセル位置(Y 座標)です。 |
| orientationAngle | DWRITE_GLYPH_ORIENTATION_ANGLE | in | グリフランの向きです。 |
| measuringMode | DWRITE_MEASURING_MODE | in | ラン内のグリフの測定方法です。他のプロパティと組み合わせてレンダリングモードを決定するために使用されます。 |
| glyphRun | DWRITE_GLYPH_RUN* | in | レンダリングするグリフランインスタンスへのポインターです。 |
| glyphRunDescription | DWRITE_GLYPH_RUN_DESCRIPTION* | in | このランに関連付けられた文字のプロパティを含む、グリフラン記述インスタンスへのポインターです。 |
| clientDrawingEffect | IUnknown* | inoptional | レンダリングするグリフに対するアプリケーション定義の描画効果です。通常、この引数はテキストの内部を塗りつぶす前景ブラシなどの効果を表します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
IDWriteTextLayout::Draw 関数は、レンダリングするグリフに関するすべての情報を伴ってこのコールバック関数を呼び出します。アプリケーションは、多くの場合、この呼び出しを Direct2D などの基盤となるプラットフォームのグラフィックス API に委譲して描画コンテキスト上にグリフを描画することで、このコールバックを実装します。GDI を使用するアプリケーションは、IDWriteBitmapRenderTarget::DrawGlyphRun メソッドを用いてこのコールバックを実装できます。
IDWriteTextLayout::Draw は、下線を描画するようクライアントに指示するためにこの関数を呼び出します。(IDWriteTextRenderer1.DrawUnderline)
| clientDrawingContext | void* | inoptional | IDWriteTextLayout::Draw に渡された、アプリケーション定義の描画コンテキストです。 |
| baselineOriginX | FLOAT | in | 下線が適用されるランのベースライン原点のピクセル位置(X 座標)です。 |
| baselineOriginY | FLOAT | in | 下線が適用されるランのベースライン原点のピクセル位置(Y 座標)です。 |
| orientationAngle | DWRITE_GLYPH_ORIENTATION_ANGLE | in | 下線の向きです。 |
| underline | DWRITE_UNDERLINE* | in | 下線の論理情報を含む構造体へのポインターです。 |
| clientDrawingEffect | IUnknown* | inoptional | 下線に適用するアプリケーション定義の効果です。通常、この引数は線の内部を塗りつぶす前景ブラシなどの効果を表します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
1 本の下線は、書式設定による属性の変化に応じて複数の呼び出しに分割される場合があります。下線の途中でフォントサイズやスタイルが変化する場合、太さとオフセットは文字に応じて重み付け平均されます。適切な開始ピクセル位置を得るには、underline::offset をベースラインに加算してください。そうしないとテキストとの間に間隔が生じません。X 座標は、テキストの方向性にかかわらず常に左側として渡されます。これにより描画が簡素化され、隙間やアルファブレンドの二重適用を引き起こす可能性のある丸め誤差の問題が軽減されます。アルファの重なりを避けるには、端点を最も近いデバイスピクセルに丸めてください。
IDWriteTextLayout::Draw は、取り消し線を描画するようクライアントに指示するためにこの関数を呼び出します。(IDWriteTextRenderer1.DrawStrikethrough)
| clientDrawingContext | void* | inoptional | IDWriteTextLayout::Draw に渡された、アプリケーション定義の描画コンテキストです。 |
| baselineOriginX | FLOAT | in | 取り消し線が適用されるランのベースライン原点のピクセル位置(X 座標)です。 |
| baselineOriginY | FLOAT | in | 取り消し線が適用されるランのベースライン原点のピクセル位置(Y 座標)です。 |
| orientationAngle | DWRITE_GLYPH_ORIENTATION_ANGLE | in | 取り消し線の向きです。 |
| strikethrough | DWRITE_STRIKETHROUGH* | in | 取り消し線の論理情報を含む構造体へのポインターです。 |
| clientDrawingEffect | IUnknown* | inoptional | 取り消し線に適用するアプリケーション定義の効果です。通常、この引数は線の内部を塗りつぶす前景ブラシなどの効果を表します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
1 本の取り消し線は、書式設定による属性の変化に応じて複数の呼び出しに分割される場合があります。取り消し線はフォントサイズやスタイルの変化にわたって平均化されません。適切な開始ピクセル位置を得るには、strikethrough::offset をベースラインに加算してください。下線と同様に、X 座標はテキストの方向性にかかわらず常に左側として渡されます。
IDWriteTextLayout::Draw は、インラインオブジェクトを描画する必要があるときにこのアプリケーションコールバックを呼び出します。(IDWriteTextRenderer1.DrawInlineObject)
| clientDrawingContext | void* | inoptional | IDWriteTextLayout::Draw に渡された、アプリケーション定義の描画コンテキストです。 |
| originX | FLOAT | in | インラインオブジェクトの左上隅の X 座標です。 |
| originY | FLOAT | in | インラインオブジェクトの左上隅の Y 座標です。 |
| orientationAngle | DWRITE_GLYPH_ORIENTATION_ANGLE | in | インラインオブジェクトの向きです。 |
| inlineObject | IDWriteInlineObject* | in | IDWriteTextFormat::SetInlineObject を使用して設定された、アプリケーション定義のインラインオブジェクトです。 |
| isSideways | BOOL | in | オブジェクトのベースラインが行のベースライン軸に沿って走るかどうかを示すブール値フラグです。 |
| isRightToLeft | BOOL | in | オブジェクトが右から左のコンテキストにあるかどうかを示すブール値フラグで、描画時に通常の画像を反転させたい場合があることを示唆します。 |
| clientDrawingEffect | IUnknown* | inoptional | レンダリングするグリフに対するアプリケーション定義の描画効果です。通常、この引数は線の内部を塗りつぶす前景ブラシなどの効果を表します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDWriteTextRenderer1 "{D3E0E934-22A0-427E-AAE4-7D9574B59DB1}" #usecom global IDWriteTextRenderer1 IID_IDWriteTextRenderer1 "{}" #comfunc global IDWriteTextRenderer1_DrawGlyphRun 10 sptr,float,float,int,int,var,var,sptr #comfunc global IDWriteTextRenderer1_DrawUnderline 11 sptr,float,float,int,var,sptr #comfunc global IDWriteTextRenderer1_DrawStrikethrough 12 sptr,float,float,int,var,sptr #comfunc global IDWriteTextRenderer1_DrawInlineObject 13 sptr,float,float,int,sptr,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDWriteTextRenderer1 "{D3E0E934-22A0-427E-AAE4-7D9574B59DB1}" #usecom global IDWriteTextRenderer1 IID_IDWriteTextRenderer1 "{}" #comfunc global IDWriteTextRenderer1_DrawGlyphRun 10 sptr,float,float,int,int,sptr,sptr,sptr #comfunc global IDWriteTextRenderer1_DrawUnderline 11 sptr,float,float,int,sptr,sptr #comfunc global IDWriteTextRenderer1_DrawStrikethrough 12 sptr,float,float,int,sptr,sptr #comfunc global IDWriteTextRenderer1_DrawInlineObject 13 sptr,float,float,int,sptr,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。