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