diff src/video/quartz/SDL_QuartzEvents.m @ 501:74262d2647ca

Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
author Sam Lantinga <slouken@libsdl.org>
date Sat, 05 Oct 2002 05:07:57 +0000
parents c4338ecf45f9
children 80a3d09bab29
line wrap: on
line diff
--- a/src/video/quartz/SDL_QuartzEvents.m	Sat Oct 05 04:56:32 2002 +0000
+++ b/src/video/quartz/SDL_QuartzEvents.m	Sat Oct 05 05:07:57 2002 +0000
@@ -19,16 +19,8 @@
     Sam Lantinga
     slouken@libsdl.org
 */
-#include <sys/time.h>
-
 #include "SDL_QuartzKeys.h"
 
-
-
-static SDLKey keymap[256];
-static unsigned int currentMods = 0; /* Current keyboard modifiers, to track modifier state */
-static int last_virtual_button = 0; /* Last virtual mouse button pressed */
-
 static void     QZ_InitOSKeymap (_THIS) {
     const void *KCHRPtr;
     UInt32 state;
@@ -147,11 +139,12 @@
     keymap[QZ_IBOOK_UP]      = SDLK_UP;
     keymap[QZ_IBOOK_LEFT] = SDLK_LEFT;
 
-    /* Up there we setup a static scancode->keysym map. However, it will not
-     * work very well on international keyboard. Hence we now query MacOS
-     * for its own keymap to adjust our own mapping table. However, this is
-     * bascially only useful for ascii char keys. This is also the reason
-     * why we keep the static table, too.
+    /* 
+        Up there we setup a static scancode->keysym map. However, it will not
+        work very well on international keyboard. Hence we now query MacOS
+        for its own keymap to adjust our own mapping table. However, this is
+        basically only useful for ascii char keys. This is also the reason
+        why we keep the static table, too.
      */
 
     /* Get a pointer to the systems cached KCHR */
@@ -180,13 +173,14 @@
         }
     }
 
-    /* The keypad codes are re-setup here, because the loop above cannot
-     * distinguish between a key on the keypad and a regular key. We maybe
-     * could get around this problem in another fashion: NSEvent's flags
-     * include a "NSNumericPadKeyMask" bit; we could check that and modify
-     * the symbol we return on the fly. However, this flag seems to exhibit
-     * some weird behaviour related to the num lock key
-     */
+    /* 
+        The keypad codes are re-setup here, because the loop above cannot
+        distinguish between a key on the keypad and a regular key. We maybe
+        could get around this problem in another fashion: NSEvent's flags
+        include a "NSNumericPadKeyMask" bit; we could check that and modify
+        the symbol we return on the fly. However, this flag seems to exhibit
+        some weird behaviour related to the num lock key
+    */
     keymap[QZ_KP0] = SDLK_KP0;
     keymap[QZ_KP1] = SDLK_KP1;
     keymap[QZ_KP2] = SDLK_KP2;
@@ -206,14 +200,18 @@
     keymap[QZ_KP_ENTER] = SDLK_KP_ENTER;
 }
 
