diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c index bf4e8b19d55..ac426c0bf45 100644 --- a/dlls/comctl32/monthcal.c +++ b/dlls/comctl32/monthcal.c @@ -94,12 +94,9 @@ typedef struct { HWND hwndSelf; DWORD dwStyle; /* cached GWL_STYLE */ - COLORREF bk; - COLORREF txt; - COLORREF titlebk; - COLORREF titletxt; - COLORREF monthbk; - COLORREF trailingtxt; + + COLORREF colors[MCSC_TRAILINGTEXT+1]; + HFONT hFont; HFONT hBoldFont; int textHeight; @@ -687,8 +684,8 @@ static void MONTHCAL_DrawDay(const MONTHCAL_INFO *infoPtr, HDC hdc, const SYSTEM TRACE("%d %d %d\n", st->wDay, infoPtr->minSel.wDay, infoPtr->maxSel.wDay); TRACE("%s\n", wine_dbgstr_rect(&r)); - oldCol = SetTextColor(hdc, infoPtr->monthbk); - oldBk = SetBkColor(hdc, infoPtr->trailingtxt); + oldCol = SetTextColor(hdc, infoPtr->colors[MCSC_MONTHBK]); + oldBk = SetBkColor(hdc, infoPtr->colors[MCSC_TRAILINGTEXT]); hbr = GetSysColorBrush(COLOR_HIGHLIGHT); FillRect(hdc, &r, hbr); @@ -762,13 +759,13 @@ static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRU SIZE sz; /* fill header box */ - hbr = CreateSolidBrush(infoPtr->titlebk); + hbr = CreateSolidBrush(infoPtr->colors[MCSC_TITLEBK]); FillRect(hdc, title, hbr); DeleteObject(hbr); /* month/year string */ - SetBkColor(hdc, infoPtr->titlebk); - SetTextColor(hdc, infoPtr->titletxt); + SetBkColor(hdc, infoPtr->colors[MCSC_TITLEBK]); + SetTextColor(hdc, infoPtr->colors[MCSC_TITLETEXT]); SelectObject(hdc, infoPtr->hBoldFont); GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SMONTHNAME1 + st->wMonth - 1, @@ -868,7 +865,7 @@ static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, con r = infoPtr->calendars[calIdx].weeknums; /* erase whole week numbers area */ - hbr = CreateSolidBrush(infoPtr->monthbk); + hbr = CreateSolidBrush(infoPtr->colors[MCSC_MONTHBK]); FillRect(hdc, &r, hbr); DeleteObject(hbr); @@ -966,7 +963,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); - hbr = CreateSolidBrush(infoPtr->monthbk); + hbr = CreateSolidBrush(infoPtr->colors[MCSC_MONTHBK]); FillRect(hdc, &fill_bk_rect, hbr); DeleteObject(hbr); @@ -984,8 +981,8 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const /* 1. draw day abbreviations */ SelectObject(hdc, infoPtr->hFont); - SetBkColor(hdc, infoPtr->monthbk); - SetTextColor(hdc, infoPtr->trailingtxt); + SetBkColor(hdc, infoPtr->colors[MCSC_MONTHBK]); + SetTextColor(hdc, infoPtr->colors[MCSC_TRAILINGTEXT]); /* rectangle to draw a single day abbreviation within */ r = infoPtr->calendars[calIdx].wdays; r.right = r.left + infoPtr->width_increment; @@ -1002,7 +999,7 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const { SYSTEMTIME st_max; - SetTextColor(hdc, infoPtr->trailingtxt); + SetTextColor(hdc, infoPtr->colors[MCSC_TRAILINGTEXT]); /* draw prev month */ if (calIdx == 0) @@ -1038,7 +1035,7 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const } /* 3. current month */ - SetTextColor(hdc, infoPtr->txt); + SetTextColor(hdc, infoPtr->colors[MCSC_TEXT]); st = *date; st.wDay = 1; mask = 1; @@ -1116,69 +1113,31 @@ MONTHCAL_GetMinReqRect(const MONTHCAL_INFO *infoPtr, RECT *rect) return TRUE; } -static LRESULT -MONTHCAL_GetColor(const MONTHCAL_INFO *infoPtr, INT index) +static COLORREF +MONTHCAL_GetColor(const MONTHCAL_INFO *infoPtr, UINT index) { - TRACE("\n"); + TRACE("%p, %d\n", infoPtr, index); - switch(index) { - case MCSC_BACKGROUND: - return infoPtr->bk; - case MCSC_TEXT: - return infoPtr->txt; - case MCSC_TITLEBK: - return infoPtr->titlebk; - case MCSC_TITLETEXT: - return infoPtr->titletxt; - case MCSC_MONTHBK: - return infoPtr->monthbk; - case MCSC_TRAILINGTEXT: - return infoPtr->trailingtxt; - } - - return -1; + if (index > MCSC_TRAILINGTEXT) return -1; + return infoPtr->colors[index]; } - static LRESULT -MONTHCAL_SetColor(MONTHCAL_INFO *infoPtr, INT index, COLORREF color) +MONTHCAL_SetColor(MONTHCAL_INFO *infoPtr, UINT index, COLORREF color) { - COLORREF prev = -1; + COLORREF prev; - TRACE("%d: color %08x\n", index, color); + TRACE("%p, %d: color %08x\n", infoPtr, index, color); - switch(index) { - case MCSC_BACKGROUND: - prev = infoPtr->bk; - infoPtr->bk = color; - break; - case MCSC_TEXT: - prev = infoPtr->txt; - infoPtr->txt = color; - break; - case MCSC_TITLEBK: - prev = infoPtr->titlebk; - infoPtr->titlebk = color; - break; - case MCSC_TITLETEXT: - prev=infoPtr->titletxt; - infoPtr->titletxt = color; - break; - case MCSC_MONTHBK: - prev = infoPtr->monthbk; - infoPtr->monthbk = color; - break; - case MCSC_TRAILINGTEXT: - prev = infoPtr->trailingtxt; - infoPtr->trailingtxt = color; - break; - } + if (index > MCSC_TRAILINGTEXT) return -1; + + prev = infoPtr->colors[index]; + infoPtr->colors[index] = color; InvalidateRect(infoPtr->hwndSelf, NULL, index == MCSC_BACKGROUND ? TRUE : FALSE); return prev; } - static LRESULT MONTHCAL_GetMonthDelta(const MONTHCAL_INFO *infoPtr) { @@ -2284,7 +2243,7 @@ MONTHCAL_EraseBkgnd(const MONTHCAL_INFO *infoPtr, HDC hdc) if (!GetClipBox(hdc, &rc)) return FALSE; /* fill background */ - hbr = CreateSolidBrush (infoPtr->bk); + hbr = CreateSolidBrush (infoPtr->colors[MCSC_BACKGROUND]); FillRect(hdc, &rc, hbr); DeleteObject(hbr); @@ -2574,12 +2533,12 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs) infoPtr->monthdayState = Alloc(infoPtr->monthRange * sizeof(MONTHDAYSTATE)); if (!infoPtr->monthdayState) goto fail; - infoPtr->titlebk = comctl32_color.clrActiveCaption; - infoPtr->titletxt = comctl32_color.clrWindow; - infoPtr->monthbk = comctl32_color.clrWindow; - infoPtr->trailingtxt = comctl32_color.clrGrayText; - infoPtr->bk = comctl32_color.clrWindow; - infoPtr->txt = comctl32_color.clrWindowText; + infoPtr->colors[MCSC_BACKGROUND] = comctl32_color.clrWindow; + infoPtr->colors[MCSC_TEXT] = comctl32_color.clrWindowText; + infoPtr->colors[MCSC_TITLEBK] = comctl32_color.clrActiveCaption; + infoPtr->colors[MCSC_TITLETEXT] = comctl32_color.clrWindow; + infoPtr->colors[MCSC_MONTHBK] = comctl32_color.clrWindow; + infoPtr->colors[MCSC_TRAILINGTEXT] = comctl32_color.clrGrayText; infoPtr->minSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate; diff --git a/dlls/comctl32/tests/monthcal.c b/dlls/comctl32/tests/monthcal.c index a522bd76dfe..f3db5220f86 100644 --- a/dlls/comctl32/tests/monthcal.c +++ b/dlls/comctl32/tests/monthcal.c @@ -85,45 +85,6 @@ static const struct message create_monthcal_multi_sel_style_seq[] = { { 0 } }; -static const struct message monthcal_color_seq[] = { - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_BACKGROUND, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_MONTHBK, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TEXT, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TEXT, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TEXT, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLEBK, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TITLETEXT, 0}, - - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, RGB(0,0,0)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, 0}, - { MCM_SETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, RGB(255,255,255)}, - { MCM_GETCOLOR, sent|wparam|lparam, MCSC_TRAILINGTEXT, 0}, - { 0 } -}; - static const struct message monthcal_curr_date_seq[] = { { MCM_SETCURSEL, sent|wparam, 0}, { WM_PAINT, sent|wparam|lparam|defwinproc, 0, 0}, @@ -613,75 +574,76 @@ static HWND create_monthcal_control(DWORD style) static void test_color(void) { - int res, temp; + COLORREF color, prev; HWND hwnd; hwnd = create_monthcal_control(0); - flush_sequences(sequences, NUM_MSG_SEQUENCES); + /* invalid color index */ + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT + 1, 0); + expect(-1, color); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TRAILINGTEXT + 1, RGB(255,255,255)); + expect(-1, prev); - /* Setter and Getters for color*/ - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_BACKGROUND, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_BACKGROUND, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_BACKGROUND, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_BACKGROUND, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_BACKGROUND, 0); - expect(RGB(255,255,255), temp); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_BACKGROUND, 0); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_BACKGROUND, RGB(0,0,0)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_BACKGROUND, 0); + expect(RGB(0,0,0), color); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_BACKGROUND, RGB(255,255,255)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_BACKGROUND, 0); + expect(RGB(255,255,255), color); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_MONTHBK, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_MONTHBK, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_MONTHBK, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_MONTHBK, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_MONTHBK, 0); - expect(RGB(255,255,255), temp); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_MONTHBK, 0); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_MONTHBK, RGB(0,0,0)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_MONTHBK, 0); + expect(RGB(0,0,0), color); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_MONTHBK, RGB(255,255,255)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_MONTHBK, 0); + expect(RGB(255,255,255), color); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TEXT, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TEXT, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TEXT, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TEXT, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TEXT, 0); - expect(RGB(255,255,255), temp); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TEXT, 0); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TEXT, RGB(0,0,0)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TEXT, 0); + expect(RGB(0,0,0), color); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TEXT, RGB(255,255,255)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TEXT, 0); + expect(RGB(255,255,255), color); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLEBK, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLEBK, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLEBK, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLEBK, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLEBK, 0); - expect(RGB(255,255,255), temp); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLEBK, 0); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLEBK, RGB(0,0,0)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLEBK, 0); + expect(RGB(0,0,0), color); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLEBK, RGB(255,255,255)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLEBK, 0); + expect(RGB(255,255,255), color); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLETEXT, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLETEXT, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLETEXT, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLETEXT, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLETEXT, 0); - expect(RGB(255,255,255), temp); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLETEXT, 0); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLETEXT, RGB(0,0,0)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLETEXT, 0); + expect(RGB(0,0,0), color); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TITLETEXT, RGB(255,255,255)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TITLETEXT, 0); + expect(RGB(255,255,255), color); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT, 0); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TRAILINGTEXT, RGB(0,0,0)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT, 0); - expect(RGB(0,0,0), temp); - res = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TRAILINGTEXT, RGB(255,255,255)); - expect(temp, res); - temp = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT, 0); - expect(RGB(255,255,255), temp); - - ok_sequence(sequences, MONTHCAL_SEQ_INDEX, monthcal_color_seq, "monthcal color", FALSE); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT, 0); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TRAILINGTEXT, RGB(0,0,0)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT, 0); + expect(RGB(0,0,0), color); + prev = SendMessage(hwnd, MCM_SETCOLOR, MCSC_TRAILINGTEXT, RGB(255,255,255)); + expect(color, prev); + color = SendMessage(hwnd, MCM_GETCOLOR, MCSC_TRAILINGTEXT, 0); + expect(RGB(255,255,255), color); DestroyWindow(hwnd); }