[]
IDWriteTextLayout::Draw calls this function to instruct the client to draw an underline.
public virtual HResult DrawUnderline(object clientDrawingContext, float baselineOriginX, float baselineOriginY, ref Underline underline, IntPtr clientDrawingEffectPtr)
Public Overridable Function DrawUnderline(clientDrawingContext As Object, baselineOriginX As Single, baselineOriginY As Single, ByRef underline As Underline, clientDrawingEffectPtr As IntPtr) As HResult
| 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. |
| 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.