[PATCH 13/21] Simplify parameter set of day of week calculation helper
Nikolay Sivov
bunglehead at gmail.com
Sat Oct 10 19:28:09 CDT 2009
---
dlls/comctl32/comctl32.h | 2 +-
dlls/comctl32/datetime.c | 6 +--
dlls/comctl32/monthcal.c | 70 ++++++++++++++++++++++-----------------------
3 files changed, 37 insertions(+), 41 deletions(-)
diff --git a/dlls/comctl32/comctl32.h b/dlls/comctl32/comctl32.h
index 4cad907..3d172ae 100644
--- a/dlls/comctl32/comctl32.h
+++ b/dlls/comctl32/comctl32.h
@@ -231,7 +231,7 @@ extern void UPDOWN_Unregister(void);
int MONTHCAL_MonthLength(int month, int year);
-int MONTHCAL_CalculateDayOfWeek(WORD day, WORD month, WORD year);
+int MONTHCAL_CalculateDayOfWeek(SYSTEMTIME *date, BOOL inplace);
extern void THEMING_Initialize(void);
extern void THEMING_Uninitialize(void);
diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c
index 0165166..f00b588 100644
--- a/dlls/comctl32/datetime.c
+++ b/dlls/comctl32/datetime.c
@@ -88,7 +88,7 @@ typedef struct
/* in monthcal.c */
extern int MONTHCAL_MonthLength(int month, int year);
-extern int MONTHCAL_CalculateDayOfWeek(WORD day, WORD month, WORD year);
+extern int MONTHCAL_CalculateDayOfWeek(SYSTEMTIME *date, BOOL inplace);
/* this list of defines is closely related to `allowedformatchars' defined
* in datetime.c; the high nibble indicates the `base type' of the format
@@ -177,9 +177,7 @@ DATETIME_SetSystemTime (DATETIME_INFO *infoPtr, DWORD flag, const SYSTEMTIME *sy
infoPtr->dateValid = TRUE;
infoPtr->date = *systime;
/* always store a valid day of week */
- infoPtr->date.wDayOfWeek =
- MONTHCAL_CalculateDayOfWeek(infoPtr->date.wDay, infoPtr->date.wMonth,
- infoPtr->date.wYear);
+ MONTHCAL_CalculateDayOfWeek(&infoPtr->date, TRUE);
SendMessageW (infoPtr->hMonthCal, MCM_SETCURSEL, 0, (LPARAM)(&infoPtr->date));
SendMessageW (infoPtr->hwndCheckbut, BM_SETCHECK, BST_CHECKED, 0);
diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index 599c5e8..06e2e1e 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -406,26 +406,24 @@ static BOOL MONTHCAL_ValidateTime(const SYSTEMTIME *time)
/* Returns the day in the week
*
* PARAMETERS
- * [i] day : day of month [1, 31]
- * [I] month : month number [1, 12]
- * [I] year : year value
+ * [i] date : input date
+ * [I] inplace : set calculated value back to date structure
*
* RETURN VALUE
* day of week in SYSTEMTIME format: (0 == sunday,..., 6 == saturday)
*/
-int MONTHCAL_CalculateDayOfWeek(WORD day, WORD month, WORD year)
+int MONTHCAL_CalculateDayOfWeek(SYSTEMTIME *date, BOOL inplace)
{
+ SYSTEMTIME st = st_null;
FILETIME ft;
- SYSTEMTIME st;
- st.wYear = year;
- st.wMonth = month;
- st.wDay = day;
- st.wHour = st.wMinute = st.wSecond = st.wMilliseconds = 0;
+ MONTHCAL_CopyDate(date, &st);
SystemTimeToFileTime(&st, &ft);
FileTimeToSystemTime(&ft, &st);
+ if (inplace) date->wDayOfWeek = st.wDayOfWeek;
+
return st.wDayOfWeek;
}
@@ -437,8 +435,7 @@ static inline void MONTHCAL_GetNextMonth(SYSTEMTIME *date)
date->wMonth = 1;
date->wYear++;
}
- date->wDayOfWeek = MONTHCAL_CalculateDayOfWeek(date->wDay, date->wMonth,
- date->wYear);
+ MONTHCAL_CalculateDayOfWeek(date, TRUE);
}
/* properly updates date to point on prev month */
@@ -449,16 +446,17 @@ static inline void MONTHCAL_GetPrevMonth(SYSTEMTIME *date)
date->wMonth = 12;
date->wYear--;
}
- date->wDayOfWeek = MONTHCAL_CalculateDayOfWeek(date->wDay, date->wMonth,
- date->wYear);
+ MONTHCAL_CalculateDayOfWeek(date, TRUE);
}
/* Returns full date for a first currently visible day */
static void MONTHCAL_GetMinDate(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *date)
{
+ SYSTEMTIME st_first = infoPtr->curSel;
int firstDay;
- firstDay = MONTHCAL_CalculateDayOfWeek(1, infoPtr->curSel.wMonth, infoPtr->curSel.wYear);
+ st_first.wDay = 1;
+ firstDay = MONTHCAL_CalculateDayOfWeek(&st_first, FALSE);
*date = infoPtr->curSel;
MONTHCAL_GetPrevMonth(date);
@@ -470,8 +468,7 @@ static void MONTHCAL_GetMinDate(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *date)
date->wDay -= 7;
/* fix day of week */
- date->wDayOfWeek = MONTHCAL_CalculateDayOfWeek(date->wDay, date->wMonth,
- date->wYear);
+ MONTHCAL_CalculateDayOfWeek(date, TRUE);
}
/* Returns full date for a last currently visible day */
@@ -488,8 +485,7 @@ static void MONTHCAL_GetMaxDate(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *date)
MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear);
/* fix day of week */
- date->wDayOfWeek = MONTHCAL_CalculateDayOfWeek(date->wDay, date->wMonth,
- date->wYear);
+ MONTHCAL_CalculateDayOfWeek(date, TRUE);
}
/* From a given point, calculate the row (weekpos), column(daypos)
@@ -500,6 +496,7 @@ static int MONTHCAL_CalcDayFromPos(const MONTHCAL_INFO *infoPtr, int x, int y,
{
int retval, firstDay;
RECT rcClient;
+ SYSTEMTIME st = infoPtr->curSel;
GetClientRect(infoPtr->hwndSelf, &rcClient);
@@ -512,7 +509,8 @@ static int MONTHCAL_CalcDayFromPos(const MONTHCAL_INFO *infoPtr, int x, int y,
*daypos = (x - infoPtr->days.left ) / infoPtr->width_increment;
*weekpos = (y - infoPtr->days.top ) / infoPtr->height_increment;
- firstDay = (MONTHCAL_CalculateDayOfWeek(1, infoPtr->curSel.wMonth, infoPtr->curSel.wYear)+6 - infoPtr->firstDay)%7;
+ st.wDay = 1;
+ firstDay = (MONTHCAL_CalculateDayOfWeek(&st, FALSE) + 6 - infoPtr->firstDay) % 7;
retval = *daypos + (7 * *weekpos) - firstDay;
return retval;
}
@@ -529,10 +527,12 @@ static int MONTHCAL_CalcDayFromPos(const MONTHCAL_INFO *infoPtr, int x, int y,
static void MONTHCAL_CalcDayXY(const MONTHCAL_INFO *infoPtr,
const SYSTEMTIME *date, int *x, int *y)
{
+ SYSTEMTIME st = infoPtr->curSel;
LONG cmp;
int first;
- first = (MONTHCAL_CalculateDayOfWeek(1, infoPtr->curSel.wMonth, infoPtr->curSel.wYear) +6 - infoPtr->firstDay)%7;
+ st.wDay = 1;
+ first = (MONTHCAL_CalculateDayOfWeek(&st, FALSE) + 6 - infoPtr->firstDay) % 7;
cmp = MONTHCAL_CompareMonths(date, &infoPtr->curSel);
@@ -985,6 +985,7 @@ static void MONTHCAL_Refresh(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT
if(infoPtr->dwStyle & MCS_WEEKNUMBERS) {
static const WCHAR fmt_weekW[] = { '%','d',0 }; /* week numbers format */
int mindays, weeknum, weeknum1;
+ SYSTEMTIME st = infoPtr->curSel;
/* Rules what week to call the first week of a new year:
LOCALE_IFIRSTWEEKOFYEAR == 0 (e.g US?):
@@ -1009,7 +1010,8 @@ static void MONTHCAL_Refresh(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT
if (infoPtr->curSel.wMonth < 2)
{
/* calculate all those exceptions for january */
- weeknum1 = MONTHCAL_CalculateDayOfWeek(1, 1, infoPtr->curSel.wYear);
+ st.wDay = st.wMonth = 1;
+ weeknum1 = MONTHCAL_CalculateDayOfWeek(&st, FALSE);
if ((infoPtr->firstDay - weeknum1) % 7 > mindays)
weeknum = 1;
else
@@ -1018,9 +1020,10 @@ static void MONTHCAL_Refresh(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT
for(i = 0; i < 11; i++)
weeknum += MONTHCAL_MonthLength(i+1, infoPtr->curSel.wYear - 1);
- weeknum += startofprescal + 7;
- weeknum /= 7;
- weeknum1 = MONTHCAL_CalculateDayOfWeek(1, 1, infoPtr->curSel.wYear - 1);
+ weeknum += startofprescal + 7;
+ weeknum /= 7;
+ st.wYear -= 1;
+ weeknum1 = MONTHCAL_CalculateDayOfWeek(&st, FALSE);
if ((infoPtr->firstDay - weeknum1) % 7 > mindays) weeknum++;
}
}
@@ -1032,7 +1035,8 @@ static void MONTHCAL_Refresh(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT
weeknum += startofprescal + 7;
weeknum /= 7;
- weeknum1 = MONTHCAL_CalculateDayOfWeek(1, 1, infoPtr->curSel.wYear);
+ st.wDay = st.wMonth = 1;
+ weeknum1 = MONTHCAL_CalculateDayOfWeek(&st, FALSE);
if ((infoPtr->firstDay - weeknum1) % 7 > mindays) weeknum++;
}
@@ -1272,11 +1276,10 @@ MONTHCAL_GetMonthRange(const MONTHCAL_INFO *infoPtr, DWORD flag, SYSTEMTIME *st)
}
else
st[0].wDay = 1;
- st[0].wDayOfWeek = MONTHCAL_CalculateDayOfWeek(1, st[0].wMonth, st[0].wYear);
+ MONTHCAL_CalculateDayOfWeek(&st[0], TRUE);
st[1].wDay = MONTHCAL_MonthLength(st[1].wMonth, st[1].wYear);
- st[1].wDayOfWeek = MONTHCAL_CalculateDayOfWeek(st[1].wDay, st[1].wMonth,
- st[1].wYear);
+ MONTHCAL_CalculateDayOfWeek(&st[1], TRUE);
/* a single current month used */
return 1;
}
@@ -1503,12 +1506,8 @@ MONTHCAL_SetSelRange(MONTHCAL_INFO *infoPtr, SYSTEMTIME *range)
}
/* update day of week */
- infoPtr->minSel.wDayOfWeek =
- MONTHCAL_CalculateDayOfWeek(infoPtr->minSel.wDay, infoPtr->minSel.wMonth,
- infoPtr->minSel.wYear);
- infoPtr->maxSel.wDayOfWeek =
- MONTHCAL_CalculateDayOfWeek(infoPtr->maxSel.wDay, infoPtr->maxSel.wMonth,
- infoPtr->maxSel.wYear);
+ MONTHCAL_CalculateDayOfWeek(&infoPtr->minSel, TRUE);
+ MONTHCAL_CalculateDayOfWeek(&infoPtr->maxSel, TRUE);
/* redraw if bounds changed */
/* FIXME: no actual need to redraw everything */
@@ -1667,8 +1666,7 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
lpht->st.wDay = day;
}
/* always update day of week */
- lpht->st.wDayOfWeek = MONTHCAL_CalculateDayOfWeek(lpht->st.wDay, lpht->st.wMonth,
- lpht->st.wYear);
+ MONTHCAL_CalculateDayOfWeek(&lpht->st, TRUE);
goto done;
}
if(PtInRect(&infoPtr->todayrect, lpht->pt)) {
--
1.5.6.5
--=-oJH9Lvj3udCpNLZjMVjy--
More information about the wine-patches
mailing list