From: Zhiyi Zhang zzhang@codeweavers.com
--- dlls/comctl32/tests/misc.c | 1 - dlls/uxtheme/scrollbar.c | 32 ++++++++++++++++++++------------ 2 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/dlls/comctl32/tests/misc.c b/dlls/comctl32/tests/misc.c index 61b2149a463..9f6eb611388 100644 --- a/dlls/comctl32/tests/misc.c +++ b/dlls/comctl32/tests/misc.c @@ -979,7 +979,6 @@ static void test_themed_background(void) ok(color != RGB(255, 0, 0), "Got unexpected color %#08lx.\n", color);
color = GetPixel(hdc, 10, 60); - todo_wine ok(color == RGB(255, 0, 0) || broken(color == CLR_INVALID), /* Win7 on TestBots */ "Got unexpected color %#08lx.\n", color); } diff --git a/dlls/uxtheme/scrollbar.c b/dlls/uxtheme/scrollbar.c index 4ae1b2a8724..1f1c61d74e1 100644 --- a/dlls/uxtheme/scrollbar.c +++ b/dlls/uxtheme/scrollbar.c @@ -68,9 +68,13 @@ void WINAPI UXTHEME_ScrollBarDraw(HWND hwnd, HDC dc, INT bar, enum SCROLL_HITTES DrawThemeBackground(theme, dc, SBP_SIZEBOX, state, rect, NULL); } else { int uppertrackstate, lowertrackstate, thumbstate; + HBRUSH track_brush = NULL; RECT partrect; SIZE grippersize;
+ if (bar == SB_CTL) + track_brush = (HBRUSH)SendMessageW(GetParent(hwnd), WM_CTLCOLORSCROLLBAR, (WPARAM)dc, (LPARAM)hwnd); + if (disabled) { uppertrackstate = SCRBS_DISABLED; lowertrackstate = SCRBS_DISABLED; @@ -148,9 +152,10 @@ void WINAPI UXTHEME_ScrollBarDraw(HWND hwnd, HDC dc, INT bar, enum SCROLL_HITTES partrect.top = rect->top + arrowsize; partrect.bottom = rect->top + thumbpos;
- if (bar == SB_CTL && IsThemeBackgroundPartiallyTransparent(theme, SBP_UPPERTRACKVERT, uppertrackstate)) - DrawThemeParentBackground(hwnd, dc, &partrect); - DrawThemeBackground(theme, dc, SBP_UPPERTRACKVERT, uppertrackstate, &partrect, NULL); + if (bar == SB_CTL && track_brush) + FillRect(dc, &partrect, track_brush); + else + DrawThemeBackground(theme, dc, SBP_UPPERTRACKVERT, uppertrackstate, &partrect, NULL); }
if (thumbsize > 0) { @@ -178,9 +183,10 @@ void WINAPI UXTHEME_ScrollBarDraw(HWND hwnd, HDC dc, INT bar, enum SCROLL_HITTES partrect.top = rect->top + arrowsize; if (partrect.bottom > partrect.top) { - if (bar == SB_CTL && IsThemeBackgroundPartiallyTransparent(theme, SBP_LOWERTRACKVERT, lowertrackstate)) - DrawThemeParentBackground(hwnd, dc, &partrect); - DrawThemeBackground(theme, dc, SBP_LOWERTRACKVERT, lowertrackstate, &partrect, NULL); + if (bar == SB_CTL && track_brush) + FillRect(dc, &partrect, track_brush); + else + DrawThemeBackground(theme, dc, SBP_LOWERTRACKVERT, lowertrackstate, &partrect, NULL); } } else { int leftarrowstate, rightarrowstate; @@ -225,9 +231,10 @@ void WINAPI UXTHEME_ScrollBarDraw(HWND hwnd, HDC dc, INT bar, enum SCROLL_HITTES partrect.left = rect->left + arrowsize; partrect.right = rect->left + thumbpos;
- if (bar == SB_CTL && IsThemeBackgroundPartiallyTransparent(theme, SBP_UPPERTRACKHORZ, uppertrackstate)) - DrawThemeParentBackground(hwnd, dc, &partrect); - DrawThemeBackground(theme, dc, SBP_UPPERTRACKHORZ, uppertrackstate, &partrect, NULL); + if (bar == SB_CTL && track_brush) + FillRect(dc, &partrect, track_brush); + else + DrawThemeBackground(theme, dc, SBP_UPPERTRACKHORZ, uppertrackstate, &partrect, NULL); }
if (thumbsize > 0) { @@ -255,9 +262,10 @@ void WINAPI UXTHEME_ScrollBarDraw(HWND hwnd, HDC dc, INT bar, enum SCROLL_HITTES partrect.left = rect->left + arrowsize; if (partrect.right > partrect.left) { - if (bar == SB_CTL && IsThemeBackgroundPartiallyTransparent(theme, SBP_LOWERTRACKHORZ, lowertrackstate)) - DrawThemeParentBackground(hwnd, dc, &partrect); - DrawThemeBackground(theme, dc, SBP_LOWERTRACKHORZ, lowertrackstate, &partrect, NULL); + if (bar == SB_CTL && track_brush) + FillRect(dc, &partrect, track_brush); + else + DrawThemeBackground(theme, dc, SBP_LOWERTRACKHORZ, lowertrackstate, &partrect, NULL); } } }