Module: wine Branch: master Commit: 4ebf2e4526ac718b69046bacafd6f2540badf253 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4ebf2e4526ac718b69046bacaf...
Author: Nikolay Sivov bunglehead@gmail.com Date: Sat Mar 28 10:26:15 2009 -0400
comctl32/tab: 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; }