Skip to content

Commit

Permalink
Fixed potential dropped events under DirectInput
Browse files Browse the repository at this point in the history
  • Loading branch information
slouken committed Nov 9, 2002
1 parent ad3118a commit 56158c0
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion src/video/windx5/SDL_dx5events.c
Expand Up @@ -49,7 +49,7 @@ static char rcsid =

/* The keyboard and mouse device input */
#define MAX_INPUTS 16 /* Maximum of 16-1 input devices */
#define INPUT_QSIZE 32 /* Buffer up to 32 input messages */
#define INPUT_QSIZE 512 /* Buffer up to 512 input messages */

static LPDIRECTINPUT dinput = NULL;
static LPDIRECTINPUTDEVICE2 SDL_DIdev[MAX_INPUTS];
Expand Down Expand Up @@ -275,6 +275,7 @@ static void handle_mouse(const int numevents, DIDEVICEOBJECTDATA *ptrbuf)
Sint16 xrel, yrel;
Uint8 state;
Uint8 button;
DWORD timestamp = 0;

/* If we are in windowed mode, Windows is taking care of the mouse */
if ( (SDL_PublicSurface->flags & SDL_OPENGL) ||
Expand Down Expand Up @@ -363,9 +364,27 @@ static void handle_mouse(const int numevents, DIDEVICEOBJECTDATA *ptrbuf)
for ( i=0; i<(int)numevents; ++i ) {
switch (ptrbuf[i].dwOfs) {
case DIMOFS_X:
if ( timestamp != ptrbuf[i].dwTimeStamp ) {
if ( xrel || yrel ) {
posted = SDL_PrivateMouseMotion(
0, 1, xrel, yrel);
xrel = 0;
yrel = 0;
}
timestamp = ptrbuf[i].dwTimeStamp;
}
xrel += (Sint16)ptrbuf[i].dwData;
break;
case DIMOFS_Y:
if ( timestamp != ptrbuf[i].dwTimeStamp ) {
if ( xrel || yrel ) {
posted = SDL_PrivateMouseMotion(
0, 1, xrel, yrel);
xrel = 0;
yrel = 0;
}
timestamp = ptrbuf[i].dwTimeStamp;
}
yrel += (Sint16)ptrbuf[i].dwData;
break;
case DIMOFS_Z:
Expand All @@ -375,6 +394,7 @@ static void handle_mouse(const int numevents, DIDEVICEOBJECTDATA *ptrbuf)
xrel = 0;
yrel = 0;
}
timestamp = 0;
if((int)ptrbuf[i].dwData > 0)
button = SDL_BUTTON_WHEELUP;
else
Expand All @@ -394,6 +414,7 @@ static void handle_mouse(const int numevents, DIDEVICEOBJECTDATA *ptrbuf)
xrel = 0;
yrel = 0;
}
timestamp = 0;
button = (Uint8)(ptrbuf[i].dwOfs-DIMOFS_BUTTON0)+1;
/* Button #2 on two button mice is button 3
(the middle button is button 2)
Expand Down

0 comments on commit 56158c0

Please sign in to comment.