From 6083c21174af9d9bc3170e5b9885c0973f1410b7 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 9 Nov 2002 05:47:24 +0000 Subject: [PATCH] Fixed potential dropped events under DirectInput --HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%40537 --- src/video/windx5/SDL_dx5events.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/video/windx5/SDL_dx5events.c b/src/video/windx5/SDL_dx5events.c index 768347493..766bfac22 100644 --- a/src/video/windx5/SDL_dx5events.c +++ b/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)