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

IDWriteTextRenderer1

COM
IIDd3e0e934-22a0-427e-aae4-7d9574b59db1継承元IDWriteTextRenderer自前メソッド開始 vtbl10

公式ドキュメント

テキスト、インラインオブジェクト、および下線などの装飾のレンダリングを実行する、アプリケーション定義のコールバックのセットを表します。(IDWriteTextRenderer1)

メソッド 4

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

vtbl 10 HRESULT DrawGlyphRun(void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_GLYPH_ORIENTATION_ANGLE orientationAngle, DWRITE_MEASURING_MODE measuringMode, DWRITE_GLYPH_RUN* glyphRun, DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription, IUnknown* clientDrawingEffect)

IDWriteTextLayout::Draw は、グリフのランをレンダリングするようクライアントに指示するためにこの関数を呼び出します。(IDWriteTextRenderer1.DrawGlyphRun)

clientDrawingContextvoid*inoptionalIDWriteTextLayout::Draw に渡された、アプリケーション定義の描画コンテキストです。
baselineOriginXFLOATinグリフランのベースライン原点のピクセル位置(X 座標)です。
baselineOriginYFLOATinグリフランのベースライン原点のピクセル位置(Y 座標)です。
orientationAngleDWRITE_GLYPH_ORIENTATION_ANGLEinグリフランの向きです。
measuringModeDWRITE_MEASURING_MODEinラン内のグリフの測定方法です。他のプロパティと組み合わせてレンダリングモードを決定するために使用されます。
glyphRunDWRITE_GLYPH_RUN*inレンダリングするグリフランインスタンスへのポインターです。
glyphRunDescriptionDWRITE_GLYPH_RUN_DESCRIPTION*inこのランに関連付けられた文字のプロパティを含む、グリフラン記述インスタンスへのポインターです。
clientDrawingEffectIUnknown*inoptionalレンダリングするグリフに対するアプリケーション定義の描画効果です。通常、この引数はテキストの内部を塗りつぶす前景ブラシなどの効果を表します。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

IDWriteTextLayout::Draw 関数は、レンダリングするグリフに関するすべての情報を伴ってこのコールバック関数を呼び出します。アプリケーションは、多くの場合、この呼び出しを Direct2D などの基盤となるプラットフォームのグラフィックス API に委譲して描画コンテキスト上にグリフを描画することで、このコールバックを実装します。GDI を使用するアプリケーションは、IDWriteBitmapRenderTarget::DrawGlyphRun メソッドを用いてこのコールバックを実装できます。

vtbl 11 HRESULT DrawUnderline(void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_GLYPH_ORIENTATION_ANGLE orientationAngle, DWRITE_UNDERLINE* underline, IUnknown* clientDrawingEffect)

IDWriteTextLayout::Draw は、下線を描画するようクライアントに指示するためにこの関数を呼び出します。(IDWriteTextRenderer1.DrawUnderline)

clientDrawingContextvoid*inoptionalIDWriteTextLayout::Draw に渡された、アプリケーション定義の描画コンテキストです。
baselineOriginXFLOATin下線が適用されるランのベースライン原点のピクセル位置(X 座標)です。
baselineOriginYFLOATin下線が適用されるランのベースライン原点のピクセル位置(Y 座標)です。
orientationAngleDWRITE_GLYPH_ORIENTATION_ANGLEin下線の向きです。
underlineDWRITE_UNDERLINE*in下線の論理情報を含む構造体へのポインターです。
clientDrawingEffectIUnknown*inoptional下線に適用するアプリケーション定義の効果です。通常、この引数は線の内部を塗りつぶす前景ブラシなどの効果を表します。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

1 本の下線は、書式設定による属性の変化に応じて複数の呼び出しに分割される場合があります。下線の途中でフォントサイズやスタイルが変化する場合、太さとオフセットは文字に応じて重み付け平均されます。適切な開始ピクセル位置を得るには、underline::offset をベースラインに加算してください。そうしないとテキストとの間に間隔が生じません。X 座標は、テキストの方向性にかかわらず常に左側として渡されます。これにより描画が簡素化され、隙間やアルファブレンドの二重適用を引き起こす可能性のある丸め誤差の問題が軽減されます。アルファの重なりを避けるには、端点を最も近いデバイスピクセルに丸めてください。

vtbl 12 HRESULT DrawStrikethrough(void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_GLYPH_ORIENTATION_ANGLE orientationAngle, DWRITE_STRIKETHROUGH* strikethrough, IUnknown* clientDrawingEffect)

IDWriteTextLayout::Draw は、取り消し線を描画するようクライアントに指示するためにこの関数を呼び出します。(IDWriteTextRenderer1.DrawStrikethrough)

clientDrawingContextvoid*inoptionalIDWriteTextLayout::Draw に渡された、アプリケーション定義の描画コンテキストです。
baselineOriginXFLOATin取り消し線が適用されるランのベースライン原点のピクセル位置(X 座標)です。
baselineOriginYFLOATin取り消し線が適用されるランのベースライン原点のピクセル位置(Y 座標)です。
orientationAngleDWRITE_GLYPH_ORIENTATION_ANGLEin取り消し線の向きです。
strikethroughDWRITE_STRIKETHROUGH*in取り消し線の論理情報を含む構造体へのポインターです。
clientDrawingEffectIUnknown*inoptional取り消し線に適用するアプリケーション定義の効果です。通常、この引数は線の内部を塗りつぶす前景ブラシなどの効果を表します。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

1 本の取り消し線は、書式設定による属性の変化に応じて複数の呼び出しに分割される場合があります。取り消し線はフォントサイズやスタイルの変化にわたって平均化されません。適切な開始ピクセル位置を得るには、strikethrough::offset をベースラインに加算してください。下線と同様に、X 座標はテキストの方向性にかかわらず常に左側として渡されます。

vtbl 13 HRESULT DrawInlineObject(void* clientDrawingContext, FLOAT originX, FLOAT originY, DWRITE_GLYPH_ORIENTATION_ANGLE orientationAngle, IDWriteInlineObject* inlineObject, BOOL isSideways, BOOL isRightToLeft, IUnknown* clientDrawingEffect)

IDWriteTextLayout::Draw は、インラインオブジェクトを描画する必要があるときにこのアプリケーションコールバックを呼び出します。(IDWriteTextRenderer1.DrawInlineObject)

clientDrawingContextvoid*inoptionalIDWriteTextLayout::Draw に渡された、アプリケーション定義の描画コンテキストです。
originXFLOATinインラインオブジェクトの左上隅の X 座標です。
originYFLOATinインラインオブジェクトの左上隅の Y 座標です。
orientationAngleDWRITE_GLYPH_ORIENTATION_ANGLEinインラインオブジェクトの向きです。
inlineObjectIDWriteInlineObject*inIDWriteTextFormat::SetInlineObject を使用して設定された、アプリケーション定義のインラインオブジェクトです。
isSidewaysBOOLinオブジェクトのベースラインが行のベースライン軸に沿って走るかどうかを示すブール値フラグです。
isRightToLeftBOOLinオブジェクトが右から左のコンテキストにあるかどうかを示すブール値フラグで、描画時に通常の画像を反転させたい場合があることを示唆します。
clientDrawingEffectIUnknown*inoptionalレンダリングするグリフに対するアプリケーション定義の描画効果です。通常、この引数は線の内部を塗りつぶす前景ブラシなどの効果を表します。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。