-static void QZ_DoKey (int state, NSEvent *event) {
+static void QZ_DoKey (_THIS, int state, NSEvent *event) {
 
     NSString *chars;
     int i;
     SDL_keysym key;
 
-    /* An event can contain multiple characters */
-    /* I'll ignore this fact for now, since there is only one virtual key code per event */
+    /* 
+        An event can contain multiple characters
+        I'll ignore this fact for now, since there 
+        is only one virtual key code per event, so
+        no good way to handle this.
+    */
     chars = [ event characters ];
     for (i =0; i < 1 /*[ chars length ] */; i++) {
 
@@ -226,7 +224,7 @@
     }
 }
 
-static void QZ_DoModifiers (unsigned int newMods) {
+static void QZ_DoModifiers (_THIS, unsigned int newMods) {
 
     const int mapping[] = { SDLK_CAPSLOCK, SDLK_LSHIFT, SDLK_LCTRL, SDLK_LALT, SDLK_LMETA } ;
 
@@ -244,8 +242,8 @@
 
         unsigned int currentMask, newMask;
 
-        currentMask = currentMods & bit;
-        newMask        = newMods & bit;
+        currentMask = current_mods & bit;
+        newMask     = newMods & bit;
 
         if ( currentMask &&
              currentMask != newMask ) {     /* modifier up event */
@@ -267,15 +265,15 @@
         }
     }
 
-    currentMods = newMods;
+    current_mods = newMods;
 }
 
 static void QZ_DoActivate (_THIS)
 {
-    inForeground = YES;
+    in_foreground = YES;
 
-    /* Regrab the mouse */
-    if (currentGrabMode == SDL_GRAB_ON) {
+    /* Regrab the mouse, only if it was previously grabbed */
+    if ( current_grab_mode == SDL_GRAB_ON ) {
         QZ_WarpWMCursor (this, SDL_VideoSurface->w / 2, SDL_VideoSurface->h / 2);
         CGAssociateMouseAndMouseCursorPosition (0);
     }
@@ -290,10 +288,10 @@
 
 static void QZ_DoDeactivate (_THIS) {
 
-    inForeground = NO;
+    in_foreground = NO;
 
     /* Ungrab mouse if it is grabbed */
-    if (currentGrabMode == SDL_GRAB_ON) {
+    if ( current_grab_mode == SDL_GRAB_ON ) {
         CGAssociateMouseAndMouseCursorPosition (1);
     }
 
@@ -343,7 +341,7 @@
             BOOL isForGameWin;
     
             #define DO_MOUSE_DOWN(button, sendToWindow) do {                                 \
-                            if ( inForeground ) {                                            \
+                            if ( in_foreground ) {                                           \
                                 if ( (SDL_VideoSurface->flags & SDL_FULLSCREEN) ||           \
                                     NSPointInRect([event locationInWindow], winRect) )       \
                                         SDL_PrivateMouseButton (SDL_PRESSED, button, 0, 0);  \
@@ -366,11 +364,11 @@
             switch (type) {
             
                 case NSLeftMouseDown:
-                    if ( NSCommandKeyMask & currentMods ) {
+                    if ( NSCommandKeyMask & current_mods ) {
                         last_virtual_button = 3;
                         DO_MOUSE_DOWN (3, 0);
                     }
-                    else if ( NSAlternateKeyMask & currentMods ) {
+                    else if ( NSAlternateKeyMask & current_mods ) {
                         last_virtual_button = 2;
                         DO_MOUSE_DOWN (2, 0);
                     }
@@ -392,22 +390,24 @@
                 case NSOtherMouseUp:   DO_MOUSE_UP (2, 0);     break;
                 case NSRightMouseUp:   DO_MOUSE_UP (3, 0);     break;
                 case NSSystemDefined:
-                    //if ([event subtype] == 7) {
-                    //      unsigned int buttons;      // up to 32 mouse button states!
-                    //      buttons = [ event data2 ];
-                    //}
+                    /*
+                        Future: up to 32 "mouse" buttons can be handled.
+                        if ([event subtype] == 7) {
+                            unsigned int buttons;
+                            buttons = [ event data2 ];
+                    */
                     break;
                 case NSLeftMouseDragged:
                 case NSRightMouseDragged:
                 case NSOtherMouseDragged: /* usually middle mouse dragged */
                 case NSMouseMoved:
-                    if (currentGrabMode == SDL_GRAB_ON) {
+                    if (current_grab_mode == SDL_GRAB_ON) {
                 
-                        /**
-                         *  If input is grabbed, the cursor doesn't move,
-                         *  so we have to call the lowlevel window server
-                         *  function. This is less accurate but works OK.                         
-                         **/
+                        /*
+                            If input is grabbed, the cursor doesn't move,
+                            so we have to call the lowlevel window server
+                            function. This is less accurate but works OK.                         
+                        */
                         CGMouseDelta dx1, dy1;
                         CGGetLastMouseDelta (&dx1, &dy1);
                         dx += dx1;
@@ -415,12 +415,14 @@
                     }
                     else if (warp_flag) {
                 
-                        /**
-                         * If we just warped the mouse, the cursor is frozen for a while.
-                         * So we have to use the lowlevel function until it
-                         * unfreezes. This really helps apps that continuously
-                         * warp the mouse to keep it in the game window.
-                         **/
+                        /*
+                            If we just warped the mouse, the cursor is frozen for a while.
+                            So we have to use the lowlevel function until it
+                            unfreezes. This really helps apps that continuously
+                            warp the mouse to keep it in the game window. Developers should
+                            really use GrabInput, but our GrabInput freezes the HW cursor,
+                            which doesn't cut it for some apps.
+                        */
                         Uint32 ticks;
                 
                         ticks = SDL_GetTicks();
@@ -438,14 +440,14 @@
                     }
                     else if (firstMouseEvent) {
                         
-                        /**
-                         * Get the first mouse event in a possible
-                         * sequence of mouse moved events. Since we
-                         * use absolute coordinates, this serves to
-                         * compensate any inaccuracy in deltas, and
-                         * provides the first known mouse position,
-                         * since everything after this uses deltas
-                         **/
+                        /*
+                            Get the first mouse event in a possible
+                            sequence of mouse moved events. Since we
+                            use absolute coordinates, this serves to
+                            compensate any inaccuracy in deltas, and
+                            provides the first known mouse position,
+                            since everything after this uses deltas
+                        */
                         NSPoint p = [ event locationInWindow ];
                         QZ_PrivateCocoaToSDL(this, &p);
                         
@@ -455,12 +457,12 @@
                     }
                     else {
                     
-                       /**
-                        * Get the amount moved since the last drag or move event,
-                        * add it on for one big move event at the end.
-                        **/
-                       dx += [ event deltaX ];
-                       dy += [ event deltaY ];
+                        /*
+                            Get the amount moved since the last drag or move event,
+                            add it on for one big move event at the end.
+                        */
+                        dx += [ event deltaX ];
+                        dy += [ event deltaY ];
                     }
                     break;
                 case NSScrollWheel:
@@ -474,13 +476,13 @@
                     }
                     break;
                 case NSKeyUp:
-                    QZ_DoKey (SDL_RELEASED, event);
+                    QZ_DoKey (this, SDL_RELEASED, event);
                     break;
                 case NSKeyDown:
-                    QZ_DoKey (SDL_PRESSED, event);
+                    QZ_DoKey (this, SDL_PRESSED, event);
                     break;
                 case NSFlagsChanged:
-                    QZ_DoModifiers( [ event modifierFlags ] );
+                    QZ_DoModifiers(this, [ event modifierFlags ] );
                     break;
                 case NSAppKitDefined:
                     switch ( [ event subtype ] ) {
@@ -507,5 +509,4 @@
         SDL_PrivateMouseMotion (0, 1, dx, dy);
     
     [ pool release ];
-}
-
+}
\ No newline at end of file