Nikolay Sivov : d2d1: Support strikethrough in DrawText()/DrawTextLayout() .
Alexandre Julliard
julliard at winehq.org
Mon Feb 27 15:12:08 CST 2017
Module: wine
Branch: master
Commit: bfb953894e96bf63badb2e7f73e412b64b743e7a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bfb953894e96bf63badb2e7f73e412b64b743e7a
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun Feb 26 14:47:14 2017 +0300
d2d1: Support strikethrough in DrawText()/DrawTextLayout().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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,
More information about the wine-cvs
mailing list