Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
9723e621
Commit
9723e621
authored
Oct 05, 2009
by
Nikolay Sivov
Committed by
Alexandre Julliard
Oct 06, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
comctl32/monthcal: Simplify WM_MOUSEMOVE handler.
parent
f65c2f1d
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
39 additions
and
26 deletions
+39
-26
monthcal.c
dlls/comctl32/monthcal.c
+39
-26
No files found.
dlls/comctl32/monthcal.c
View file @
9723e621
...
...
@@ -328,8 +328,13 @@ static BOOL MONTHCAL_ValidateTime(const SYSTEMTIME *time)
return
TRUE
;
}
/* Copies timestamp part only. Milliseconds are intentionaly not copied
cause it matches required behaviour for current use of this helper */
/* Copies timestamp part only.
*
* PARAMETERS
*
* [I] from : source date
* [O] to : dest date
*/
static
void
MONTHCAL_CopyTime
(
const
SYSTEMTIME
*
from
,
SYSTEMTIME
*
to
)
{
to
->
wHour
=
from
->
wHour
;
...
...
@@ -337,6 +342,21 @@ static void MONTHCAL_CopyTime(const SYSTEMTIME *from, SYSTEMTIME *to)
to
->
wSecond
=
from
->
wSecond
;
}
/* Copies date part only.
*
* PARAMETERS
*
* [I] from : source date
* [O] to : dest date
*/
static
void
MONTHCAL_CopyDate
(
const
SYSTEMTIME
*
from
,
SYSTEMTIME
*
to
)
{
to
->
wYear
=
from
->
wYear
;
to
->
wMonth
=
from
->
wMonth
;
to
->
wDay
=
from
->
wDay
;
to
->
wDayOfWeek
=
from
->
wDayOfWeek
;
}
/* Note:Depending on DST, this may be offset by a day.
Need to find out if we're on a DST place & adjust the clock accordingly.
Above function assumes we have a valid data.
...
...
@@ -437,8 +457,10 @@ static inline void MONTHCAL_CalcPosFromDay(const MONTHCAL_INFO *infoPtr,
- set focused date to given value;
- reset to zero value if NULL passed;
- invalidate previous and new day rectangle only if needed.
Returns TRUE if focused day changed, FALSE otherwise.
*/
static
void
MONTHCAL_SetDayFocus
(
MONTHCAL_INFO
*
infoPtr
,
const
SYSTEMTIME
*
st
)
static
BOOL
MONTHCAL_SetDayFocus
(
MONTHCAL_INFO
*
infoPtr
,
const
SYSTEMTIME
*
st
)
{
RECT
r
;
...
...
@@ -446,7 +468,7 @@ static void MONTHCAL_SetDayFocus(MONTHCAL_INFO *infoPtr, const SYSTEMTIME *st)
{
/* there's nothing to do if it's the same date,
mouse move within same date rectangle case */
if
(
MONTHCAL_IsDateEqual
(
&
infoPtr
->
focusedSel
,
st
))
return
;
if
(
MONTHCAL_IsDateEqual
(
&
infoPtr
->
focusedSel
,
st
))
return
FALSE
;
/* invalidate old focused day */
MONTHCAL_CalcPosFromDay
(
infoPtr
,
infoPtr
->
focusedSel
.
wDay
,
...
...
@@ -468,6 +490,8 @@ static void MONTHCAL_SetDayFocus(MONTHCAL_INFO *infoPtr, const SYSTEMTIME *st)
/* on set invalidates new day, on reset clears previous focused day */
InvalidateRect
(
infoPtr
->
hwndSelf
,
&
r
,
FALSE
);
return
TRUE
;
}
/* day is the day in the month(1 == 1st of the month) */
...
...
@@ -1719,7 +1743,6 @@ MONTHCAL_LButtonDown(MONTHCAL_INFO *infoPtr, LPARAM lParam)
}
case
MCHT_TODAYLINK
:
{
infoPtr
->
firstSel
=
infoPtr
->
todaysDate
;
infoPtr
->
curSel
=
infoPtr
->
todaysDate
;
infoPtr
->
minSel
=
infoPtr
->
todaysDate
;
infoPtr
->
maxSel
=
infoPtr
->
todaysDate
;
...
...
@@ -1733,7 +1756,7 @@ MONTHCAL_LButtonDown(MONTHCAL_INFO *infoPtr, LPARAM lParam)
case
MCHT_CALENDARDATEPREV
:
case
MCHT_CALENDARDATE
:
{
infoPtr
->
firstSel
=
ht
.
st
;
MONTHCAL_CopyDate
(
&
ht
.
st
,
&
infoPtr
->
firstSel
)
;
if
(
infoPtr
->
dwStyle
&
MCS_MULTISELECT
)
{
...
...
@@ -1882,48 +1905,38 @@ MONTHCAL_MouseMove(MONTHCAL_INFO *infoPtr, LPARAM lParam)
st_ht
=
ht
.
st
;
old_focused
=
infoPtr
->
focusedSel
;
MONTHCAL_SetDayFocus
(
infoPtr
,
&
ht
.
st
);
/* if pointer is over focused day still there's nothing to do */
if
(
!
MONTHCAL_SetDayFocus
(
infoPtr
,
&
ht
.
st
))
return
0
;
MONTHCAL_CalcPosFromDay
(
infoPtr
,
ht
.
st
.
wDay
,
ht
.
st
.
wMonth
,
&
r
);
if
(
infoPtr
->
dwStyle
&
MCS_MULTISELECT
)
{
SYSTEMTIME
st
[
2
];
int
i
;
LONG
cmp
;
MONTHCAL_GetSelRange
(
infoPtr
,
st
);
i
=
MONTHCAL_IsDateEqual
(
&
infoPtr
->
firstSel
,
&
st
[
0
])
?
1
:
0
;
cmp
=
MONTHCAL_CompareSystemTime
(
&
st_ht
,
&
infoPtr
->
firstSel
);
if
(
MONTHCAL_IsDateEqual
(
&
infoPtr
->
firstSel
,
&
st
[
1
]))
{
/* If we're still at the first selected date and range is empty, return.
If range isn't empty we should change range to a single firstSel */
if
(
MONTHCAL_IsDateEqual
(
&
infoPtr
->
firstSel
,
&
st_ht
)
&&
MONTHCAL_IsDateEqual
(
&
st
[
0
],
&
st
[
1
]))
goto
done
;
/* new selected date is earlier */
if
(
cmp
==
-
1
)
i
=
0
;
}
MONTHCAL_IsSelRangeValid
(
infoPtr
,
&
st_ht
,
&
infoPtr
->
firstSel
,
&
st_ht
);
if
(
!
MONTHCAL_IsDateEqual
(
&
st
[
i
],
&
st_ht
))
{
st
[
i
]
=
st_ht
;
st
[
0
]
=
infoPtr
->
firstSel
;
/* we should overwrite timestamp here */
MONTHCAL_CopyDate
(
&
st_ht
,
&
st
[
1
]);
MONTHCAL_CopyTime
(
&
infoPtr
->
todaysDate
,
&
st
[
0
]);
MONTHCAL_CopyTime
(
&
infoPtr
->
todaysDate
,
&
st
[
1
]);
/* bounds will be swapped here if needed */
MONTHCAL_SetSelRange
(
infoPtr
,
st
);
}
return
0
;
}
done:
/* only redraw if the currently selected day changed */
/* FIXME: this should specify a rectangle containing only the days that changed */
/* using InvalidateRect */
if
(
!
MONTHCAL_IsDateEqual
(
&
old_focused
,
&
infoPtr
->
focusedSel
))
/* FIXME: this should specify a rectangle containing only the days that changed
using InvalidateRect */
InvalidateRect
(
infoPtr
->
hwndSelf
,
NULL
,
FALSE
);
return
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment