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.
--- a/src/events/SDL_mouse.c Sat Aug 21 12:27:02 2004 +0000
+++ b/src/events/SDL_mouse.c Sat Aug 21 12:38:50 2004 +0000
@@ -38,8 +38,8 @@
/* 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 @@
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 @@
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 @@
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;
}