From 11d8dcb490aaf1286a35b606f7121a737904c0df Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 17 May 2004 00:16:24 +0000 Subject: [PATCH] Date: Tue, 11 May 2004 22:05:32 -0400 From: Bob Ippolito Subject: [SDL] SDL_QuartzWM patches I've sent in two small patches to SDL_QuartzWM directly to Sam over the past few months (well, I think I sent both anyway) and neither of them have been implemented. I didn't receive a response, so I'm sure he was just busy and/or they got lost, so I decided to sign up to the list and post them here. This patch rolls both of them together: - Mouse cursor becomes visible if hidden when it moves outside of the game window. If you want it to stay invisible you should warp it because if it's not warped a user might click some random other application! Commercial games behave in this way (or at least Warcraft III does, which is the only one that uses a custom mouse cursor and no warping that I've played in recent memory). - Right mouse button emulation is changed from Command-Click to Control-Click, which is how OS X behaves. Consider copyright assigned to whomever needs it under whichever license it needs to be under.. yadda yadda yadda. --- src/video/quartz/SDL_QuartzEvents.m | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/video/quartz/SDL_QuartzEvents.m b/src/video/quartz/SDL_QuartzEvents.m index 617ae9d9f..032046e91 100644 --- a/src/video/quartz/SDL_QuartzEvents.m +++ b/src/video/quartz/SDL_QuartzEvents.m @@ -472,7 +472,7 @@ void QZ_PumpEvents (_THIS) if ( getenv("SDL_HAS3BUTTONMOUSE") ) { DO_MOUSE_DOWN (SDL_BUTTON_LEFT); } else { - if ( NSCommandKeyMask & current_mods ) { + if ( NSControlKeyMask & current_mods ) { last_virtual_button = SDL_BUTTON_RIGHT; DO_MOUSE_DOWN (SDL_BUTTON_RIGHT); } @@ -519,7 +519,18 @@ void QZ_PumpEvents (_THIS) case NSLeftMouseDragged: case NSRightMouseDragged: case NSOtherMouseDragged: /* usually middle mouse dragged */ - case NSMouseMoved: + case NSMouseMoved: + /* Show the cursor if it was hidden by SDL_ShowCursor() */ + /* this is how games I've seen work */ + if (!cursor_visible) { + if (!isInGameWin && cursor_hidden) { + ShowCursor(); + cursor_hidden = NO; + } else if (isInGameWin && !cursor_hidden) { + HideCursor(); + cursor_hidden = YES; + } + } if ( grab_state == QZ_INVISIBLE_GRAB ) { /* @@ -642,6 +653,6 @@ void QZ_PumpEvents (_THIS) /* handle accumulated mouse moved events */ if (dx != 0 || dy != 0) SDL_PrivateMouseMotion (0, 1, dx, dy); - + [ pool release ]; }