Module: wine Branch: master Commit: bfb953894e96bf63badb2e7f73e412b64b743e7a URL: http://source.winehq.org/git/wine.git/?a=commit;h=bfb953894e96bf63badb2e7f73...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sun Feb 26 14:47:14 2017 +0300
d2d1: Support strikethrough in DrawText()/DrawTextLayout().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/d2d1/render_target.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/dlls/d2d1/render_target.c b/dlls/d2d1/render_target.c index cc705ee..c773fdf 100644 --- a/dlls/d2d1/render_target.c +++ b/dlls/d2d1/render_target.c @@ -1845,10 +1845,31 @@ static HRESULT STDMETHODCALLTYPE d2d_text_renderer_DrawUnderline(IDWriteTextRend static HRESULT STDMETHODCALLTYPE d2d_text_renderer_DrawStrikethrough(IDWriteTextRenderer *iface, void *ctx, float baseline_origin_x, float baseline_origin_y, const DWRITE_STRIKETHROUGH *strikethrough, IUnknown *effect) { - FIXME("iface %p, ctx %p, baseline_origin_x %.8e, baseline_origin_y %.8e, strikethrough %p, effect %p stub!\n", + struct d2d_d3d_render_target *render_target = impl_from_IDWriteTextRenderer(iface); + const D2D1_MATRIX_3X2_F *m = &render_target->drawing_state.transform; + struct d2d_draw_text_layout_ctx *context = ctx; + D2D1_POINT_2F start, end; + ID2D1Brush *brush; + float thickness; + + TRACE("iface %p, ctx %p, baseline_origin_x %.8e, baseline_origin_y %.8e, strikethrough %p, effect %p.\n", iface, ctx, baseline_origin_x, baseline_origin_y, strikethrough, effect);
- return E_NOTIMPL; + /* minimal thickness in DIPs that will result in at least 1 pixel thick line */ + thickness = max(96.0f / (render_target->desc.dpiY * sqrtf(m->_21 * m->_21 + m->_22 * m->_22)), + strikethrough->thickness); + + brush = d2d_draw_get_text_brush(context, effect); + + start.x = baseline_origin_x; + start.y = baseline_origin_y + strikethrough->offset + thickness / 2.0f; + end.x = start.x + strikethrough->width; + end.y = start.y; + d2d_d3d_render_target_DrawLine(&render_target->ID2D1RenderTarget_iface, start, end, brush, thickness, NULL); + + ID2D1Brush_Release(brush); + + return S_OK; }
static HRESULT STDMETHODCALLTYPE d2d_text_renderer_DrawInlineObject(IDWriteTextRenderer *iface, void *ctx,