Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Fixed potential dropped events under DirectInput
- Loading branch information
Showing
with
22 additions
and
1 deletion.
-
+22
−1
src/video/windx5/SDL_dx5events.c
|
@@ -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]; |
|
@@ -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) || |
|
@@ -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: |
|
@@ -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 |
|
@@ -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) |
|
|