comctl32: toolbar[5/5]: store dwBaseCustDraw and dwItemCDFlag in
local variables
Mikołaj Zalewski
mikolaj at zalewski.pl
Wed Oct 11 13:53:39 CDT 2006
This requires passing them as paramters to some functions but I think it
makes it easier to track where they are initialized and used.
-------------- next part --------------
diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c
index 9803075..100af62 100644
--- a/dlls/comctl32/toolbar.c
+++ b/dlls/comctl32/toolbar.c
@@ -139,8 +139,6 @@ typedef struct
INT nButtonDrag; /* toolbar button being dragged or -1 if none */
INT nOldHit;
INT nHotItem; /* index of the "hot" item */
- DWORD dwBaseCustDraw; /* CDRF_ response (w/o TBCDRF_) from PREPAINT */
- DWORD dwItemCDFlag; /* TBCDRF_ flags from last ITEMPREPAINT */
SIZE szPadding; /* padding values around button */
INT iListGap; /* default gap between text and image for toolbar with list style */
HFONT hDefaultFont;
@@ -551,7 +549,7 @@ TOOLBAR_DrawArrow (HDC hdc, INT left, IN
*/
static void
TOOLBAR_DrawString (TOOLBAR_INFO *infoPtr, RECT *rcText, LPWSTR lpText,
- NMTBCUSTOMDRAW *tbcd)
+ NMTBCUSTOMDRAW *tbcd, DWORD dwItemCDFlag)
{
HDC hdc = tbcd->nmcd.hdc;
HFONT hOldFont = 0;
@@ -566,7 +564,7 @@ TOOLBAR_DrawString (TOOLBAR_INFO *infoPt
rcText->left, rcText->top, rcText->right, rcText->bottom);
hOldFont = SelectObject (hdc, infoPtr->hFont);
- if ((state & CDIS_HOT) && (infoPtr->dwItemCDFlag & TBCDRF_HILITEHOTTRACK )) {
+ if ((state & CDIS_HOT) && (dwItemCDFlag & TBCDRF_HILITEHOTTRACK )) {
clrOld = SetTextColor (hdc, tbcd->clrTextHighlight);
}
else if (state & CDIS_DISABLED) {
@@ -579,7 +577,7 @@ TOOLBAR_DrawString (TOOLBAR_INFO *infoPt
else if (state & CDIS_INDETERMINATE) {
clrOld = SetTextColor (hdc, comctl32_color.clr3dShadow);
}
- else if ((state & CDIS_MARKED) && !(infoPtr->dwItemCDFlag & TBCDRF_NOMARK)) {
+ else if ((state & CDIS_MARKED) && !(dwItemCDFlag & TBCDRF_NOMARK)) {
clrOld = SetTextColor (hdc, tbcd->clrTextHighlight);
clrOldBk = SetBkColor (hdc, tbcd->clrMark);
oldBkMode = SetBkMode (hdc, tbcd->nHLStringBkMode);
@@ -590,7 +588,7 @@ TOOLBAR_DrawString (TOOLBAR_INFO *infoPt
DrawTextW (hdc, lpText, -1, rcText, infoPtr->dwDTFlags);
SetTextColor (hdc, clrOld);
- if ((state & CDIS_MARKED) && !(infoPtr->dwItemCDFlag & TBCDRF_NOMARK))
+ if ((state & CDIS_MARKED) && !(dwItemCDFlag & TBCDRF_NOMARK))
{
SetBkColor (hdc, clrOldBk);
SetBkMode (hdc, oldBkMode);
@@ -680,7 +678,8 @@ TOOLBAR_TranslateState(TBUTTON_INFO *btn
/* draws the image on a toolbar button */
static void
-TOOLBAR_DrawImage(TOOLBAR_INFO *infoPtr, TBUTTON_INFO *btnPtr, INT left, INT top, const NMTBCUSTOMDRAW *tbcd)
+TOOLBAR_DrawImage(TOOLBAR_INFO *infoPtr, TBUTTON_INFO *btnPtr, INT left, INT top,
+ const NMTBCUSTOMDRAW *tbcd, DWORD dwItemCDFlag)
{
HIMAGELIST himl = NULL;
BOOL draw_masked = FALSE;
@@ -713,11 +712,11 @@ TOOLBAR_DrawImage(TOOLBAR_INFO *infoPtr,
if (!himl)
return;
- if (!(infoPtr->dwItemCDFlag & TBCDRF_NOOFFSET) &&
+ if (!(dwItemCDFlag & TBCDRF_NOOFFSET) &&
(tbcd->nmcd.uItemState & (CDIS_SELECTED | CDIS_CHECKED)))
offset = 1;
- if (!(infoPtr->dwItemCDFlag & TBCDRF_NOMARK) &&
+ if (!(dwItemCDFlag & TBCDRF_NOMARK) &&
(tbcd->nmcd.uItemState & CDIS_MARKED))
draw_flags |= ILD_BLEND50;
@@ -732,7 +731,7 @@ TOOLBAR_DrawImage(TOOLBAR_INFO *infoPtr,
/* draws a blank frame for a toolbar button */
static void
-TOOLBAR_DrawFrame(const TOOLBAR_INFO *infoPtr, const NMTBCUSTOMDRAW *tbcd)
+TOOLBAR_DrawFrame(const TOOLBAR_INFO *infoPtr, const NMTBCUSTOMDRAW *tbcd, DWORD dwItemCDFlag)
{
HDC hdc = tbcd->nmcd.hdc;
RECT rc = tbcd->nmcd.rc;
@@ -745,7 +744,7 @@ TOOLBAR_DrawFrame(const TOOLBAR_INFO *in
(tbcd->nmcd.uItemState & CDIS_CHECKED));
/* app don't want us to draw any edges */
- if (infoPtr->dwItemCDFlag & TBCDRF_NOEDGES)
+ if (dwItemCDFlag & TBCDRF_NOEDGES)
return;
if (infoPtr->dwStyle & TBSTYLE_FLAT)
@@ -766,7 +765,7 @@ TOOLBAR_DrawFrame(const TOOLBAR_INFO *in
}
static void
-TOOLBAR_DrawSepDDArrow(const TOOLBAR_INFO *infoPtr, const NMTBCUSTOMDRAW *tbcd, RECT *rcArrow, BOOL bDropDownPressed)
+TOOLBAR_DrawSepDDArrow(const TOOLBAR_INFO *infoPtr, const NMTBCUSTOMDRAW *tbcd, RECT *rcArrow, BOOL bDropDownPressed, DWORD dwItemCDFlag)
{
HDC hdc = tbcd->nmcd.hdc;
int offset = 0;
@@ -792,7 +791,7 @@ TOOLBAR_DrawSepDDArrow(const TOOLBAR_INF
}
if (pressed)
- offset = (infoPtr->dwItemCDFlag & TBCDRF_NOOFFSET) ? 0 : 1;
+ offset = (dwItemCDFlag & TBCDRF_NOOFFSET) ? 0 : 1;
if (tbcd->nmcd.uItemState & (CDIS_DISABLED | CDIS_INDETERMINATE))
{
@@ -805,7 +804,7 @@ TOOLBAR_DrawSepDDArrow(const TOOLBAR_INF
/* draws a complete toolbar button */
static void
-TOOLBAR_DrawButton (HWND hwnd, TBUTTON_INFO *btnPtr, HDC hdc)
+TOOLBAR_DrawButton (HWND hwnd, TBUTTON_INFO *btnPtr, HDC hdc, DWORD dwBaseCustDraw)
{
TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
DWORD dwStyle = infoPtr->dwStyle;
@@ -821,6 +820,7 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_I
INT offset;
INT oldBkMode;
DWORD dwItemCustDraw;
+ DWORD dwItemCDFlag;
HTHEME theme = GetWindowTheme (hwnd);
rc = btnPtr->rect;
@@ -950,8 +950,8 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_I
/* Issue Item Prepaint notify */
dwItemCustDraw = 0;
- infoPtr->dwItemCDFlag = 0;
- if (infoPtr->dwBaseCustDraw & CDRF_NOTIFYITEMDRAW)
+ dwItemCDFlag = 0;
+ if (dwBaseCustDraw & CDRF_NOTIFYITEMDRAW)
{
tbcd.nmcd.dwDrawStage = CDDS_ITEMPREPAINT;
tbcd.nmcd.dwItemSpec = btnPtr->idCommand;
@@ -962,7 +962,7 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_I
tbcd.nmcd.rc = rc;
dwItemCustDraw = ntfret & 0xffff;
- infoPtr->dwItemCDFlag = ntfret & 0xffff0000;
+ dwItemCDFlag = ntfret & 0xffff0000;
if (dwItemCustDraw & CDRF_SKIPDEFAULT)
return;
/* save the only part of the rect that the user can change */
@@ -970,7 +970,7 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_I
rcText.bottom = tbcd.rcText.bottom + rc.top;
}
- if (!(infoPtr->dwItemCDFlag & TBCDRF_NOOFFSET) &&
+ if (!(dwItemCDFlag & TBCDRF_NOOFFSET) &&
(btnPtr->fsState & (TBSTATE_PRESSED | TBSTATE_CHECKED)))
OffsetRect(&rcText, 1, 1);
@@ -981,7 +981,7 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_I
if (((infoPtr->dwStyle & TBSTYLE_FLAT) || GetWindowTheme (infoPtr->hwndSelf))
&& (tbcd.nmcd.uItemState & CDIS_HOT))
{
- if ( infoPtr->dwItemCDFlag & TBCDRF_HILITEHOTTRACK )
+ if ( dwItemCDFlag & TBCDRF_HILITEHOTTRACK )
{
COLORREF oldclr;
@@ -1011,7 +1011,7 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_I
DrawThemeBackground (theme, hdc, partId, stateId, &tbcd.nmcd.rc, NULL);
}
else
- TOOLBAR_DrawFrame(infoPtr, &tbcd);
+ TOOLBAR_DrawFrame(infoPtr, &tbcd, dwItemCDFlag);
if (drawSepDropDownArrow)
{
@@ -1032,15 +1032,15 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_I
DrawThemeBackground (theme, hdc, TP_SPLITBUTTONDROPDOWN, stateId, &rcArrow, NULL);
}
else
- TOOLBAR_DrawSepDDArrow(infoPtr, &tbcd, &rcArrow, btnPtr->bDropDownPressed);
+ TOOLBAR_DrawSepDDArrow(infoPtr, &tbcd, &rcArrow, btnPtr->bDropDownPressed, dwItemCDFlag);
}
oldBkMode = SetBkMode (hdc, tbcd.nStringBkMode);
if (!(infoPtr->dwExStyle & TBSTYLE_EX_MIXEDBUTTONS) || (btnPtr->fsStyle & BTNS_SHOWTEXT))
- TOOLBAR_DrawString (infoPtr, &rcText, lpText, &tbcd);
+ TOOLBAR_DrawString (infoPtr, &rcText, lpText, &tbcd, dwItemCDFlag);
SetBkMode (hdc, oldBkMode);
- TOOLBAR_DrawImage(infoPtr, btnPtr, rcBitmap.left, rcBitmap.top, &tbcd);
+ TOOLBAR_DrawImage(infoPtr, btnPtr, rcBitmap.left, rcBitmap.top, &tbcd, dwItemCDFlag);
if (hasDropDownArrow && !drawSepDropDownArrow)
{
@@ -1051,7 +1051,7 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_I
}
else if (tbcd.nmcd.uItemState & (CDIS_SELECTED | CDIS_CHECKED))
{
- offset = (infoPtr->dwItemCDFlag & TBCDRF_NOOFFSET) ? 0 : 1;
+ offset = (dwItemCDFlag & TBCDRF_NOOFFSET) ? 0 : 1;
TOOLBAR_DrawArrow(hdc, rcArrow.left + offset, rcArrow.top + offset + (rcArrow.bottom - rcArrow.top - ARROW_HEIGHT) / 2, comctl32_color.clrBtnText);
}
else
@@ -1076,6 +1076,7 @@ TOOLBAR_Refresh (HWND hwnd, HDC hdc, PAI
RECT rcTemp, rcClient;
NMTBCUSTOMDRAW tbcd;
DWORD ntfret;
+ DWORD dwBaseCustDraw;
/* the app has told us not to redraw the toolbar */
if (!infoPtr->bDoRedraw)
@@ -1101,7 +1102,7 @@ TOOLBAR_Refresh (HWND hwnd, HDC hdc, PAI
tbcd.nmcd.hdc = hdc;
tbcd.nmcd.rc = ps->rcPaint;
ntfret = TOOLBAR_SendNotify(&tbcd.nmcd.hdr, infoPtr, NM_CUSTOMDRAW);
- infoPtr->dwBaseCustDraw = ntfret & 0xffff;
+ dwBaseCustDraw = ntfret & 0xffff;
GetClientRect(hwnd, &rcClient);
@@ -1120,7 +1121,7 @@ TOOLBAR_Refresh (HWND hwnd, HDC hdc, PAI
bDraw &= IntersectRect(&rcTemp, &(ps->rcPaint), &(btnPtr->rect));
bDraw = (btnPtr->fsState & TBSTATE_HIDDEN) ? FALSE : bDraw;
if (bDraw)
- TOOLBAR_DrawButton (hwnd, btnPtr, hdc);
+ TOOLBAR_DrawButton(hwnd, btnPtr, hdc, dwBaseCustDraw);
}
/* draw insert mark if required */
@@ -1137,7 +1138,7 @@ TOOLBAR_Refresh (HWND hwnd, HDC hdc, PAI
COMCTL32_DrawInsertMark(hdc, &rcInsertMark, infoPtr->clrInsertMark, FALSE);
}
- if (infoPtr->dwBaseCustDraw & CDRF_NOTIFYPOSTPAINT)
+ if (dwBaseCustDraw & CDRF_NOTIFYPOSTPAINT)
{
ZeroMemory (&tbcd, sizeof(NMTBCUSTOMDRAW));
tbcd.nmcd.dwDrawStage = CDDS_POSTPAINT;
@@ -5435,6 +5436,7 @@ TOOLBAR_EraseBackground (HWND hwnd, WPAR
INT ret = FALSE;
DWORD ntfret;
HTHEME theme = GetWindowTheme (hwnd);
+ DWORD dwEraseCustDraw = 0;
/* the app has told us not to redraw the toolbar */
if (!infoPtr->bDoRedraw)
@@ -5445,10 +5447,10 @@ TOOLBAR_EraseBackground (HWND hwnd, WPAR
tbcd.nmcd.dwDrawStage = CDDS_PREERASE;
tbcd.nmcd.hdc = (HDC)wParam;
ntfret = TOOLBAR_SendNotify (&tbcd.nmcd.hdr, infoPtr, NM_CUSTOMDRAW);
- infoPtr->dwBaseCustDraw = ntfret & 0xffff;
+ dwEraseCustDraw = ntfret & 0xffff;
/* FIXME: in general the return flags *can* be or'ed together */
- switch (infoPtr->dwBaseCustDraw)
+ switch (dwEraseCustDraw)
{
case CDRF_DODEFAULT:
break;
@@ -5479,14 +5481,13 @@ TOOLBAR_EraseBackground (HWND hwnd, WPAR
if (!ret)
ret = DefWindowProcW (hwnd, WM_ERASEBKGND, wParam, lParam);
- if ((infoPtr->dwStyle & TBSTYLE_CUSTOMERASE) &&
- (infoPtr->dwBaseCustDraw & CDRF_NOTIFYPOSTERASE)) {
+ if (dwEraseCustDraw & CDRF_NOTIFYPOSTERASE) {
ZeroMemory (&tbcd, sizeof(NMTBCUSTOMDRAW));
tbcd.nmcd.dwDrawStage = CDDS_POSTERASE;
tbcd.nmcd.hdc = (HDC)wParam;
ntfret = TOOLBAR_SendNotify (&tbcd.nmcd.hdr, infoPtr, NM_CUSTOMDRAW);
- infoPtr->dwBaseCustDraw = ntfret & 0xffff;
- switch (infoPtr->dwBaseCustDraw)
+ dwEraseCustDraw = ntfret & 0xffff;
+ switch (dwEraseCustDraw)
{
case CDRF_DODEFAULT:
break;
--
1.4.2.3
More information about the wine-patches
mailing list