From 2771fd9758b71b64a43773f22f09c5ec304cc751 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov <nsivov@codeweavers.com> Date: Sun, 24 Apr 2016 16:24:35 +0300 Subject: [PATCH] comctl32: Improve DrawShadowText(). Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org> --- dlls/comctl32/commctrl.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c index c12a214c58a..2a4cd42657a 100644 --- a/dlls/comctl32/commctrl.c +++ b/dlls/comctl32/commctrl.c @@ -1592,12 +1592,33 @@ LRESULT WINAPI SetPathWordBreakProc(HWND hwnd, BOOL bSet) * * Draw text with shadow. */ -int WINAPI DrawShadowText(HDC hdc, LPCWSTR pszText, UINT cch, RECT *rect, DWORD dwFlags, - COLORREF crText, COLORREF crShadow, int ixOffset, int iyOffset) +int WINAPI DrawShadowText(HDC hdc, LPCWSTR text, UINT length, RECT *rect, DWORD flags, + COLORREF crText, COLORREF crShadow, int offset_x, int offset_y) { - FIXME("(%p, %s, %d, %p, %d, 0x%08x, 0x%08x, %d, %d): stub\n", hdc, debugstr_w(pszText), cch, rect, dwFlags, - crText, crShadow, ixOffset, iyOffset); - return DrawTextW(hdc, pszText, cch, rect, DT_LEFT); + int bkmode, ret; + COLORREF clr; + RECT r; + + FIXME("(%p, %s, %d, %p, 0x%08x, 0x%08x, 0x%08x, %d, %d): semi-stub\n", hdc, debugstr_w(text), + length, rect, flags, crText, crShadow, offset_x, offset_y); + + bkmode = SetBkMode(hdc, TRANSPARENT); + clr = SetTextColor(hdc, crShadow); + + /* FIXME: for shadow we need to render normally, blur it, and blend with current background. */ + r = *rect; + OffsetRect(&r, 1, 1); + DrawTextW(hdc, text, length, &r, flags); + + SetTextColor(hdc, crText); + + /* with text color on top of a shadow */ + ret = DrawTextW(hdc, text, length, rect, flags); + + SetTextColor(hdc, clr); + SetBkMode(hdc, bkmode); + + return ret; } /***********************************************************************