|
From: Andreas R. <and...@us...> - 2003-04-08 20:59:09
|
Update of /cvsroot/squeak/squeak/platforms/win32/vm
In directory sc8-pr-cvs1:/tmp/cvs-serv359
Modified Files:
sqWin32Window.c
Log Message:
added direct input support for mouse trails
Index: sqWin32Window.c
===================================================================
RCS file: /cvsroot/squeak/squeak/platforms/win32/vm/sqWin32Window.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** sqWin32Window.c 25 Mar 2003 17:42:49 -0000 1.11
--- sqWin32Window.c 8 Apr 2003 20:59:02 -0000 1.12
***************
*** 145,149 ****
void SetSystemTrayIcon(BOOL on);
! static sqInputEvent *nextEventPut(void);
--- 145,149 ----
void SetSystemTrayIcon(BOOL on);
! static sqInputEvent *sqNextEventPut(void);
***************
*** 213,217 ****
short zDelta = (short) HIWORD(wParam);
if(inputSemaphoreIndex) {
! sqKeyboardEvent *evt = (sqKeyboardEvent*) nextEventPut();
evt->type = EventTypeKeyboard;
evt->timeStamp = lastMessage->time;
--- 213,217 ----
short zDelta = (short) HIWORD(wParam);
if(inputSemaphoreIndex) {
! sqKeyboardEvent *evt = (sqKeyboardEvent*) sqNextEventPut();
evt->type = EventTypeKeyboard;
evt->timeStamp = lastMessage->time;
***************
*** 785,788 ****
--- 785,792 ----
SetupDragAndDrop();
#endif
+ #ifndef NO_DIRECTINPUT
+ /* direct input needs to be set up on per-window basis */
+ SetupDirectInput();
+ #endif
ioScreenSize(); /* compute new rect initially */
}
***************
*** 906,910 ****
case VK_UP : return 30;
case VK_DOWN : return 31;
! /* case VK_RETURN: return 13; */
/* remap appropriately so that we get _all_ key down events */
case 127: return VK_DELETE;
--- 910,914 ----
case VK_UP : return 30;
case VK_DOWN : return 31;
! case VK_RETURN: return 13;
/* remap appropriately so that we get _all_ key down events */
case 127: return VK_DELETE;
***************
*** 926,935 ****
/* Event based primitive set */
/****************************************************************************/
! #define MAX_EVENT_BUFFER 500
static sqInputEvent eventBuffer[MAX_EVENT_BUFFER];
static int eventBufferGet = 0;
static int eventBufferPut = 0;
! static sqInputEvent *nextEventPut(void) {
sqInputEvent *evt;
evt = eventBuffer + eventBufferPut;
--- 930,939 ----
/* Event based primitive set */
/****************************************************************************/
! #define MAX_EVENT_BUFFER 1024
static sqInputEvent eventBuffer[MAX_EVENT_BUFFER];
static int eventBufferGet = 0;
static int eventBufferPut = 0;
! static sqInputEvent *sqNextEventPut(void) {
sqInputEvent *evt;
evt = eventBuffer + eventBufferPut;
***************
*** 937,940 ****
--- 941,945 ----
if (eventBufferGet == eventBufferPut) {
/* buffer overflow; drop the last event */
+ printf("WARNING: event buffer overflow\n");
eventBufferGet = (eventBufferGet + 1) % MAX_EVENT_BUFFER;
}
***************
*** 944,953 ****
int recordMouseEvent(MSG *msg) {
! sqMouseEvent *evt;
int alt, shift, ctrl, red, blue, yellow;
if(!msg) return 0;
- evt = (sqMouseEvent*) nextEventPut();
-
alt = GetKeyState(VK_MENU) & 0x8000;
shift = msg->wParam & MK_SHIFT;
--- 949,957 ----
int recordMouseEvent(MSG *msg) {
! static DWORD firstEventTime = 0;
! sqMouseEvent proto, *event;
int alt, shift, ctrl, red, blue, yellow;
if(!msg) return 0;
alt = GetKeyState(VK_MENU) & 0x8000;
shift = msg->wParam & MK_SHIFT;
***************
*** 975,995 ****
}
/* first the basics */
! evt->type = EventTypeMouse;
! evt->timeStamp = msg->time;
! evt->x = (int)(short)LOWORD(msg->lParam);
! evt->y = (int)(short)HIWORD(msg->lParam);
/* then the buttons */
! evt->buttons = 0;
! evt->buttons |= red ? RedButtonBit : 0;
! evt->buttons |= blue ? BlueButtonBit : 0;
! evt->buttons |= yellow ? YellowButtonBit : 0;
/* then the modifiers */
! evt->modifiers = 0;
! evt->modifiers |= shift ? ShiftKeyBit : 0;
! evt->modifiers |= ctrl ? CtrlKeyBit : 0;
! evt->modifiers |= alt ? CommandKeyBit : 0;
/* clean up reserved */
! evt->reserved1 = 0;
! evt->reserved2 = 0;
return 1;
}
--- 979,1009 ----
}
/* first the basics */
! proto.type = EventTypeMouse;
! proto.timeStamp = msg->time;
! proto.x = (int)(short)LOWORD(msg->lParam);
! proto.y = (int)(short)HIWORD(msg->lParam);
/* then the buttons */
! proto.buttons = 0;
! proto.buttons |= red ? RedButtonBit : 0;
! proto.buttons |= blue ? BlueButtonBit : 0;
! proto.buttons |= yellow ? YellowButtonBit : 0;
/* then the modifiers */
! proto.modifiers = 0;
! proto.modifiers |= shift ? ShiftKeyBit : 0;
! proto.modifiers |= ctrl ? CtrlKeyBit : 0;
! proto.modifiers |= alt ? CommandKeyBit : 0;
/* clean up reserved */
! proto.reserved1 = 0;
! proto.reserved2 = 0;
! #ifndef NO_DIRECTINPUT
! /* get buffered input */
! if(msg->message == WM_MOUSEMOVE) {
! GetBufferedMouseTrail(firstEventTime, msg->time, &proto);
! }
! firstEventTime = msg->time;
! #endif
! /* and lastly, fill in the event itself */
! event = (sqMouseEvent*) sqNextEventPut();
! *event = proto;
return 1;
}
***************
*** 1000,1004 ****
int alt, shift, ctrl, modifiers;
! evt = (sqDragDropFilesEvent*) nextEventPut();
alt = GetKeyState(VK_MENU) & 0x8000;
--- 1014,1018 ----
int alt, shift, ctrl, modifiers;
! evt = (sqDragDropFilesEvent*) sqNextEventPut();
alt = GetKeyState(VK_MENU) & 0x8000;
***************
*** 1065,1069 ****
}
/* first the basics */
! evt = (sqKeyboardEvent*) nextEventPut();
evt->type = EventTypeKeyboard;
evt->timeStamp = msg->time;
--- 1079,1083 ----
}
/* first the basics */
! evt = (sqKeyboardEvent*) sqNextEventPut();
evt->type = EventTypeKeyboard;
evt->timeStamp = msg->time;
***************
*** 1082,1086 ****
if(pressCode == EventKeyDown && virtCode != 0) {
/* generate extra character event */
! sqKeyboardEvent *extra = (sqKeyboardEvent*)nextEventPut();
*extra = *evt;
extra->pressCode = EventKeyChar;
--- 1096,1100 ----
if(pressCode == EventKeyDown && virtCode != 0) {
/* generate extra character event */
! sqKeyboardEvent *extra = (sqKeyboardEvent*)sqNextEventPut();
*extra = *evt;
extra->pressCode = EventKeyChar;
***************
*** 1343,1346 ****
--- 1357,1361 ----
MsgWaitForMultipleObjects(1, &vmWakeUpEvent, FALSE,
microSeconds / 1000, QS_ALLINPUT);
+ ioProcessEvents(); /* keep up with mouse moves etc. */
return microSeconds;
}
***************
*** 1386,1389 ****
--- 1401,1409 ----
DispatchMessage(&msg);
}
+
+ #ifndef NO_DIRECTINPUT
+ /* any buffered mouse input which hasn't been processed is obsolete */
+ DumpBufferedMouseTrail();
+ #endif
/* If we're running in a browser check if the browser's still there */
|