comctl32/monthcal: Get rid of goto jumps in hit test helper.
This commit is contained in:
parent
8ea515c872
commit
34fba5a2d2
|
@ -1618,17 +1618,16 @@ static INT MONTHCAL_GetCalendarFromPoint(const MONTHCAL_INFO *infoPtr, const POI
|
||||||
static LRESULT
|
static LRESULT
|
||||||
MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
|
MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
|
||||||
{
|
{
|
||||||
UINT x,y;
|
|
||||||
DWORD retval;
|
|
||||||
INT day, wday, wnum, calIdx;
|
INT day, wday, wnum, calIdx;
|
||||||
SYSTEMTIME ht_month;
|
SYSTEMTIME ht_month;
|
||||||
|
UINT x, y;
|
||||||
|
|
||||||
if(!lpht || lpht->cbSize < MCHITTESTINFO_V1_SIZE) return -1;
|
if(!lpht || lpht->cbSize < MCHITTESTINFO_V1_SIZE) return -1;
|
||||||
|
|
||||||
x = lpht->pt.x;
|
x = lpht->pt.x;
|
||||||
y = lpht->pt.y;
|
y = lpht->pt.y;
|
||||||
|
|
||||||
ZeroMemory(&lpht->st, sizeof(lpht->st));
|
memset(&lpht->st, 0, sizeof(lpht->st));
|
||||||
|
|
||||||
/* Comment in for debugging...
|
/* Comment in for debugging...
|
||||||
TRACE("%d %d wd[%d %d %d %d] d[%d %d %d %d] t[%d %d %d %d] wn[%d %d %d %d]\n", x, y,
|
TRACE("%d %d wd[%d %d %d %d] d[%d %d %d %d] t[%d %d %d %d] wn[%d %d %d %d]\n", x, y,
|
||||||
|
@ -1644,47 +1643,58 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
|
||||||
|
|
||||||
/* guess in what calendar we are */
|
/* guess in what calendar we are */
|
||||||
calIdx = MONTHCAL_GetCalendarFromPoint(infoPtr, &lpht->pt);
|
calIdx = MONTHCAL_GetCalendarFromPoint(infoPtr, &lpht->pt);
|
||||||
if (calIdx == -1) goto nocal;
|
if (calIdx == -1)
|
||||||
|
{
|
||||||
|
if (PtInRect(&infoPtr->todayrect, lpht->pt))
|
||||||
|
lpht->uHit = MCHT_TODAYLINK;
|
||||||
|
else
|
||||||
|
/* outside of calendar area? What's left must be background :-) */
|
||||||
|
lpht->uHit = MCHT_CALENDARBK;
|
||||||
|
|
||||||
|
return lpht->uHit;
|
||||||
|
}
|
||||||
|
|
||||||
ht_month = infoPtr->calendars[calIdx].month;
|
ht_month = infoPtr->calendars[calIdx].month;
|
||||||
|
|
||||||
/* are we in the header? */
|
/* are we in the header? */
|
||||||
|
if (PtInRect(&infoPtr->calendars[calIdx].title, lpht->pt)) {
|
||||||
if(PtInRect(&infoPtr->calendars[calIdx].title, lpht->pt)) {
|
|
||||||
/* FIXME: buttons hittesting could be optimized cause maximum
|
/* FIXME: buttons hittesting could be optimized cause maximum
|
||||||
two calendars have buttons */
|
two calendars have buttons */
|
||||||
if(PtInRect(&infoPtr->titlebtnprev, lpht->pt)) {
|
if (calIdx == 0 && PtInRect(&infoPtr->titlebtnprev, lpht->pt))
|
||||||
retval = MCHT_TITLEBTNPREV;
|
{
|
||||||
goto done;
|
lpht->uHit = MCHT_TITLEBTNPREV;
|
||||||
}
|
}
|
||||||
if(PtInRect(&infoPtr->titlebtnnext, lpht->pt)) {
|
else if (PtInRect(&infoPtr->titlebtnnext, lpht->pt))
|
||||||
retval = MCHT_TITLEBTNNEXT;
|
{
|
||||||
goto done;
|
lpht->uHit = MCHT_TITLEBTNNEXT;
|
||||||
}
|
}
|
||||||
if(PtInRect(&infoPtr->calendars[calIdx].titlemonth, lpht->pt)) {
|
else if (PtInRect(&infoPtr->calendars[calIdx].titlemonth, lpht->pt))
|
||||||
retval = MCHT_TITLEMONTH;
|
{
|
||||||
goto done;
|
lpht->uHit = MCHT_TITLEMONTH;
|
||||||
}
|
}
|
||||||
if(PtInRect(&infoPtr->calendars[calIdx].titleyear, lpht->pt)) {
|
else if (PtInRect(&infoPtr->calendars[calIdx].titleyear, lpht->pt))
|
||||||
retval = MCHT_TITLEYEAR;
|
{
|
||||||
goto done;
|
lpht->uHit = MCHT_TITLEYEAR;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
lpht->uHit = MCHT_TITLE;
|
||||||
|
|
||||||
retval = MCHT_TITLE;
|
return lpht->uHit;
|
||||||
goto done;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* days area (including week days and week numbers */
|
||||||
day = MONTHCAL_CalcDayFromPos(infoPtr, x, y, &wday, &wnum);
|
day = MONTHCAL_CalcDayFromPos(infoPtr, x, y, &wday, &wnum);
|
||||||
if(PtInRect(&infoPtr->calendars[calIdx].wdays, lpht->pt)) {
|
if (PtInRect(&infoPtr->calendars[calIdx].wdays, lpht->pt))
|
||||||
retval = MCHT_CALENDARDAY;
|
{
|
||||||
|
lpht->uHit = MCHT_CALENDARDAY;
|
||||||
lpht->st.wYear = ht_month.wYear;
|
lpht->st.wYear = ht_month.wYear;
|
||||||
lpht->st.wMonth = (day < 1)? ht_month.wMonth -1 : ht_month.wMonth;
|
lpht->st.wMonth = (day < 1) ? ht_month.wMonth -1 : ht_month.wMonth;
|
||||||
lpht->st.wDay = (day < 1)?
|
lpht->st.wDay = (day < 1) ?
|
||||||
MONTHCAL_MonthLength(ht_month.wMonth-1, ht_month.wYear) - day : day;
|
MONTHCAL_MonthLength(ht_month.wMonth-1, ht_month.wYear) - day : day;
|
||||||
goto done;
|
|
||||||
}
|
}
|
||||||
if(PtInRect(&infoPtr->calendars[calIdx].weeknums, lpht->pt)) {
|
else if(PtInRect(&infoPtr->calendars[calIdx].weeknums, lpht->pt))
|
||||||
retval = MCHT_CALENDARWEEKNUM;
|
{
|
||||||
|
lpht->uHit = MCHT_CALENDARWEEKNUM;
|
||||||
lpht->st.wYear = ht_month.wYear;
|
lpht->st.wYear = ht_month.wYear;
|
||||||
|
|
||||||
if (day < 1) {
|
if (day < 1) {
|
||||||
|
@ -1704,46 +1714,33 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
lpht->st.wDay = day;
|
lpht->st.wDay = day;
|
||||||
|
|
||||||
goto done;
|
|
||||||
}
|
}
|
||||||
if(PtInRect(&infoPtr->calendars[calIdx].days, lpht->pt))
|
else if(PtInRect(&infoPtr->calendars[calIdx].days, lpht->pt))
|
||||||
{
|
{
|
||||||
lpht->st.wYear = ht_month.wYear;
|
lpht->st.wYear = ht_month.wYear;
|
||||||
lpht->st.wMonth = ht_month.wMonth;
|
lpht->st.wMonth = ht_month.wMonth;
|
||||||
if (day < 1)
|
if (day < 1)
|
||||||
{
|
{
|
||||||
retval = MCHT_CALENDARDATEPREV;
|
lpht->uHit = MCHT_CALENDARDATEPREV;
|
||||||
MONTHCAL_GetPrevMonth(&lpht->st);
|
MONTHCAL_GetPrevMonth(&lpht->st);
|
||||||
lpht->st.wDay = MONTHCAL_MonthLength(lpht->st.wMonth, lpht->st.wYear) + day;
|
lpht->st.wDay = MONTHCAL_MonthLength(lpht->st.wMonth, lpht->st.wYear) + day;
|
||||||
}
|
}
|
||||||
else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear))
|
else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear))
|
||||||
{
|
{
|
||||||
retval = MCHT_CALENDARDATENEXT;
|
lpht->uHit = MCHT_CALENDARDATENEXT;
|
||||||
MONTHCAL_GetNextMonth(&lpht->st);
|
MONTHCAL_GetNextMonth(&lpht->st);
|
||||||
lpht->st.wDay = day - MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear);
|
lpht->st.wDay = day - MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
retval = MCHT_CALENDARDATE;
|
lpht->uHit = MCHT_CALENDARDATE;
|
||||||
lpht->st.wDay = day;
|
lpht->st.wDay = day;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* always update day of week */
|
/* always update day of week */
|
||||||
MONTHCAL_CalculateDayOfWeek(&lpht->st, TRUE);
|
MONTHCAL_CalculateDayOfWeek(&lpht->st, TRUE);
|
||||||
goto done;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nocal:
|
return lpht->uHit;
|
||||||
if(PtInRect(&infoPtr->todayrect, lpht->pt)) {
|
|
||||||
retval = MCHT_TODAYLINK;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Hit nothing special? What's left must be background :-) */
|
|
||||||
retval = MCHT_CALENDARBK;
|
|
||||||
|
|
||||||
done:
|
|
||||||
lpht->uHit = retval;
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MCN_GETDAYSTATE notification helper */
|
/* MCN_GETDAYSTATE notification helper */
|
||||||
|
|
Loading…
Reference in New Issue