From: Mark Harmstone Subject: [PATCH] uxtheme: support shadows in DrawThemeText Message-Id: <54E79CB1.1000802@burntcomma.com> Date: Fri, 20 Feb 2015 20:44:33 +0000 --- dlls/uxtheme/draw.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/dlls/uxtheme/draw.c b/dlls/uxtheme/draw.c index 24749ef..1e15d3b 100644 --- a/dlls/uxtheme/draw.c +++ b/dlls/uxtheme/draw.c @@ -1612,6 +1612,7 @@ HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, COLORREF oldTextColor; int oldBkMode; RECT rt; + POINT shadowoffset; TRACE("%d %d: stub\n", iPartId, iStateId); if(!hTheme) @@ -1633,8 +1634,27 @@ HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, if(FAILED(GetThemeColor(hTheme, iPartId, iStateId, TMT_TEXTCOLOR, &textColor))) textColor = GetTextColor(hdc); } - oldTextColor = SetTextColor(hdc, textColor); oldBkMode = SetBkMode(hdc, TRANSPARENT); + + if (SUCCEEDED(GetThemePosition(hTheme, iPartId, iStateId, TMT_TEXTSHADOWOFFSET, &shadowoffset)) && (shadowoffset.x != 0 || shadowoffset.y != 0)) { + RECT shadowrt = rt; + COLORREF shadowColor; + + shadowrt.left += shadowoffset.x; + shadowrt.top += shadowoffset.y; + + if (FAILED(GetThemeColor(hTheme, iPartId, iStateId, TMT_TEXTSHADOWCOLOR, &shadowColor))) + shadowColor = textColor; + + oldTextColor = SetTextColor(hdc, shadowColor); + + DrawTextW(hdc, pszText, iCharCount, &shadowrt, dwTextFlags); + + SetTextColor(hdc, textColor); + } else { + oldTextColor = SetTextColor(hdc, textColor); + } + DrawTextW(hdc, pszText, iCharCount, &rt, dwTextFlags); SetBkMode(hdc, oldBkMode); SetTextColor(hdc, oldTextColor);