Give mouse position relative to window position, and do not generate mouse button event if outside of the window
--- a/src/video/gem/SDL_gemevents.c Mon Aug 09 11:53:14 2004 +0000
+++ b/src/video/gem/SDL_gemevents.c Tue Aug 10 18:53:38 2004 +0000
@@ -298,6 +298,18 @@
static void do_mouse(_THIS, short mx, short my, short mb, short ks)
{
static short prevmousex=0, prevmousey=0, prevmouseb=0;
+ short x2, y2, w2, h2;
+
+ /* Retrieve window coords, and generate mouse events accordingly */
+ x2 = y2 = 0;
+ if ((!GEM_fullscreen) && (GEM_handle>=0)) {
+ wind_get (GEM_handle, WF_WORKXYWH, &x2, &y2, &w2, &h2);
+
+ /* Do not generate mouse button event if out of window working area */
+ if ((mx<x2) || (mx>=x2+w2) || (my<y2) || (my>=y2+h2)) {
+ mb=prevmouseb;
+ }
+ }
/* Mouse motion ? */
if ((prevmousex!=mx) || (prevmousey!=my)) {
@@ -305,7 +317,17 @@
SDL_PrivateMouseMotion(0, 1, SDL_AtariXbios_mousex, SDL_AtariXbios_mousey);
SDL_AtariXbios_mousex = SDL_AtariXbios_mousey = 0;
} else {
- SDL_PrivateMouseMotion(0, 0, mx, my);
+ int posx, posy;
+
+ /* Give mouse position relative to window position */
+ posx = mx - x2;
+ if (posx<0) posx = x2;
+ if (posx>w2) posx = w2-1;
+ posy = my - y2;
+ if (posy<0) posy = y2;
+ if (posy>h2) posy = h2-1;
+
+ SDL_PrivateMouseMotion(0, 0, posx, posy);
}
prevmousex = mx;
prevmousey = my;
--- a/src/video/gem/SDL_gemvideo.c Mon Aug 09 11:53:14 2004 +0000
+++ b/src/video/gem/SDL_gemvideo.c Tue Aug 10 18:53:38 2004 +0000
@@ -400,6 +400,7 @@
GEM_handle = -1;
GEM_locked = SDL_FALSE;
GEM_win_fulled = SDL_FALSE;
+ GEM_fullscreen = SDL_FALSE;
VDI_screen = NULL;
VDI_pitch = VDI_w * VDI_pixelsize;
@@ -641,6 +642,8 @@
} else {
modeflags |= SDL_SWSURFACE;
}
+
+ GEM_fullscreen = SDL_TRUE;
} else {
int old_win_type;
short x2,y2,w2,h2;
@@ -701,6 +704,8 @@
/* Open the window */
wind_open(GEM_handle,x2,y2,w2,h2);
+
+ GEM_fullscreen = SDL_FALSE;
}
/* Set up the new mode framebuffer */
--- a/src/video/gem/SDL_gemvideo.h Mon Aug 09 11:53:14 2004 +0000
+++ b/src/video/gem/SDL_gemvideo.h Tue Aug 10 18:53:38 2004 +0000
@@ -80,6 +80,8 @@
SDL_bool mouse_relative; /* Report relative mouse movement */
SDL_bool locked; /* AES locked for fullscreen ? */
short message[8]; /* To self-send an AES message */
+
+ SDL_bool fullscreen; /* Fullscreen or windowed mode ? */
SDL_Rect *SDL_modelist[SDL_NUMMODES+1]; /* Mode list */
SDL_Surface *icon; /* The icon */
};
@@ -121,6 +123,7 @@
#define GEM_message (this->hidden->message)
#define SDL_modelist (this->hidden->SDL_modelist)
#define GEM_icon (this->hidden->icon)
+#define GEM_fullscreen (this->hidden->fullscreen)
#define GEM_buffer1 (this->hidden->buffer1)
#define GEM_buffer2 (this->hidden->buffer2)