Nikolay Sivov : comctl32/monthcal: Get rid of goto jumps in hit test helper .
Alexandre Julliard
julliard at winehq.org
Mon Jul 19 11:05:41 CDT 2010
Module: wine
Branch: master
Commit: 34fba5a2d2c0df771aa2cb4651ff06d2a26c8257
URL: http://source.winehq.org/git/wine.git/?a=commit;h=34fba5a2d2c0df771aa2cb4651ff06d2a26c8257
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun Jul 18 16:16:33 2010 +0400
comctl32/monthcal: Get rid of goto jumps in hit test helper.
---
dlls/comctl32/monthcal.c | 89 ++++++++++++++++++++++------------------------
1 files changed, 43 insertions(+), 46 deletions(-)
diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index 52b3bd4..d2245c3 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -1618,17 +1618,16 @@ static INT MONTHCAL_GetCalendarFromPoint(const MONTHCAL_INFO *infoPtr, const POI
static LRESULT
MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
{
- UINT x,y;
- DWORD retval;
INT day, wday, wnum, calIdx;
SYSTEMTIME ht_month;
+ UINT x, y;
if(!lpht || lpht->cbSize < MCHITTESTINFO_V1_SIZE) return -1;
x = lpht->pt.x;
y = lpht->pt.y;
- ZeroMemory(&lpht->st, sizeof(lpht->st));
+ memset(&lpht->st, 0, sizeof(lpht->st));
/* 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,
@@ -1644,47 +1643,58 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
/* guess in what calendar we are */
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;
/* 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
two calendars have buttons */
- if(PtInRect(&infoPtr->titlebtnprev, lpht->pt)) {
- retval = MCHT_TITLEBTNPREV;
- goto done;
+ if (calIdx == 0 && PtInRect(&infoPtr->titlebtnprev, lpht->pt))
+ {
+ lpht->uHit = MCHT_TITLEBTNPREV;
}
- if(PtInRect(&infoPtr->titlebtnnext, lpht->pt)) {
- retval = MCHT_TITLEBTNNEXT;
- goto done;
+ else if (PtInRect(&infoPtr->titlebtnnext, lpht->pt))
+ {
+ lpht->uHit = MCHT_TITLEBTNNEXT;
}
- if(PtInRect(&infoPtr->calendars[calIdx].titlemonth, lpht->pt)) {
- retval = MCHT_TITLEMONTH;
- goto done;
+ else if (PtInRect(&infoPtr->calendars[calIdx].titlemonth, lpht->pt))
+ {
+ lpht->uHit = MCHT_TITLEMONTH;
}
- if(PtInRect(&infoPtr->calendars[calIdx].titleyear, lpht->pt)) {
- retval = MCHT_TITLEYEAR;
- goto done;
+ else if (PtInRect(&infoPtr->calendars[calIdx].titleyear, lpht->pt))
+ {
+ lpht->uHit = MCHT_TITLEYEAR;
}
+ else
+ lpht->uHit = MCHT_TITLE;
- retval = MCHT_TITLE;
- goto done;
+ return lpht->uHit;
}
+ /* days area (including week days and week numbers */
day = MONTHCAL_CalcDayFromPos(infoPtr, x, y, &wday, &wnum);
- if(PtInRect(&infoPtr->calendars[calIdx].wdays, lpht->pt)) {
- retval = MCHT_CALENDARDAY;
+ if (PtInRect(&infoPtr->calendars[calIdx].wdays, lpht->pt))
+ {
+ lpht->uHit = MCHT_CALENDARDAY;
lpht->st.wYear = ht_month.wYear;
- lpht->st.wMonth = (day < 1)? ht_month.wMonth -1 : ht_month.wMonth;
- lpht->st.wDay = (day < 1)?
+ lpht->st.wMonth = (day < 1) ? ht_month.wMonth -1 : ht_month.wMonth;
+ lpht->st.wDay = (day < 1) ?
MONTHCAL_MonthLength(ht_month.wMonth-1, ht_month.wYear) - day : day;
- goto done;
}
- if(PtInRect(&infoPtr->calendars[calIdx].weeknums, lpht->pt)) {
- retval = MCHT_CALENDARWEEKNUM;
+ else if(PtInRect(&infoPtr->calendars[calIdx].weeknums, lpht->pt))
+ {
+ lpht->uHit = MCHT_CALENDARWEEKNUM;
lpht->st.wYear = ht_month.wYear;
if (day < 1) {
@@ -1704,46 +1714,33 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
}
else
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.wMonth = ht_month.wMonth;
if (day < 1)
{
- retval = MCHT_CALENDARDATEPREV;
+ lpht->uHit = MCHT_CALENDARDATEPREV;
MONTHCAL_GetPrevMonth(&lpht->st);
lpht->st.wDay = MONTHCAL_MonthLength(lpht->st.wMonth, lpht->st.wYear) + day;
}
else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear))
{
- retval = MCHT_CALENDARDATENEXT;
+ lpht->uHit = MCHT_CALENDARDATENEXT;
MONTHCAL_GetNextMonth(&lpht->st);
lpht->st.wDay = day - MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear);
}
else {
- retval = MCHT_CALENDARDATE;
+ lpht->uHit = MCHT_CALENDARDATE;
lpht->st.wDay = day;
}
+
/* always update day of week */
MONTHCAL_CalculateDayOfWeek(&lpht->st, TRUE);
- goto done;
}
-nocal:
- 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;
+ return lpht->uHit;
}
/* MCN_GETDAYSTATE notification helper */
More information about the wine-cvs
mailing list