From: Zhiyi Zhang <zzhang(a)codeweavers.com> --- dlls/comctl32/toolbar.c | 48 +++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c index 95a6cff25d8..fb638b211b0 100644 --- a/dlls/comctl32/toolbar.c +++ b/dlls/comctl32/toolbar.c @@ -839,7 +839,7 @@ TOOLBAR_DrawFlatButtonFrame(const TOOLBAR_INFO *infoPtr, const NMTBCUSTOMDRAW *t } static void -TOOLBAR_DrawSepDDArrow(const TOOLBAR_INFO *infoPtr, const NMTBCUSTOMDRAW *tbcd, RECT *rcArrow, BOOL bDropDownPressed, DWORD dwItemCDFlag) +TOOLBAR_DrawFlatSepDropDownArrow(const TOOLBAR_INFO *infoPtr, const NMTBCUSTOMDRAW *tbcd, RECT *rcArrow, BOOL bDropDownPressed, DWORD dwItemCDFlag) { HDC hdc = tbcd->nmcd.hdc; int offset = 0; @@ -938,6 +938,31 @@ static void TOOLBAR_DrawButtonFrame (const TOOLBAR_INFO *infoPtr, TBUTTON_INFO * TOOLBAR_DrawFlatButtonFrame(infoPtr, tbcd, rect, dwItemCDFlag); } +static void TOOLBAR_DrawSepDropDownArrow (const TOOLBAR_INFO *infoPtr, TBUTTON_INFO *btnPtr, + const NMTBCUSTOMDRAW *tbcd, HDC hdc, RECT *rect, + DWORD dwItemCDFlag) +{ + if (infoPtr->hTheme) + { + int stateId = TS_NORMAL; + + if (tbcd->nmcd.uItemState & CDIS_DISABLED) + stateId = TS_DISABLED; + else if (btnPtr->bDropDownPressed || (tbcd->nmcd.uItemState & CDIS_SELECTED)) + stateId = TS_PRESSED; + else if (tbcd->nmcd.uItemState & CDIS_CHECKED) + stateId = (tbcd->nmcd.uItemState & CDIS_HOT) ? TS_HOTCHECKED : TS_CHECKED; + else if (tbcd->nmcd.uItemState & CDIS_HOT) + stateId = TS_HOT; + + DrawThemeBackground(infoPtr->hTheme, hdc, TP_DROPDOWNBUTTON, stateId, rect, NULL); + DrawThemeBackground(infoPtr->hTheme, hdc, TP_SPLITBUTTONDROPDOWN, stateId, rect, NULL); + return; + } + + TOOLBAR_DrawFlatSepDropDownArrow(infoPtr, tbcd, rect, btnPtr->bDropDownPressed, dwItemCDFlag); +} + /* draws a complete toolbar button */ static void TOOLBAR_DrawButton (const TOOLBAR_INFO *infoPtr, TBUTTON_INFO *btnPtr, HDC hdc, DWORD dwBaseCustDraw) @@ -1100,26 +1125,7 @@ TOOLBAR_DrawButton (const TOOLBAR_INFO *infoPtr, TBUTTON_INFO *btnPtr, HDC hdc, TOOLBAR_DrawButtonFrame(infoPtr, btnPtr, &tbcd, hdc, &rc, dwItemCDFlag, drawSepDropDownArrow); if (drawSepDropDownArrow) - { - if (theme) - { - int stateId = TS_NORMAL; - - if (tbcd.nmcd.uItemState & CDIS_DISABLED) - stateId = TS_DISABLED; - else if (btnPtr->bDropDownPressed || (tbcd.nmcd.uItemState & CDIS_SELECTED)) - stateId = TS_PRESSED; - else if (tbcd.nmcd.uItemState & CDIS_CHECKED) - stateId = (tbcd.nmcd.uItemState & CDIS_HOT) ? TS_HOTCHECKED : TS_CHECKED; - else if (tbcd.nmcd.uItemState & CDIS_HOT) - stateId = TS_HOT; - - DrawThemeBackground (theme, hdc, TP_DROPDOWNBUTTON, stateId, &rcArrow, NULL); - DrawThemeBackground (theme, hdc, TP_SPLITBUTTONDROPDOWN, stateId, &rcArrow, NULL); - } - else - TOOLBAR_DrawSepDDArrow(infoPtr, &tbcd, &rcArrow, btnPtr->bDropDownPressed, dwItemCDFlag); - } + TOOLBAR_DrawSepDropDownArrow(infoPtr, btnPtr, &tbcd, hdc, &rcArrow, dwItemCDFlag); oldBkMode = SetBkMode (hdc, tbcd.nStringBkMode); if (!(infoPtr->dwExStyle & TBSTYLE_EX_MIXEDBUTTONS) || (btnPtr->fsStyle & BTNS_SHOWTEXT)) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9457