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