Mark Harmstone : comctl32: Use theming when drawing IP address control.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Feb 16 10:01:20 CST 2015
Module: wine
Branch: master
Commit: 6f9724d581b0b09b66a829346cf67eb5dfb7efe9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6f9724d581b0b09b66a829346cf67eb5dfb7efe9
Author: Mark Harmstone <hellas at 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;
}
More information about the wine-cvs
mailing list