uxtheme: Use the brush from WM_CTLCOLORSCROLLBAR to paint SB_CTL scrollbar tracks if present.

This commit is contained in:
Zhiyi Zhang 2022-08-31 21:56:41 +08:00 committed by Alexandre Julliard
parent 69a0acb536
commit cf4c4d2f25
2 changed files with 20 additions and 13 deletions

View file

@ -979,7 +979,6 @@ static void test_themed_background(void)
ok(color != RGB(255, 0, 0), "Got unexpected color %#08lx.\n", color); ok(color != RGB(255, 0, 0), "Got unexpected color %#08lx.\n", color);
color = GetPixel(hdc, 10, 60); color = GetPixel(hdc, 10, 60);
todo_wine
ok(color == RGB(255, 0, 0) || broken(color == CLR_INVALID), /* Win7 on TestBots */ ok(color == RGB(255, 0, 0) || broken(color == CLR_INVALID), /* Win7 on TestBots */
"Got unexpected color %#08lx.\n", color); "Got unexpected color %#08lx.\n", color);
} }

View file

@ -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); DrawThemeBackground(theme, dc, SBP_SIZEBOX, state, rect, NULL);
} else { } else {
int uppertrackstate, lowertrackstate, thumbstate; int uppertrackstate, lowertrackstate, thumbstate;
HBRUSH track_brush = NULL;
RECT partrect; RECT partrect;
SIZE grippersize; SIZE grippersize;
if (bar == SB_CTL)
track_brush = (HBRUSH)SendMessageW(GetParent(hwnd), WM_CTLCOLORSCROLLBAR, (WPARAM)dc, (LPARAM)hwnd);
if (disabled) { if (disabled) {
uppertrackstate = SCRBS_DISABLED; uppertrackstate = SCRBS_DISABLED;
lowertrackstate = 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.top = rect->top + arrowsize;
partrect.bottom = rect->top + thumbpos; partrect.bottom = rect->top + thumbpos;
if (bar == SB_CTL && IsThemeBackgroundPartiallyTransparent(theme, SBP_UPPERTRACKVERT, uppertrackstate)) if (bar == SB_CTL && track_brush)
DrawThemeParentBackground(hwnd, dc, &partrect); FillRect(dc, &partrect, track_brush);
DrawThemeBackground(theme, dc, SBP_UPPERTRACKVERT, uppertrackstate, &partrect, NULL); else
DrawThemeBackground(theme, dc, SBP_UPPERTRACKVERT, uppertrackstate, &partrect, NULL);
} }
if (thumbsize > 0) { 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; partrect.top = rect->top + arrowsize;
if (partrect.bottom > partrect.top) if (partrect.bottom > partrect.top)
{ {
if (bar == SB_CTL && IsThemeBackgroundPartiallyTransparent(theme, SBP_LOWERTRACKVERT, lowertrackstate)) if (bar == SB_CTL && track_brush)
DrawThemeParentBackground(hwnd, dc, &partrect); FillRect(dc, &partrect, track_brush);
DrawThemeBackground(theme, dc, SBP_LOWERTRACKVERT, lowertrackstate, &partrect, NULL); else
DrawThemeBackground(theme, dc, SBP_LOWERTRACKVERT, lowertrackstate, &partrect, NULL);
} }
} else { } else {
int leftarrowstate, rightarrowstate; 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.left = rect->left + arrowsize;
partrect.right = rect->left + thumbpos; partrect.right = rect->left + thumbpos;
if (bar == SB_CTL && IsThemeBackgroundPartiallyTransparent(theme, SBP_UPPERTRACKHORZ, uppertrackstate)) if (bar == SB_CTL && track_brush)
DrawThemeParentBackground(hwnd, dc, &partrect); FillRect(dc, &partrect, track_brush);
DrawThemeBackground(theme, dc, SBP_UPPERTRACKHORZ, uppertrackstate, &partrect, NULL); else
DrawThemeBackground(theme, dc, SBP_UPPERTRACKHORZ, uppertrackstate, &partrect, NULL);
} }
if (thumbsize > 0) { 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; partrect.left = rect->left + arrowsize;
if (partrect.right > partrect.left) if (partrect.right > partrect.left)
{ {
if (bar == SB_CTL && IsThemeBackgroundPartiallyTransparent(theme, SBP_LOWERTRACKHORZ, lowertrackstate)) if (bar == SB_CTL && track_brush)
DrawThemeParentBackground(hwnd, dc, &partrect); FillRect(dc, &partrect, track_brush);
DrawThemeBackground(theme, dc, SBP_LOWERTRACKHORZ, lowertrackstate, &partrect, NULL); else
DrawThemeBackground(theme, dc, SBP_LOWERTRACKHORZ, lowertrackstate, &partrect, NULL);
} }
} }
} }