Module: wine Branch: master Commit: 6f9724d581b0b09b66a829346cf67eb5dfb7efe9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6f9724d581b0b09b66a829346c...
Author: Mark Harmstone hellas@burntcomma.com Date: Thu Feb 12 23:29:03 2015 +0000
comctl32: Use theming when drawing IP address control.
---
dlls/comctl32/ipaddress.c | 57 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 13 deletions(-)
diff --git a/dlls/comctl32/ipaddress.c b/dlls/comctl32/ipaddress.c index 97b6a0f..98e7259 100644 --- a/dlls/comctl32/ipaddress.c +++ b/dlls/comctl32/ipaddress.c @@ -45,6 +45,9 @@ #include "winnls.h" #include "commctrl.h" #include "comctl32.h" +#include "uxtheme.h" +#include "vsstyle.h" +#include "vssym32.h" #include "wine/unicode.h" #include "wine/debug.h"
@@ -150,36 +153,64 @@ static LRESULT IPADDRESS_Draw (const IPADDRESS_INFO *infoPtr, HDC hdc) static const WCHAR dotW[] = { '.', 0 }; RECT rect, rcPart; COLORREF bgCol, fgCol; - int i; + HTHEME theme; + int i, state = ETS_NORMAL;
TRACE("\n");
GetClientRect (infoPtr->Self, &rect);
- if (infoPtr->Enabled) { - bgCol = comctl32_color.clrWindow; - fgCol = comctl32_color.clrWindowText; + theme = OpenThemeData(infoPtr->Self, WC_EDITW); + + if (theme) { + DWORD dwStyle = GetWindowLongW (infoPtr->Self, GWL_STYLE); + + if (!infoPtr->Enabled) + state = ETS_DISABLED; + else if (dwStyle & ES_READONLY) + state = ETS_READONLY; + else if (GetFocus() == infoPtr->Self) + state = ETS_FOCUSED; + + GetThemeColor(theme, EP_EDITTEXT, state, TMT_FILLCOLOR, &bgCol); + GetThemeColor(theme, EP_EDITTEXT, state, TMT_TEXTCOLOR, &fgCol); + + if (IsThemeBackgroundPartiallyTransparent (theme, EP_EDITTEXT, state)) + DrawThemeParentBackground(infoPtr->Self, hdc, &rect); + DrawThemeBackground (theme, hdc, EP_EDITTEXT, state, &rect, 0); } else { - bgCol = comctl32_color.clr3dFace; - fgCol = comctl32_color.clrGrayText; + if (infoPtr->Enabled) { + bgCol = comctl32_color.clrWindow; + fgCol = comctl32_color.clrWindowText; + } else { + bgCol = comctl32_color.clr3dFace; + fgCol = comctl32_color.clrGrayText; + } + + FillRect (hdc, &rect, (HBRUSH)(DWORD_PTR)(bgCol+1)); + DrawEdge (hdc, &rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST); }
- FillRect (hdc, &rect, (HBRUSH)(DWORD_PTR)(bgCol+1)); - DrawEdge (hdc, &rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST); - SetBkColor (hdc, bgCol); SetTextColor(hdc, fgCol);
for (i = 0; i < 3; i++) { GetWindowRect (infoPtr->Part[i].EditHwnd, &rcPart); MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 ); - rect.left = rcPart.right; - GetWindowRect (infoPtr->Part[i+1].EditHwnd, &rcPart); + rect.left = rcPart.right; + GetWindowRect (infoPtr->Part[i+1].EditHwnd, &rcPart); MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 ); - rect.right = rcPart.left; - DrawTextW(hdc, dotW, 1, &rect, DT_SINGLELINE | DT_CENTER | DT_BOTTOM); + rect.right = rcPart.left; + + if (theme) + DrawThemeText(theme, hdc, EP_EDITTEXT, state, dotW, 1, DT_SINGLELINE | DT_CENTER | DT_BOTTOM, 0, &rect); + else + DrawTextW(hdc, dotW, 1, &rect, DT_SINGLELINE | DT_CENTER | DT_BOTTOM); }
+ if (theme) + CloseThemeData(theme); + return 0; }