From 2aadfacc3247aa5dc0a11a25c6e7f7910f71e78c Mon Sep 17 00:00:00 2001 From: Patrice Mandin Date: Tue, 12 Sep 2006 19:43:29 +0000 Subject: [PATCH] Allow mouse to be locked when grabbed with GEM driver --- src/video/ataricommon/SDL_xbiosevents.c | 7 ++++++- src/video/ataricommon/SDL_xbiosevents_c.h | 1 + src/video/ataricommon/SDL_xbiosinterrupt.S | 11 +++++++++-- src/video/ataricommon/SDL_xbiosinterrupt_s.h | 1 + 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/video/ataricommon/SDL_xbiosevents.c b/src/video/ataricommon/SDL_xbiosevents.c index 02626a218..b7e4e667e 100644 --- a/src/video/ataricommon/SDL_xbiosevents.c +++ b/src/video/ataricommon/SDL_xbiosevents.c @@ -50,7 +50,8 @@ SDL_AtariXbios_InstallVectors(int vectors_mask) void *oldpile; /* Clear variables */ - SDL_AtariXbios_mouseb = + SDL_AtariXbios_mouselock = + SDL_AtariXbios_mouseb = SDL_AtariXbios_mousex = SDL_AtariXbios_mousey = SDL_AtariXbios_joystick = atari_prevmouseb = 0; @@ -151,4 +152,8 @@ SDL_AtariXbios_PostMouseEvents(_THIS, SDL_bool buttonEvents) } } +void SDL_AtariXbios_LockMousePosition(SDL_bool lockPosition) +{ + SDL_AtariXbios_mouselock = lockPosition; +} /* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/ataricommon/SDL_xbiosevents_c.h b/src/video/ataricommon/SDL_xbiosevents_c.h index 8380bbe0a..7f7bec6a1 100644 --- a/src/video/ataricommon/SDL_xbiosevents_c.h +++ b/src/video/ataricommon/SDL_xbiosevents_c.h @@ -43,6 +43,7 @@ extern int SDL_AtariXbios_enabled; extern void SDL_AtariXbios_InstallVectors(int vectors_mask); extern void SDL_AtariXbios_RestoreVectors(void); extern void SDL_AtariXbios_PostMouseEvents(_THIS, SDL_bool buttonEvents); +extern void SDL_AtariXbios_LockMousePosition(SDL_bool lockPosition); #endif /* _SDL_XBIOSEVENTS_H_ */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/ataricommon/SDL_xbiosinterrupt.S b/src/video/ataricommon/SDL_xbiosinterrupt.S index 548561ca4..a76df3768 100644 --- a/src/video/ataricommon/SDL_xbiosinterrupt.S +++ b/src/video/ataricommon/SDL_xbiosinterrupt.S @@ -33,6 +33,7 @@ .globl _SDL_AtariXbios_MouseVector .globl _SDL_AtariXbios_JoystickVector + .globl _SDL_AtariXbios_mouselock .globl _SDL_AtariXbios_mouseb .globl _SDL_AtariXbios_mousex .globl _SDL_AtariXbios_mousey @@ -125,6 +126,13 @@ _SDL_AtariXbios_MouseVector: extw d0 addw d0,_SDL_AtariXbios_mousey + /* Lock mouse position ? */ + tstw _SDL_AtariXbios_mouselock + beq.s no_mouse_lock + clrb a0@(1) + clrb a0@(2) +no_mouse_lock: + /* Jump through old vector */ movel sp@+,d0 @@ -133,10 +141,9 @@ _SDL_AtariXbios_MouseVector: .data .even + .comm _SDL_AtariXbios_mouselock,2*1 .comm _SDL_AtariXbios_mousex,2*1 - .even .comm _SDL_AtariXbios_mousey,2*1 - .even .comm _SDL_AtariXbios_mouseb,2*1 /*--- Our joystick vector ---*/ diff --git a/src/video/ataricommon/SDL_xbiosinterrupt_s.h b/src/video/ataricommon/SDL_xbiosinterrupt_s.h index ce0f0e5ba..6e6e52332 100644 --- a/src/video/ataricommon/SDL_xbiosinterrupt_s.h +++ b/src/video/ataricommon/SDL_xbiosinterrupt_s.h @@ -36,6 +36,7 @@ /* Variables */ +extern volatile Uint16 SDL_AtariXbios_mouselock; /* mouse lock position */ extern volatile Uint16 SDL_AtariXbios_mouseb; /* buttons */ extern volatile Sint16 SDL_AtariXbios_mousex; /* X relative motion */ extern volatile Sint16 SDL_AtariXbios_mousey; /* Y relative motion */