From 40e2aa11ece9b8cc30498c5e6f8b9c05e21a0345 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 21 Aug 2004 12:38:50 +0000 Subject: [PATCH] Date: Sun, 18 Jul 2004 00:22:07 -0400 From: "Philippe Anctil" Subject: [SDL] odd mouse event generated on init The mouse relative and absolute coordinates appear to be always equal for the first mouse event. --- src/events/SDL_mouse.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c index 9e5cce106..d77c9b78a 100644 --- a/src/events/SDL_mouse.c +++ b/src/events/SDL_mouse.c @@ -38,8 +38,8 @@ static char rcsid = /* These are static for our mouse handling code */ -static Sint16 SDL_MouseX = 0; -static Sint16 SDL_MouseY = 0; +static Sint16 SDL_MouseX = -1; +static Sint16 SDL_MouseY = -1; static Sint16 SDL_DeltaX = 0; static Sint16 SDL_DeltaY = 0; static Uint8 SDL_ButtonState = 0; @@ -49,8 +49,8 @@ static Uint8 SDL_ButtonState = 0; int SDL_MouseInit(void) { /* The mouse is at (0,0) */ - SDL_MouseX = 0; - SDL_MouseY = 0; + SDL_MouseX = -1; + SDL_MouseY = -1; SDL_DeltaX = 0; SDL_DeltaY = 0; SDL_ButtonState = 0; @@ -72,10 +72,20 @@ void SDL_ResetMouse(void) Uint8 SDL_GetMouseState (int *x, int *y) { - if ( x ) - *x = SDL_MouseX; - if ( y ) - *y = SDL_MouseY; + if ( x ) { + if ( SDL_MouseX < 0 ) { + *x = 0; + } else { + *x = SDL_MouseX; + } + } + if ( y ) { + if ( SDL_MouseY < 0 ) { + *y = 0; + } else { + *y = SDL_MouseY; + } + } return(SDL_ButtonState); } @@ -152,7 +162,7 @@ int SDL_PrivateMouseMotion(Uint8 buttonstate, int relative, Sint16 x, Sint16 y) This prevents lots of extraneous large delta relative motion when the screen is windowed mode and the mouse is outside the window. */ - if ( ! relative ) { + if ( ! relative && SDL_MouseX >= 0 && SDL_MouseY >= 0 ) { Xrel = X-SDL_MouseX; Yrel = Y-SDL_MouseY; }