Mercurial > sdl-ios-xcode
diff src/video/quartz/SDL_QuartzEvents.m @ 761:c5b2b6d2d1fe
Date: Wed, 31 Dec 2003 21:55:30 +0100
From: Max Horn
Subject: SDL: video/quartz cleanup
while doing some experimental changes in the quartz code, I was annoyed
by having to recompile that one big .o file over and over again. So I
decided to finally realize one TODO: properly splitting the code over
multiple files :-).
With two exceptions, I didn't make code changes, only rearranged files
and added new headers. Since there are several new files, making a
patch didn't work out so well, so I decided to just send you all the
new & modified files.
The one source change I made is related to showing/hiding the mouse. I
renamed cursor_visible to cursor_should_be_visible and cursor_hidden to
cursor_visible; I think that makes reading the code easier.
Then I added two new functions: QZ_ShowMouse and QZ_HideMouse. They
help manage cursor_visible (the former 'cursor_hidden'). Finally I
replaced the Carbon ShowCursor/HiderCuror calls by [NSCursor hide] and
[NSCursor unhide]. The API docs are not conclusive, but it might be
that with those the "cursor_visible" (former 'cursor_hidden') hack may
not be necessary anymore; however so far I didn't test this hypothesis,
so I left that in.
The other change was to remove in_foreground and use [NSApp isActive]
instead: Manually keeping track of whether we are in the foreground is
error prone. This should work better in some corner cases.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 04 Jan 2004 14:55:35 +0000 |
parents | 5d2f027b3349 |
children | 68c8da837fc0 |
line wrap: on
line diff
--- a/src/video/quartz/SDL_QuartzEvents.m Wed Dec 31 04:48:38 2003 +0000 +++ b/src/video/quartz/SDL_QuartzEvents.m Sun Jan 04 14:55:35 2004 +0000 @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga + Copyright (C) 1997-2003 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -19,12 +19,15 @@ Sam Lantinga slouken@libsdl.org */ -#include <stdlib.h> // For getenv() + +#include "SDL_QuartzVideo.h" + +#include <stdlib.h> // For getenv() #include <IOKit/IOMessage.h> // For wake from sleep detection #include <IOKit/pwr_mgt/IOPMLib.h> // For wake from sleep detection #include "SDL_QuartzKeys.h" -static void QZ_InitOSKeymap (_THIS) { +void QZ_InitOSKeymap (_THIS) { const void *KCHRPtr; UInt32 state; UInt32 value; @@ -283,7 +286,7 @@ key.sym = mapping[i]; /* If this was Caps Lock, we need some additional voodoo to make SDL happy */ if (bit == NSAlphaShiftKeyMask) - SDL_PrivateKeyboard (SDL_PRESSED, &key); + SDL_PrivateKeyboard (SDL_PRESSED, &key); SDL_PrivateKeyboard (SDL_RELEASED, &key); } else if ( newMask && @@ -302,13 +305,9 @@ static void QZ_DoActivate (_THIS) { - in_foreground = YES; - /* Hide the cursor if it was hidden by SDL_ShowCursor() */ - if (!cursor_visible && !cursor_hidden) { - HideCursor (); - cursor_hidden = YES; - } + if (!cursor_should_be_visible) + QZ_HideMouse (this); /* Regrab input, only if it was previously grabbed */ if ( current_grab_mode == SDL_GRAB_ON ) { @@ -323,8 +322,6 @@ static void QZ_DoDeactivate (_THIS) { - in_foreground = NO; - /* Get the current cursor location, for restore on activate */ cursor_loc = [ NSEvent mouseLocation ]; /* global coordinates */ if (qz_window) @@ -335,10 +332,8 @@ CGAssociateMouseAndMouseCursorPosition (1); /* Show the cursor if it was hidden by SDL_ShowCursor() */ - if (!cursor_visible && cursor_hidden) { - ShowCursor (); - cursor_hidden = NO; - } + if (!cursor_should_be_visible) + QZ_ShowMouse (this); SDL_PrivateAppActive (0, SDL_APPINPUTFOCUS); } @@ -359,13 +354,13 @@ IOAllowPowerChange(power_connection, (long) messageArgument); break; case kIOMessageSystemHasPoweredOn: - /* awake */ + /* awake */ SDL_PrivateExpose(); break; } } -static void QZ_RegisterForSleepNotifications (_THIS) +void QZ_RegisterForSleepNotifications (_THIS) { CFRunLoopSourceRef rls; IONotificationPortRef thePortRef; @@ -400,7 +395,7 @@ } -static void QZ_PumpEvents (_THIS) +void QZ_PumpEvents (_THIS) { int firstMouseEvent; CGMouseDelta dx, dy; @@ -445,7 +440,7 @@ BOOL isInGameWin; #define DO_MOUSE_DOWN(button) do { \ - if ( in_foreground ) { \ + if ( [ NSApp isActive ] ) { \ if ( isInGameWin ) { \ SDL_PrivateMouseButton (SDL_PRESSED, button, 0, 0); \ expect_mouse_up |= 1<<button; \