Nikolay Sivov : comctl32/monthcal: Get rid of empty slots in cached brushes array.
Alexandre Julliard
julliard at winehq.org
Mon Apr 4 10:10:51 CDT 2011
Module: wine
Branch: master
Commit: 6d43470600d06ddae84d5e3aec1c1aeed3e262ab
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6d43470600d06ddae84d5e3aec1c1aeed3e262ab
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sat Apr 2 13:33:48 2011 +0400
comctl32/monthcal: Get rid of empty slots in cached brushes array.
---
dlls/comctl32/monthcal.c | 57 ++++++++++++++++++++++++++++++---------------
1 files changed, 38 insertions(+), 19 deletions(-)
diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index bdc6a45..586bd57 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -83,6 +83,14 @@ enum CachedPen
PenLast
};
+enum CachedBrush
+{
+ BrushTitle = 0,
+ BrushMonth,
+ BrushBackground,
+ BrushLast
+};
+
/* single calendar data */
typedef struct _CALENDAR_INFO
{
@@ -102,7 +110,7 @@ typedef struct
DWORD dwStyle; /* cached GWL_STYLE */
COLORREF colors[MCSC_TRAILINGTEXT+1];
- HBRUSH brushes[MCSC_MONTHBK+1];
+ HBRUSH brushes[BrushLast];
HPEN pens[PenLast];
HFONT hFont;
@@ -694,7 +702,7 @@ static void MONTHCAL_DrawDay(const MONTHCAL_INFO *infoPtr, HDC hdc, const SYSTEM
TRACE("%s\n", wine_dbgstr_rect(&r));
oldCol = SetTextColor(hdc, infoPtr->colors[MCSC_MONTHBK]);
oldBk = SetBkColor(hdc, infoPtr->colors[MCSC_TRAILINGTEXT]);
- FillRect(hdc, &r, infoPtr->brushes[MCSC_TITLEBK]);
+ FillRect(hdc, &r, infoPtr->brushes[BrushTitle]);
selection = 1;
}
@@ -762,7 +770,7 @@ static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRU
SIZE sz;
/* fill header box */
- FillRect(hdc, title, infoPtr->brushes[MCSC_TITLEBK]);
+ FillRect(hdc, title, infoPtr->brushes[BrushTitle]);
/* month/year string */
SetBkColor(hdc, infoPtr->colors[MCSC_TITLEBK]);
@@ -866,7 +874,7 @@ static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, con
r = infoPtr->calendars[calIdx].weeknums;
/* erase whole week numbers area */
- FillRect(hdc, &r, infoPtr->brushes[MCSC_MONTHBK]);
+ FillRect(hdc, &r, infoPtr->brushes[BrushTitle]);
SetTextColor(hdc, infoPtr->colors[MCSC_TITLEBK]);
/* reduce rectangle to one week number */
@@ -1008,7 +1016,7 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const
fill_bk_rect.bottom = infoPtr->calendars[calIdx].days.bottom +
(infoPtr->todayrect.bottom - infoPtr->todayrect.top);
- FillRect(hdc, &fill_bk_rect, infoPtr->brushes[MCSC_MONTHBK]);
+ FillRect(hdc, &fill_bk_rect, infoPtr->brushes[BrushMonth]);
/* draw line under day abbreviations */
old_pen = SelectObject(hdc, infoPtr->pens[PenText]);
@@ -1133,6 +1141,7 @@ MONTHCAL_GetColor(const MONTHCAL_INFO *infoPtr, UINT index)
static LRESULT
MONTHCAL_SetColor(MONTHCAL_INFO *infoPtr, UINT index, COLORREF color)
{
+ enum CachedBrush type;
COLORREF prev;
TRACE("%p, %d: color %08x\n", infoPtr, index, color);
@@ -1143,10 +1152,25 @@ MONTHCAL_SetColor(MONTHCAL_INFO *infoPtr, UINT index, COLORREF color)
infoPtr->colors[index] = color;
/* update cached brush */
- if (index == MCSC_BACKGROUND || index == MCSC_TITLEBK || index == MCSC_MONTHBK)
+ switch (index)
+ {
+ case MCSC_BACKGROUND:
+ type = BrushBackground;
+ break;
+ case MCSC_TITLEBK:
+ type = BrushTitle;
+ break;
+ case MCSC_MONTHBK:
+ type = BrushMonth;
+ break;
+ default:
+ type = BrushLast;
+ }
+
+ if (type != BrushLast)
{
- DeleteObject(infoPtr->brushes[index]);
- infoPtr->brushes[index] = CreateSolidBrush(color);
+ DeleteObject(infoPtr->brushes[type]);
+ infoPtr->brushes[type] = CreateSolidBrush(color);
}
/* update cached pen */
@@ -2261,8 +2285,7 @@ MONTHCAL_EraseBkgnd(const MONTHCAL_INFO *infoPtr, HDC hdc)
if (!GetClipBox(hdc, &rc)) return FALSE;
- /* fill background */
- FillRect(hdc, &rc, infoPtr->brushes[MCSC_BACKGROUND]);
+ FillRect(hdc, &rc, infoPtr->brushes[BrushBackground]);
return TRUE;
}
@@ -2555,9 +2578,9 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs)
infoPtr->colors[MCSC_MONTHBK] = comctl32_color.clrWindow;
infoPtr->colors[MCSC_TRAILINGTEXT] = comctl32_color.clrGrayText;
- infoPtr->brushes[MCSC_BACKGROUND] = CreateSolidBrush(infoPtr->colors[MCSC_BACKGROUND]);
- infoPtr->brushes[MCSC_TITLEBK] = CreateSolidBrush(infoPtr->colors[MCSC_TITLEBK]);
- infoPtr->brushes[MCSC_MONTHBK] = CreateSolidBrush(infoPtr->colors[MCSC_MONTHBK]);
+ infoPtr->brushes[BrushBackground] = CreateSolidBrush(infoPtr->colors[MCSC_BACKGROUND]);
+ infoPtr->brushes[BrushTitle] = CreateSolidBrush(infoPtr->colors[MCSC_TITLEBK]);
+ infoPtr->brushes[BrushMonth] = CreateSolidBrush(infoPtr->colors[MCSC_MONTHBK]);
infoPtr->pens[PenRed] = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
infoPtr->pens[PenText] = CreatePen(PS_SOLID, 1, infoPtr->colors[MCSC_TEXT]);
@@ -2596,13 +2619,9 @@ MONTHCAL_Destroy(MONTHCAL_INFO *infoPtr)
SetWindowLongPtrW(infoPtr->hwndSelf, 0, 0);
CloseThemeData (GetWindowTheme (infoPtr->hwndSelf));
-
- DeleteObject(infoPtr->brushes[MCSC_BACKGROUND]);
- DeleteObject(infoPtr->brushes[MCSC_TITLEBK]);
- DeleteObject(infoPtr->brushes[MCSC_MONTHBK]);
- for (i = PenRed; i < PenLast; i++)
- DeleteObject(infoPtr->pens[i]);
+ for (i = 0; i < BrushLast; i++) DeleteObject(infoPtr->brushes[i]);
+ for (i = 0; i < PenLast; i++) DeleteObject(infoPtr->pens[i]);
Free(infoPtr);
return 0;
More information about the wine-cvs
mailing list