Nikolay Sivov : comctl32/tab: Fix highlighted tabs painting.
Module: wine Branch: master Commit: 4ebf2e4526ac718b69046bacafd6f2540badf253 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4ebf2e4526ac718b69046bacaf... Author: Nikolay Sivov <bunglehead(a)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; }
participants (1)
-
Alexandre Julliard