[4/4] comctl32/tab: Fix highlighted tabs painting
Nikolay Sivov
bunglehead at gmail.com
Sat Mar 28 09:38:10 CDT 2009
Changelog:
- Fix highlighted tabs painting: background wasn't painted at all,
text had wrong color.
>From ea7075f91a6587ba01ca9384b69bd2021ddef5df Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Sat, 28 Mar 2009 10:26:15 -0400
Subject: Fix highlighted tabs painting
---
dlls/comctl32/tab.c | 31 +++++++++++++++++++++++++++----
1 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c
index 86f9e12..1830b2d 100644
--- a/dlls/comctl32/tab.c
+++ b/dlls/comctl32/tab.c
@@ -1496,6 +1496,18 @@ TAB_EraseTabInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect
FillRect(hdc, &rTemp, hbr);
}
+ /* highlighting is drawn on top of previous fills */
+ if (TAB_GetItem(infoPtr, iItem)->dwState & TCIS_HIGHLIGHTED)
+ {
+ if (deleteBrush)
+ {
+ DeleteObject(hbr);
+ deleteBrush = FALSE;
+ }
+ hbr = GetSysColorBrush(COLOR_HIGHLIGHT);
+ FillRect(hdc, &rTemp, hbr);
+ }
+
/* Cleanup */
if (deleteBrush) DeleteObject(hbr);
}
@@ -1649,10 +1661,15 @@ TAB_DrawItemInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect
*/
oldBkMode = SetBkMode(hdc, TRANSPARENT);
if (!GetWindowTheme (infoPtr->hwnd) || (lStyle & TCS_BUTTONS))
- SetTextColor(hdc, (((lStyle & TCS_HOTTRACK) && (iItem == infoPtr->iHotTracked)
- && !(lStyle & TCS_FLATBUTTONS))
- | (TAB_GetItem(infoPtr, iItem)->dwState & TCIS_HIGHLIGHTED)) ?
- comctl32_color.clrHighlight : comctl32_color.clrBtnText);
+ {
+ if ((lStyle & TCS_HOTTRACK) && (iItem == infoPtr->iHotTracked) &&
+ !(lStyle & TCS_FLATBUTTONS))
+ SetTextColor(hdc, comctl32_color.clrHighlight);
+ else if (TAB_GetItem(infoPtr, iItem)->dwState & TCIS_HIGHLIGHTED)
+ SetTextColor(hdc, comctl32_color.clrHighlightText);
+ else
+ SetTextColor(hdc, comctl32_color.clrBtnText);
+ }
/*
* if owner draw, tell the owner to draw
@@ -2698,6 +2715,8 @@ static inline LRESULT
TAB_HighlightItem (TAB_INFO *infoPtr, INT iItem, BOOL fHighlight)
{
LPDWORD lpState;
+ DWORD oldState;
+ RECT r;
TRACE("(%p,%d,%s)\n", infoPtr, iItem, fHighlight ? "true" : "false");
@@ -2705,12 +2724,16 @@ TAB_HighlightItem (TAB_INFO *infoPtr, INT iItem, BOOL fHighlight)
return FALSE;
lpState = &TAB_GetItem(infoPtr, iItem)->dwState;
+ oldState = *lpState;
if (fHighlight)
*lpState |= TCIS_HIGHLIGHTED;
else
*lpState &= ~TCIS_HIGHLIGHTED;
+ if ((oldState != *lpState) && TAB_InternalGetItemRect (infoPtr, iItem, &r, NULL))
+ InvalidateRect (infoPtr->hwnd, &r, TRUE);
+
return TRUE;
}
--
1.5.6.5
More information about the wine-patches
mailing list