mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 05:26:58 +00:00
[NTUSER][USER32] Improve DrawFrameControl:DFC_MENU and DFC_BUTTON (#4783)
A retrial of 13868ee
(#4779).
- Fill the background if necessary, and set the text color and the back mode in DrawFrameControl:DFC_MENU.
- Use UITOOLS95_DrawFrameMenu in menu drawing instead of DrawFrameControl.
CORE-18515, CORE-18417
This commit is contained in:
parent
227e596f68
commit
ac0a0adc51
|
@ -769,13 +769,18 @@ BOOL FASTCALL UITOOLS95_DrawFrameButton(HDC hdc, LPRECT rc, UINT uState)
|
||||||
|
|
||||||
case DFCS_BUTTONRADIOIMAGE:
|
case DFCS_BUTTONRADIOIMAGE:
|
||||||
case DFCS_BUTTONRADIOMASK:
|
case DFCS_BUTTONRADIOMASK:
|
||||||
|
if (uState & DFCS_BUTTONRADIOIMAGE)
|
||||||
|
FillRect(hdc, rc, (HBRUSH)NtGdiGetStockObject(BLACK_BRUSH)); /* Fill by black */
|
||||||
|
else
|
||||||
|
FillRect(hdc, rc, (HBRUSH)NtGdiGetStockObject(WHITE_BRUSH)); /* Fill by white */
|
||||||
|
|
||||||
|
return UITOOLS95_DFC_ButtonCheckRadio(hdc, rc, uState, TRUE);
|
||||||
|
|
||||||
case DFCS_BUTTONRADIO:
|
case DFCS_BUTTONRADIO:
|
||||||
return UITOOLS95_DFC_ButtonCheckRadio(hdc, rc, uState, TRUE);
|
return UITOOLS95_DFC_ButtonCheckRadio(hdc, rc, uState, TRUE);
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ERR("Invalid button state=0x%04x\n", uState);
|
ERR("Invalid button state=0x%04x\n", uState);
|
||||||
|
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -953,7 +958,6 @@ BOOL FASTCALL UITOOLS95_DrawFrameScroll(HDC dc, LPRECT r, UINT uFlags)
|
||||||
|
|
||||||
BOOL FASTCALL UITOOLS95_DrawFrameMenu(HDC dc, LPRECT r, UINT uFlags)
|
BOOL FASTCALL UITOOLS95_DrawFrameMenu(HDC dc, LPRECT r, UINT uFlags)
|
||||||
{
|
{
|
||||||
// TODO: DFCS_TRANSPARENT upon DFCS_MENUARROWUP or DFCS_MENUARROWDOWN
|
|
||||||
LOGFONTW lf;
|
LOGFONTW lf;
|
||||||
HFONT hFont, hOldFont;
|
HFONT hFont, hOldFont;
|
||||||
WCHAR Symbol;
|
WCHAR Symbol;
|
||||||
|
@ -983,6 +987,7 @@ BOOL FASTCALL UITOOLS95_DrawFrameMenu(HDC dc, LPRECT r, UINT uFlags)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DFCS_MENUCHECK:
|
case DFCS_MENUCHECK:
|
||||||
|
case DFCS_MENUCHECK | DFCS_MENUBULLET:
|
||||||
Symbol = 'a';
|
Symbol = 'a';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1098,7 +1103,28 @@ DrawFrameControl(HDC hDC, LPRECT rc, UINT uType, UINT uState)
|
||||||
case DFC_CAPTION:
|
case DFC_CAPTION:
|
||||||
return UITOOLS95_DrawFrameCaption(hDC, rc, uState);
|
return UITOOLS95_DrawFrameCaption(hDC, rc, uState);
|
||||||
case DFC_MENU:
|
case DFC_MENU:
|
||||||
return UITOOLS95_DrawFrameMenu(hDC, rc, uState);
|
{
|
||||||
|
BOOL ret;
|
||||||
|
COLORREF rgbOldText;
|
||||||
|
INT iOldBackMode;
|
||||||
|
|
||||||
|
if (uState & (DFCS_MENUARROWUP | DFCS_MENUARROWDOWN))
|
||||||
|
{
|
||||||
|
if (!(uState & DFCS_TRANSPARENT))
|
||||||
|
FillRect(hDC, rc, IntGetSysColorBrush(COLOR_MENU)); /* Fill by menu color */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FillRect(hDC, rc, (HBRUSH)NtGdiGetStockObject(WHITE_BRUSH)); /* Fill by white */
|
||||||
|
}
|
||||||
|
|
||||||
|
rgbOldText = IntGdiSetTextColor(hDC, RGB(0, 0, 0)); /* Draw by black */
|
||||||
|
iOldBackMode = IntGdiSetBkMode(hDC, TRANSPARENT);
|
||||||
|
ret = UITOOLS95_DrawFrameMenu(hDC, rc, uState);
|
||||||
|
IntGdiSetBkMode(hDC, iOldBackMode);
|
||||||
|
IntGdiSetTextColor(hDC, rgbOldText);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
#if 0
|
#if 0
|
||||||
case DFC_POPUPMENU:
|
case DFC_POPUPMENU:
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
|
|
|
@ -11,6 +11,8 @@ DBG_DEFAULT_CHANNEL(UserMenu);
|
||||||
|
|
||||||
/* INTERNAL ******************************************************************/
|
/* INTERNAL ******************************************************************/
|
||||||
|
|
||||||
|
BOOL FASTCALL UITOOLS95_DrawFrameMenu(HDC dc, LPRECT r, UINT uFlags); /* draw.c */
|
||||||
|
|
||||||
HFONT ghMenuFont = NULL;
|
HFONT ghMenuFont = NULL;
|
||||||
HFONT ghMenuFontBold = NULL;
|
HFONT ghMenuFontBold = NULL;
|
||||||
static SIZE MenuCharSize;
|
static SIZE MenuCharSize;
|
||||||
|
@ -2186,14 +2188,14 @@ static void MENU_DrawScrollArrows(PMENU lppop, HDC hdc)
|
||||||
rect.right = lppop->cxMenu;
|
rect.right = lppop->cxMenu;
|
||||||
rect.bottom = arrow_bitmap_height;
|
rect.bottom = arrow_bitmap_height;
|
||||||
FillRect(hdc, &rect, IntGetSysColorBrush(COLOR_MENU));
|
FillRect(hdc, &rect, IntGetSysColorBrush(COLOR_MENU));
|
||||||
DrawFrameControl(hdc, &rect, DFC_MENU, (lppop->iTop ? 0 : DFCS_INACTIVE)|DFCS_MENUARROWUP);
|
UITOOLS95_DrawFrameMenu(hdc, &rect, (lppop->iTop ? 0 : DFCS_INACTIVE) | DFCS_MENUARROWUP);
|
||||||
|
|
||||||
rect.top = lppop->cyMenu - arrow_bitmap_height;
|
rect.top = lppop->cyMenu - arrow_bitmap_height;
|
||||||
rect.bottom = lppop->cyMenu;
|
rect.bottom = lppop->cyMenu;
|
||||||
FillRect(hdc, &rect, IntGetSysColorBrush(COLOR_MENU));
|
FillRect(hdc, &rect, IntGetSysColorBrush(COLOR_MENU));
|
||||||
if (!(lppop->iTop < lppop->iMaxTop - (MENU_GetMaxPopupHeight(lppop) - 2 * arrow_bitmap_height)))
|
if (!(lppop->iTop < lppop->iMaxTop - (MENU_GetMaxPopupHeight(lppop) - 2 * arrow_bitmap_height)))
|
||||||
Flags = DFCS_INACTIVE;
|
Flags = DFCS_INACTIVE;
|
||||||
DrawFrameControl(hdc, &rect, DFC_MENU, Flags|DFCS_MENUARROWDOWN);
|
UITOOLS95_DrawFrameMenu(hdc, &rect, Flags | DFCS_MENUARROWDOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -2308,7 +2310,7 @@ static void FASTCALL MENU_DrawMenuItem(PWND Wnd, PMENU Menu, PWND WndOwner, HDC
|
||||||
RECT rectTemp;
|
RECT rectTemp;
|
||||||
RtlCopyMemory(&rectTemp, &rect, sizeof(RECT));
|
RtlCopyMemory(&rectTemp, &rect, sizeof(RECT));
|
||||||
rectTemp.left = rectTemp.right - UserGetSystemMetrics(SM_CXMENUCHECK);
|
rectTemp.left = rectTemp.right - UserGetSystemMetrics(SM_CXMENUCHECK);
|
||||||
DrawFrameControl(hdc, &rectTemp, DFC_MENU, DFCS_MENUARROW);
|
UITOOLS95_DrawFrameMenu(hdc, &rectTemp, DFCS_MENUARROW);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2452,9 +2454,9 @@ static void FASTCALL MENU_DrawMenuItem(PWND Wnd, PMENU Menu, PWND WndOwner, HDC
|
||||||
RECT r;
|
RECT r;
|
||||||
r = rect;
|
r = rect;
|
||||||
r.right = r.left + check_bitmap_width;
|
r.right = r.left + check_bitmap_width;
|
||||||
DrawFrameControl( hdc, &r, DFC_MENU,
|
UITOOLS95_DrawFrameMenu(hdc, &r,
|
||||||
(lpitem->fType & MFT_RADIOCHECK) ?
|
(lpitem->fType & MFT_RADIOCHECK) ?
|
||||||
DFCS_MENUBULLET : DFCS_MENUCHECK);
|
DFCS_MENUBULLET : DFCS_MENUCHECK);
|
||||||
checked = TRUE;
|
checked = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2475,7 +2477,7 @@ static void FASTCALL MENU_DrawMenuItem(PWND Wnd, PMENU Menu, PWND WndOwner, HDC
|
||||||
RECT rectTemp;
|
RECT rectTemp;
|
||||||
RtlCopyMemory(&rectTemp, &rect, sizeof(RECT));
|
RtlCopyMemory(&rectTemp, &rect, sizeof(RECT));
|
||||||
rectTemp.left = rectTemp.right - check_bitmap_width;
|
rectTemp.left = rectTemp.right - check_bitmap_width;
|
||||||
DrawFrameControl(hdc, &rectTemp, DFC_MENU, DFCS_MENUARROW);
|
UITOOLS95_DrawFrameMenu(hdc, &rectTemp, DFCS_MENUARROW);
|
||||||
}
|
}
|
||||||
rect.left += 4;
|
rect.left += 4;
|
||||||
if( !((Menu->fFlags & MNS_STYLE_MASK) & MNS_NOCHECK))
|
if( !((Menu->fFlags & MNS_STYLE_MASK) & MNS_NOCHECK))
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Copyright 2003 Andrew Greenwood
|
* Copyright 2003 Andrew Greenwood
|
||||||
* Copyright 2003 Filip Navara
|
* Copyright 2003 Filip Navara
|
||||||
* Copyright 2009 Matthias Kupfer
|
* Copyright 2009 Matthias Kupfer
|
||||||
* Copyright 2017 Katayama Hirofumi MZ
|
* Copyright 2017-2022 Katayama Hirofumi MZ
|
||||||
*
|
*
|
||||||
* Based on Wine code.
|
* Based on Wine code.
|
||||||
*
|
*
|
||||||
|
@ -704,7 +704,6 @@ static BOOL UITOOLS95_DFC_ButtonCheckRadio(HDC dc, LPRECT r, UINT uFlags, BOOL R
|
||||||
// FIXME: improve font rendering
|
// FIXME: improve font rendering
|
||||||
RECT Rect;
|
RECT Rect;
|
||||||
HGDIOBJ hbrOld, hpenOld;
|
HGDIOBJ hbrOld, hpenOld;
|
||||||
FillRect(dc, r, (HBRUSH)GetStockObject(WHITE_BRUSH));
|
|
||||||
SetRect(&Rect, X, Y, X + Shorter, Y + Shorter);
|
SetRect(&Rect, X, Y, X + Shorter, Y + Shorter);
|
||||||
InflateRect(&Rect, -(Shorter * 8) / 54, -(Shorter * 8) / 54);
|
InflateRect(&Rect, -(Shorter * 8) / 54, -(Shorter * 8) / 54);
|
||||||
hbrOld = SelectObject(dc, GetStockObject(BLACK_BRUSH));
|
hbrOld = SelectObject(dc, GetStockObject(BLACK_BRUSH));
|
||||||
|
@ -788,13 +787,18 @@ static BOOL UITOOLS95_DrawFrameButton(HDC hdc, LPRECT rc, UINT uState)
|
||||||
|
|
||||||
case DFCS_BUTTONRADIOIMAGE:
|
case DFCS_BUTTONRADIOIMAGE:
|
||||||
case DFCS_BUTTONRADIOMASK:
|
case DFCS_BUTTONRADIOMASK:
|
||||||
|
if (uState & DFCS_BUTTONRADIOIMAGE)
|
||||||
|
FillRect(hdc, rc, (HBRUSH)GetStockObject(BLACK_BRUSH)); /* Fill by black */
|
||||||
|
else
|
||||||
|
FillRect(hdc, rc, (HBRUSH)GetStockObject(WHITE_BRUSH)); /* Fill by white */
|
||||||
|
|
||||||
|
return UITOOLS95_DFC_ButtonCheckRadio(hdc, rc, uState, TRUE);
|
||||||
|
|
||||||
case DFCS_BUTTONRADIO:
|
case DFCS_BUTTONRADIO:
|
||||||
return UITOOLS95_DFC_ButtonCheckRadio(hdc, rc, uState, TRUE);
|
return UITOOLS95_DFC_ButtonCheckRadio(hdc, rc, uState, TRUE);
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ERR("Invalid button state=0x%04x\n", uState);
|
ERR("Invalid button state=0x%04x\n", uState);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -972,7 +976,6 @@ static BOOL UITOOLS95_DrawFrameScroll(HDC dc, LPRECT r, UINT uFlags)
|
||||||
|
|
||||||
static BOOL UITOOLS95_DrawFrameMenu(HDC dc, LPRECT r, UINT uFlags)
|
static BOOL UITOOLS95_DrawFrameMenu(HDC dc, LPRECT r, UINT uFlags)
|
||||||
{
|
{
|
||||||
// TODO: DFCS_TRANSPARENT upon DFCS_MENUARROWUP or DFCS_MENUARROWDOWN
|
|
||||||
LOGFONTW lf;
|
LOGFONTW lf;
|
||||||
HFONT hFont, hOldFont;
|
HFONT hFont, hOldFont;
|
||||||
TCHAR Symbol;
|
TCHAR Symbol;
|
||||||
|
@ -1002,6 +1005,7 @@ static BOOL UITOOLS95_DrawFrameMenu(HDC dc, LPRECT r, UINT uFlags)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DFCS_MENUCHECK:
|
case DFCS_MENUCHECK:
|
||||||
|
case DFCS_MENUCHECK | DFCS_MENUBULLET:
|
||||||
Symbol = 'a';
|
Symbol = 'a';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1428,7 +1432,28 @@ RealDrawFrameControl(HDC hDC, LPRECT rc, UINT uType, UINT uState)
|
||||||
case DFC_CAPTION:
|
case DFC_CAPTION:
|
||||||
return UITOOLS95_DrawFrameCaption(hDC, rc, uState);
|
return UITOOLS95_DrawFrameCaption(hDC, rc, uState);
|
||||||
case DFC_MENU:
|
case DFC_MENU:
|
||||||
return UITOOLS95_DrawFrameMenu(hDC, rc, uState);
|
{
|
||||||
|
BOOL ret;
|
||||||
|
COLORREF rgbOldText;
|
||||||
|
INT iOldBackMode;
|
||||||
|
|
||||||
|
if (uState & (DFCS_MENUARROWUP | DFCS_MENUARROWDOWN))
|
||||||
|
{
|
||||||
|
if (!(uState & DFCS_TRANSPARENT))
|
||||||
|
FillRect(hDC, rc, (HBRUSH)(COLOR_MENU + 1)); /* Fill by menu color */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FillRect(hDC, rc, (HBRUSH)GetStockObject(WHITE_BRUSH)); /* Fill by white */
|
||||||
|
}
|
||||||
|
|
||||||
|
rgbOldText = SetTextColor(hDC, RGB(0, 0, 0)); /* Draw by black */
|
||||||
|
iOldBackMode = SetBkMode(hDC, TRANSPARENT);
|
||||||
|
ret = UITOOLS95_DrawFrameMenu(hDC, rc, uState);
|
||||||
|
SetBkMode(hDC, iOldBackMode);
|
||||||
|
SetTextColor(hDC, rgbOldText);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
#if 0
|
#if 0
|
||||||
case DFC_POPUPMENU:
|
case DFC_POPUPMENU:
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
|
|
Loading…
Reference in a new issue