[]
IDWriteTextLayout::Draw calls this function to instruct the client to draw an underline.
public override HResult DrawUnderline(object clientDrawingContext, float baselineOriginX, float baselineOriginY, ref Underline underline, IntPtr clientDrawingEffectPtr)
| Type | Name | Description |
|---|---|---|
| object | clientDrawingContext | |
| float | baselineOriginX | |
| float | baselineOriginY | |
| Underline | underline | |
| IntPtr | clientDrawingEffectPtr |
| Type | Description |
|---|---|
| HResult |
IDWriteTextLayout::Draw calls this function to instruct the client to draw an underline.
public virtual HResult DrawUnderline(object clientDrawingContext, float baselineOriginX, float baselineOriginY, GlyphOrientationAngle orientationAngle, ref Underline underline, IntPtr clientDrawingEffectPtr)
| Type | Name | Description |
|---|---|---|
| object | clientDrawingContext | The application-defined drawing context passed to IDWriteTextLayout::Draw. |
| float | baselineOriginX | The pixel location (X-coordinate) at the baseline origin of the run where underline applies. |
| float | baselineOriginY | The pixel location (Y-coordinate) at the baseline origin of the run where underline applies. |
| GlyphOrientationAngle | orientationAngle | Orientation of the underline. |
| Underline | underline | Pointer to a structure containing underline logical information. |
| IntPtr | clientDrawingEffectPtr | Application-defined effect to apply to the underline. Usually this argument represents effects such as the foreground brush filling the interior of a line. |
| Type | Description |
|---|---|
| HResult | If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. |
A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel.