[PATCH 2/5] Fix default colors set on creation

Nikolay Sivov bunglehead at gmail.com
Fri Dec 11 13:57:27 CST 2009


---
 dlls/comctl32/tests/treeview.c |   36 +++++++++++++++++++++++++++++++++---
 dlls/comctl32/treeview.c       |   37 +++++++++++++++++--------------------
 2 files changed, 50 insertions(+), 23 deletions(-)

diff --git a/dlls/comctl32/tests/treeview.c b/dlls/comctl32/tests/treeview.c
index be89b8f..f99da88 100644
--- a/dlls/comctl32/tests/treeview.c
+++ b/dlls/comctl32/tests/treeview.c
@@ -160,9 +160,9 @@ static const struct message test_get_set_textcolor_seq[] = {
     { TVM_GETTEXTCOLOR, sent|wparam|lparam, 0, 0 },
     { TVM_SETTEXTCOLOR, sent|wparam|lparam, 0, 0 },
     { TVM_GETTEXTCOLOR, sent|wparam|lparam, 0, 0 },
-    { TVM_SETTEXTCOLOR, sent|wparam|lparam, 0, 0x00ffffff },
+    { TVM_SETTEXTCOLOR, sent|wparam|lparam, 0, RGB(255, 255, 255) },
     { TVM_GETTEXTCOLOR, sent|wparam|lparam, 0, 0 },
-    { TVM_SETTEXTCOLOR, sent|wparam|lparam, 0, -1 },
+    { TVM_SETTEXTCOLOR, sent|wparam|lparam, 0, CLR_NONE },
     { 0 }
 };
 
@@ -728,7 +728,7 @@ static void test_get_set_textcolor(void)
     ok(crColor == RGB(255,255,255), "White text color reported as 0x%.8x\n", crColor);
 
     /* Reset the default text color */
-    SendMessage( hTree, TVM_SETTEXTCOLOR, 0, -1 );
+    SendMessage( hTree, TVM_SETTEXTCOLOR, 0, CLR_NONE );
 
     ok_sequence(MsgSequences, TREEVIEW_SEQ_INDEX, test_get_set_textcolor_seq,
         "test get set text color", FALSE);
@@ -990,6 +990,34 @@ static void test_treeview_classinfo(void)
     expect(0, cls.cbClsExtra);
 }
 
+static void test_get_linecolor(void)
+{
+    COLORREF clr;
+    HWND hTree;
+
+    hTree = create_treeview_control();
+
+    /* newly created control has default color */
+    clr = (COLORREF)SendMessage(hTree, TVM_GETLINECOLOR, 0, 0);
+    expect(CLR_DEFAULT, clr);
+
+    DestroyWindow(hTree);
+}
+
+static void test_get_insertmarkcolor(void)
+{
+    COLORREF clr;
+    HWND hTree;
+
+    hTree = create_treeview_control();
+
+    /* newly created control has default color */
+    clr = (COLORREF)SendMessage(hTree, TVM_GETINSERTMARKCOLOR, 0, 0);
+    expect(CLR_DEFAULT, clr);
+
+    DestroyWindow(hTree);
+}
+
 START_TEST(treeview)
 {
     HMODULE hComctl32;
@@ -1041,6 +1069,8 @@ START_TEST(treeview)
     test_get_set_itemheight();
     test_get_set_scrolltime();
     test_get_set_textcolor();
+    test_get_linecolor();
+    test_get_insertmarkcolor();
     test_get_set_tooltips();
     test_get_set_unicodeformat();
     test_callback();
diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index ec1fdbe..c8524ca 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -191,6 +191,10 @@ typedef struct tagTREEVIEW_INFO
 #define OVERLAYIMAGEINDEX(x) (((x) >> 8) & 0x0f)
 #define ISVISIBLE(x)         ((x)->visibleOrder >= 0)
 
+#define GETLINECOLOR(x) ((x) == CLR_DEFAULT ? comctl32_color.clrGrayText   : (x))
+#define GETBKCOLOR(x)   ((x) == CLR_NONE    ? comctl32_color.clrWindow     : (x))
+#define GETTXTCOLOR(x)  ((x) == CLR_NONE    ? comctl32_color.clrWindowText : (x))
+#define GETINSCOLOR(x)  ((x) == CLR_DEFAULT ? comctl32_color.clrBtnText    : (x))
 
 static const WCHAR themeClass[] = { 'T','r','e','e','v','i','e','w',0 };
 
@@ -2322,8 +2326,7 @@ TREEVIEW_DrawItemLines(const TREEVIEW_INFO *infoPtr, HDC hdc, const TREEVIEW_ITE
 		 & (TVS_LINESATROOT|TVS_HASLINES|TVS_HASBUTTONS))
 		> TVS_LINESATROOT);
     HBRUSH hbr, hbrOld;
-    COLORREF clrBk = infoPtr->clrBk == -1 ? comctl32_color.clrWindow:
-                                            infoPtr->clrBk;
+    COLORREF clrBk = GETBKCOLOR(infoPtr->clrBk);
 
     if (!lar && item->iLevel == 0)
 	return;
@@ -2342,7 +2345,7 @@ TREEVIEW_DrawItemLines(const TREEVIEW_INFO *infoPtr, HDC hdc, const TREEVIEW_ITE
 
 	/* Get a dotted grey pen */
         lb.lbStyle = BS_SOLID;
-        lb.lbColor = infoPtr->clrLine;
+        lb.lbColor = GETLINECOLOR(infoPtr->clrLine);
         hNewPen = ExtCreatePen(PS_COSMETIC|PS_ALTERNATE, 1, &lb, 0, NULL);
 	hOldPen = SelectObject(hdc, hNewPen);
 
@@ -2412,7 +2415,7 @@ TREEVIEW_DrawItemLines(const TREEVIEW_INFO *infoPtr, HDC hdc, const TREEVIEW_ITE
                 /* plussize = ceil(rectsize * 3/4) */
                 LONG plussize = (rectsize + 1) * 3 / 4;
     
-                HPEN hNewPen  = CreatePen(PS_SOLID, 0, infoPtr->clrLine);
+                HPEN hNewPen  = CreatePen(PS_SOLID, 0, GETLINECOLOR(infoPtr->clrLine));
                 HPEN hOldPen  = SelectObject(hdc, hNewPen);
     
                 Rectangle(hdc, centerx - rectsize - 1, centery - rectsize - 1,
@@ -2482,22 +2485,16 @@ TREEVIEW_DrawItem(const TREEVIEW_INFO *infoPtr, HDC hdc, TREEVIEW_ITEM *wineItem
 	else
 	{
 	    nmcdhdr.clrTextBk = comctl32_color.clrBtnFace;
-	    if (infoPtr->clrText == -1)
-		nmcdhdr.clrText = comctl32_color.clrWindowText;
-	    else
-		nmcdhdr.clrText = infoPtr->clrText;
+	    nmcdhdr.clrText   = GETTXTCOLOR(infoPtr->clrText);
 	}
     }
     else
     {
-	nmcdhdr.clrTextBk = infoPtr->clrBk == -1 ? comctl32_color.clrWindow:
-                                                   infoPtr->clrBk;
+	nmcdhdr.clrTextBk = GETBKCOLOR(infoPtr->clrBk);
 	if ((infoPtr->dwStyle & TVS_TRACKSELECT) && (wineItem == infoPtr->hotItem))
 	    nmcdhdr.clrText = comctl32_color.clrHighlight;
-	else if (infoPtr->clrText == -1)
-	    nmcdhdr.clrText = comctl32_color.clrWindowText;
 	else
-	    nmcdhdr.clrText = infoPtr->clrText;
+	    nmcdhdr.clrText = GETTXTCOLOR(infoPtr->clrText);
     }
 
     hOldFont = SelectObject(hdc, TREEVIEW_FontForItem(infoPtr, wineItem));
@@ -2629,7 +2626,7 @@ TREEVIEW_DrawItem(const TREEVIEW_INFO *infoPtr, HDC hdc, TREEVIEW_ITEM *wineItem
 	int offset;
 	int left, right;
 
-	hNewPen = CreatePen(PS_SOLID, 2, infoPtr->clrInsertMark);
+	hNewPen = CreatePen(PS_SOLID, 2, GETINSCOLOR(infoPtr->clrInsertMark));
 	hOldPen = SelectObject(hdc, hNewPen);
 
 	if (infoPtr->insertBeforeorAfter)
@@ -2801,8 +2798,8 @@ static void
 TREEVIEW_FillBkgnd(const TREEVIEW_INFO *infoPtr, HDC hdc, const RECT *rc)
 {
     HBRUSH hBrush;
-    COLORREF clrBk = infoPtr->clrBk == -1 ? comctl32_color.clrWindow:
-                                            infoPtr->clrBk;
+    COLORREF clrBk = GETBKCOLOR(infoPtr->clrBk);
+
     hBrush =  CreateSolidBrush(clrBk);
     FillRect(hdc, rc, hBrush);
     DeleteObject(hBrush);
@@ -4998,10 +4995,10 @@ TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
 
     infoPtr->scrollX = 0;
 
-    infoPtr->clrBk   = -1; /* use system color */
-    infoPtr->clrText = -1;	/* use system color */
-    infoPtr->clrLine = RGB(128, 128, 128);
-    infoPtr->clrInsertMark = comctl32_color.clrBtnText;
+    infoPtr->clrBk   = CLR_NONE; /* use system color */
+    infoPtr->clrText = CLR_NONE; /* use system color */
+    infoPtr->clrLine = CLR_DEFAULT;
+    infoPtr->clrInsertMark = CLR_DEFAULT;
 
     /* hwndToolTip */
 
-- 
1.5.6.5


--=-p7t6dMuOe5d6jZy3o6XB--




More information about the wine-patches mailing list