src/video/quartz/SDL_QuartzWM.m
author Ryan C. Gordon <icculus@icculus.org>
Fri, 30 Dec 2011 03:18:26 -0500
branchSDL-1.2
changeset 6121 e6fcc5368210
parent 6087 185f8588deaa
child 6137 4720145f848b
permissions -rw-r--r--
Fixes for setting custom cursor in quartz target. This fixes a logic error, and allows setting the cursor from off the main thread, which isn't strictly a good idea, but previous versions of SDL on Mac OS X apparently allowed it, so we'll make the effort here. Fixes Bugzilla #1355. Thanks to Alexei Svitkine for the patch!
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     1
/*
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     2
    SDL - Simple DirectMedia Layer
4159
a1b03ba2fcd0 Updated copyright date
Sam Lantinga <slouken@libsdl.org>
parents: 4122
diff changeset
     3
    Copyright (C) 1997-2009  Sam Lantinga
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     4
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     5
    This library is free software; you can redistribute it and/or
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     6
    modify it under the terms of the GNU Library General Public
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     7
    License as published by the Free Software Foundation; either
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     8
    version 2 of the License, or (at your option) any later version.
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     9
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    10
    This library is distributed in the hope that it will be useful,
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    13
    Library General Public License for more details.
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    14
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    15
    You should have received a copy of the GNU Library General Public
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    16
    License along with this library; if not, write to the Free
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    17
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    18
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    19
    Sam Lantinga
252
e8157fcb3114 Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents: 168
diff changeset
    20
    slouken@libsdl.org
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    21
*/
1403
376665398b25 Catch the C++ and Objective C sources too...
Sam Lantinga <slouken@libsdl.org>
parents: 1207
diff changeset
    22
#include "SDL_config.h"
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    23
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
    24
#include "SDL_QuartzVideo.h"
4070
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    25
#include "SDL_QuartzWM.h"
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
    26
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    27
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
    28
void QZ_FreeWMCursor     (_THIS, WMcursor *cursor) { 
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    29
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    30
    if ( cursor != NULL ) {
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    31
        [ cursor->nscursor release ];
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    32
        free (cursor);
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    33
    }
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    34
}
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    35
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
    36
WMcursor*    QZ_CreateWMCursor   (_THIS, Uint8 *data, Uint8 *mask, 
390
19e73568a75c Date: Sat, 1 Jun 2002 17:56:45 -0500
Sam Lantinga <slouken@libsdl.org>
parents: 324
diff changeset
    37
                                         int w, int h, int hot_x, int hot_y) { 
19e73568a75c Date: Sat, 1 Jun 2002 17:56:45 -0500
Sam Lantinga <slouken@libsdl.org>
parents: 324
diff changeset
    38
    WMcursor *cursor;
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    39
    NSBitmapImageRep *imgrep;
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    40
    NSImage *img;
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    41
    unsigned char *planes[5];
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    42
    int i;
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    43
    NSAutoreleasePool *pool;
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    44
    
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    45
    pool = [ [ NSAutoreleasePool alloc ] init ];
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    46
    
390
19e73568a75c Date: Sat, 1 Jun 2002 17:56:45 -0500
Sam Lantinga <slouken@libsdl.org>
parents: 324
diff changeset
    47
    /* Allocate the cursor memory */
1756
eed7a3f396ce Using the SDL C runtime functions
Sam Lantinga <slouken@libsdl.org>
parents: 1629
diff changeset
    48
    cursor = (WMcursor *)SDL_malloc(sizeof(WMcursor));
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    49
    if (cursor == NULL) goto outOfMemory;
5628
f78f29271dfd Cleaned out all the deprecated stuff in Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents: 4392
diff changeset
    50
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    51
    /* create the image representation and get the pointers to its storage */
5628
f78f29271dfd Cleaned out all the deprecated stuff in Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents: 4392
diff changeset
    52
    imgrep = [ [ [ NSBitmapImageRep alloc ] initWithBitmapDataPlanes: NULL pixelsWide: w pixelsHigh: h bitsPerSample: 1 samplesPerPixel: 2 hasAlpha: YES isPlanar: YES colorSpaceName: NSDeviceWhiteColorSpace bytesPerRow: (w+7)/8 bitsPerPixel: 0 ] autorelease ];
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    53
    if (imgrep == nil) goto outOfMemory;
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    54
    [ imgrep getBitmapDataPlanes: planes ];
168
e92aa316c517 Added Max's patches for building MacOS X apps on command line
Sam Lantinga <slouken@libsdl.org>
parents: 158
diff changeset
    55
    
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    56
    /* copy data and mask, extending the mask to all black pixels because the inversion effect doesn't work with Cocoa's alpha-blended cursors */
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    57
    for (i = 0; i < (w+7)/8*h; i++) {
5628
f78f29271dfd Cleaned out all the deprecated stuff in Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents: 4392
diff changeset
    58
        planes[0][i] = data[i] ^ 0xFF;
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    59
        planes[1][i] = mask[i] | data[i];
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    60
    }
5628
f78f29271dfd Cleaned out all the deprecated stuff in Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents: 4392
diff changeset
    61
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    62
    /* create image and cursor */
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    63
    img = [ [ [ NSImage alloc ] initWithSize: NSMakeSize(w, h) ] autorelease ];
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    64
    if (img == nil) goto outOfMemory;
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    65
    [ img addRepresentation: imgrep ];
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    66
    if (system_version < 0x1030) { /* on 10.2, cursors must be 16*16 */
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    67
        if (w > 16 || h > 16) { /* too big: scale it down */
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    68
            [ img setScalesWhenResized: YES ];
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    69
            hot_x = hot_x*16/w;
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    70
            hot_y = hot_y*16/h;
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    71
        }
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    72
        else { /* too small (or just right): extend it (from the bottom left corner, so hot_y must be adjusted) */
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    73
            hot_y += 16 - h;
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    74
        }
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    75
        [ img setSize: NSMakeSize(16, 16) ];
390
19e73568a75c Date: Sat, 1 Jun 2002 17:56:45 -0500
Sam Lantinga <slouken@libsdl.org>
parents: 324
diff changeset
    76
    }
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    77
    cursor->nscursor = [ [ NSCursor alloc ] initWithImage: img hotSpot: NSMakePoint(hot_x, hot_y) ];
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    78
    if (cursor->nscursor == nil) goto outOfMemory;
390
19e73568a75c Date: Sat, 1 Jun 2002 17:56:45 -0500
Sam Lantinga <slouken@libsdl.org>
parents: 324
diff changeset
    79
    
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    80
    [ pool release ];
168
e92aa316c517 Added Max's patches for building MacOS X apps on command line
Sam Lantinga <slouken@libsdl.org>
parents: 158
diff changeset
    81
    return(cursor);
1883
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    82
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    83
outOfMemory:
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    84
    [ pool release ];
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    85
    if (cursor != NULL) SDL_free(cursor);
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    86
    SDL_OutOfMemory();
2780f547f5e7 Fix for bug #240
Sam Lantinga <slouken@libsdl.org>
parents: 1812
diff changeset
    87
    return(NULL);
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    88
}
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    89
4070
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    90
void QZ_UpdateCursor (_THIS) {
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    91
    BOOL state;
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    92
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    93
    if (cursor_should_be_visible || !(SDL_GetAppState() & SDL_APPMOUSEFOCUS)) {
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    94
        state = YES;
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    95
    } else {
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    96
        state = NO;
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
    97
    }
4070
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    98
    if (state != cursor_visible) {
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
    99
        if (state) {
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
   100
            [ NSCursor unhide ];
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
   101
        } else {
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
   102
            [ NSCursor hide ];
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
   103
        }
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
   104
        cursor_visible = state;
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   105
    }
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   106
}
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   107
779
68c8da837fc0 Date: Tue, 6 Jan 2004 21:54:02 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 761
diff changeset
   108
BOOL QZ_IsMouseInWindow (_THIS) {
4065
0c76e6d1c3d6 Fixed bug #373
Sam Lantinga <slouken@libsdl.org>
parents: 1883
diff changeset
   109
    if (qz_window == nil || (mode_flags & SDL_FULLSCREEN)) return YES; /*fullscreen*/
1192
54aa9aa32327 To: sdl@libsdl.org
Ryan C. Gordon <icculus@icculus.org>
parents: 983
diff changeset
   110
    else {
54aa9aa32327 To: sdl@libsdl.org
Ryan C. Gordon <icculus@icculus.org>
parents: 983
diff changeset
   111
        NSPoint p = [ qz_window mouseLocationOutsideOfEventStream ];
54aa9aa32327 To: sdl@libsdl.org
Ryan C. Gordon <icculus@icculus.org>
parents: 983
diff changeset
   112
        p.y -= 1.0f; /* Apparently y goes from 1 to h, not from 0 to h-1 (i.e. the "location of the mouse" seems to be defined as "the location of the top left corner of the mouse pointer's hot pixel" */
54aa9aa32327 To: sdl@libsdl.org
Ryan C. Gordon <icculus@icculus.org>
parents: 983
diff changeset
   113
        return NSPointInRect(p, [ window_view frame ]);
54aa9aa32327 To: sdl@libsdl.org
Ryan C. Gordon <icculus@icculus.org>
parents: 983
diff changeset
   114
    }
779
68c8da837fc0 Date: Tue, 6 Jan 2004 21:54:02 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 761
diff changeset
   115
}
68c8da837fc0 Date: Tue, 6 Jan 2004 21:54:02 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 761
diff changeset
   116
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   117
int QZ_ShowWMCursor (_THIS, WMcursor *cursor) { 
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   118
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   119
    if ( cursor == NULL) {
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   120
        if ( cursor_should_be_visible ) {
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   121
            cursor_should_be_visible = NO;
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   122
            QZ_ChangeGrabState (this, QZ_HIDECURSOR);
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   123
        }
4070
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
   124
        QZ_UpdateCursor(this);
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   125
    }
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   126
    else {
6121
e6fcc5368210 Fixes for setting custom cursor in quartz target.
Ryan C. Gordon <icculus@icculus.org>
parents: 6087
diff changeset
   127
        if ( qz_window != nil && !(mode_flags & SDL_FULLSCREEN) ) {
4070
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
   128
            [ qz_window invalidateCursorRectsForView: [ qz_window contentView ] ];
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
   129
        }
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   130
        if ( ! cursor_should_be_visible ) {
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   131
            cursor_should_be_visible = YES;
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   132
            QZ_ChangeGrabState (this, QZ_SHOWCURSOR);
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   133
        }
6121
e6fcc5368210 Fixes for setting custom cursor in quartz target.
Ryan C. Gordon <icculus@icculus.org>
parents: 6087
diff changeset
   134
        [ cursor->nscursor performSelectorOnMainThread:@selector(set) withObject:nil waitUntilDone:NO ];
4070
b8f2db95145e Patch from Christian Walther
Sam Lantinga <slouken@libsdl.org>
parents: 4066
diff changeset
   135
        QZ_UpdateCursor(this);
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   136
    }
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   137
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   138
    return 1;
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   139
}
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   140
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   141
/*
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   142
    Coordinate conversion functions, for convenience
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   143
    Cocoa sets the origin at the lower left corner of the window/screen
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   144
    SDL, CoreGraphics/WindowServer, and QuickDraw use the origin at the upper left corner
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   145
    The routines were written so they could be called before SetVideoMode() has finished;
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   146
    this might have limited usefulness at the moment, but the extra cost is trivial.
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   147
*/
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   148
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   149
/* Convert Cocoa screen coordinate to Cocoa window coordinate */
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   150
void QZ_PrivateGlobalToLocal (_THIS, NSPoint *p) {
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   151
4392
2b8c1aea633b Fixed bug #898
Sam Lantinga <slouken@libsdl.org>
parents: 4204
diff changeset
   152
	if ( ! CGDisplayIsCaptured (display_id) )
2b8c1aea633b Fixed bug #898
Sam Lantinga <slouken@libsdl.org>
parents: 4204
diff changeset
   153
		*p = [ qz_window convertScreenToBase:*p ];
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   154
}
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   155
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   156
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   157
/* Convert Cocoa window coordinate to Cocoa screen coordinate */
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   158
void QZ_PrivateLocalToGlobal (_THIS, NSPoint *p) {
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   159
4392
2b8c1aea633b Fixed bug #898
Sam Lantinga <slouken@libsdl.org>
parents: 4204
diff changeset
   160
	if ( ! CGDisplayIsCaptured (display_id) )
2b8c1aea633b Fixed bug #898
Sam Lantinga <slouken@libsdl.org>
parents: 4204
diff changeset
   161
		*p = [ qz_window convertBaseToScreen:*p ];
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   162
}
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   163
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   164
/* Convert SDL coordinate to Cocoa coordinate */
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   165
void QZ_PrivateSDLToCocoa (_THIS, NSPoint *p) {
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   166
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   167
    if ( CGDisplayIsCaptured (display_id) ) { /* capture signals fullscreen */
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   168
    
876
9e84d106ec19 (Said Max Horn on the SDL mailing list...)
Ryan C. Gordon <icculus@icculus.org>
parents: 779
diff changeset
   169
        p->y = CGDisplayPixelsHigh (display_id) - p->y;
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   170
    }
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   171
    else {
934
af585d6efec8 Date: Thu, 17 Jun 2004 11:38:51 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents: 876
diff changeset
   172
       
af585d6efec8 Date: Thu, 17 Jun 2004 11:38:51 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents: 876
diff changeset
   173
        *p = [ window_view convertPoint:*p toView: nil ];
4204
976bc19f8f6b 1.2 Quartz video: Ripped out QuickDraw and QuickTime.
Ryan C. Gordon <icculus@icculus.org>
parents: 4159
diff changeset
   174
        p->y = [window_view frame].size.height - p->y;
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   175
    }
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   176
}
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   177
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   178
/* Convert Cocoa coordinate to SDL coordinate */
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   179
void QZ_PrivateCocoaToSDL (_THIS, NSPoint *p) {
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   180
683
5d2f027b3349 Date: Sat, 9 Aug 2003 20:14:06 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 615
diff changeset
   181
    if ( CGDisplayIsCaptured (display_id) ) { /* capture signals fullscreen */
5d2f027b3349 Date: Sat, 9 Aug 2003 20:14:06 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 615
diff changeset
   182
    
876
9e84d106ec19 (Said Max Horn on the SDL mailing list...)
Ryan C. Gordon <icculus@icculus.org>
parents: 779
diff changeset
   183
        p->y = CGDisplayPixelsHigh (display_id) - p->y;
683
5d2f027b3349 Date: Sat, 9 Aug 2003 20:14:06 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 615
diff changeset
   184
    }
5d2f027b3349 Date: Sat, 9 Aug 2003 20:14:06 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 615
diff changeset
   185
    else {
934
af585d6efec8 Date: Thu, 17 Jun 2004 11:38:51 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents: 876
diff changeset
   186
af585d6efec8 Date: Thu, 17 Jun 2004 11:38:51 -0700 (PDT)
Sam Lantinga <slouken@libsdl.org>
parents: 876
diff changeset
   187
        *p = [ window_view convertPoint:*p fromView: nil ];
4204
976bc19f8f6b 1.2 Quartz video: Ripped out QuickDraw and QuickTime.
Ryan C. Gordon <icculus@icculus.org>
parents: 4159
diff changeset
   188
        p->y = [window_view frame].size.height - p->y;
683
5d2f027b3349 Date: Sat, 9 Aug 2003 20:14:06 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 615
diff changeset
   189
    }
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   190
}
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   191
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   192
/* Convert SDL coordinate to window server (CoreGraphics) coordinate */
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   193
CGPoint QZ_PrivateSDLToCG (_THIS, NSPoint *p) {
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   194
    
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   195
    CGPoint cgp;
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   196
    
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   197
    if ( ! CGDisplayIsCaptured (display_id) ) { /* not captured => not fullscreen => local coord */
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   198
    
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   199
        int height;
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   200
        
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   201
        QZ_PrivateSDLToCocoa (this, p);
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   202
        QZ_PrivateLocalToGlobal (this, p);
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   203
        
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   204
        height = CGDisplayPixelsHigh (display_id);
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   205
        p->y = height - p->y;
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   206
    }
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   207
    
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   208
    cgp.x = p->x;
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   209
    cgp.y = p->y;
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   210
    
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   211
    return cgp;
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   212
}
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   213
683
5d2f027b3349 Date: Sat, 9 Aug 2003 20:14:06 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 615
diff changeset
   214
#if 0 /* Dead code */
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   215
/* Convert window server (CoreGraphics) coordinate to SDL coordinate */
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   216
void QZ_PrivateCGToSDL (_THIS, NSPoint *p) {
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   217
            
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   218
    if ( ! CGDisplayIsCaptured (display_id) ) { /* not captured => not fullscreen => local coord */
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   219
    
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   220
        int height;
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   221
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   222
        /* Convert CG Global to Cocoa Global */
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   223
        height = CGDisplayPixelsHigh (display_id);
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   224
        p->y = height - p->y;
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   225
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   226
        QZ_PrivateGlobalToLocal (this, p);
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   227
        QZ_PrivateCocoaToSDL (this, p);
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   228
    }
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   229
}
683
5d2f027b3349 Date: Sat, 9 Aug 2003 20:14:06 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 615
diff changeset
   230
#endif /* Dead code */
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   231
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   232
void  QZ_PrivateWarpCursor (_THIS, int x, int y) {
5628
f78f29271dfd Cleaned out all the deprecated stuff in Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents: 4392
diff changeset
   233
    CGEventSourceRef evsrc = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   234
    NSPoint p;
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   235
    CGPoint cgp;
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   236
    
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   237
    p = NSMakePoint (x, y);
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   238
    cgp = QZ_PrivateSDLToCG (this, &p);
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   239
    
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   240
    /* this is the magic call that fixes cursor "freezing" after warp */
5628
f78f29271dfd Cleaned out all the deprecated stuff in Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents: 4392
diff changeset
   241
    CGEventSourceSetLocalEventsSuppressionInterval(evsrc, 0.0);
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   242
    CGWarpMouseCursorPosition (cgp);
5628
f78f29271dfd Cleaned out all the deprecated stuff in Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents: 4392
diff changeset
   243
    CFRelease(evsrc);
6087
185f8588deaa Quartz: When warping the mouse, update the APPMOUSEFOCUS state.
Ryan C. Gordon <icculus@icculus.org>
parents: 5628
diff changeset
   244
    SDL_PrivateAppActive (QZ_IsMouseInWindow (this), SDL_APPMOUSEFOCUS);
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   245
}
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   246
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   247
void QZ_WarpWMCursor (_THIS, Uint16 x, Uint16 y) {
272
d1447a846d80 Date: Sat, 19 Jan 2002 17:24:32 -0500 (EST)
Sam Lantinga <slouken@libsdl.org>
parents: 269
diff changeset
   248
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   249
    /* Only allow warping when in foreground */
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   250
    if ( ! [ NSApp isActive ] )
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   251
        return;
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   252
            
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   253
    /* Do the actual warp */
1207
c9ec00d3e8bc To: sdl@libsdl.org
Ryan C. Gordon <icculus@icculus.org>
parents: 1192
diff changeset
   254
    if (grab_state != QZ_INVISIBLE_GRAB) QZ_PrivateWarpCursor (this, x, y);
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   255
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   256
    /* Generate the mouse moved event */
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   257
    SDL_PrivateMouseMotion (0, 0, x, y);
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   258
}
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   259
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   260
void QZ_MoveWMCursor     (_THIS, int x, int y) { }
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   261
void QZ_CheckMouseMode   (_THIS) { }
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   262
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   263
void QZ_SetCaption    (_THIS, const char *title, const char *icon) {
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   264
158
4382c38dfbee Date: Tue, 21 Aug 2001 03:50:01 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 58
diff changeset
   265
    if ( qz_window != nil ) {
58
bd6b0a910a65 * Removed fullscreen menu option from the "Window" menu
Sam Lantinga <slouken@lokigames.com>
parents: 47
diff changeset
   266
        NSString *string;
bd6b0a910a65 * Removed fullscreen menu option from the "Window" menu
Sam Lantinga <slouken@lokigames.com>
parents: 47
diff changeset
   267
        if ( title != NULL ) {
951
121f56c1277d Date: Sun, 29 Aug 2004 20:55:54 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 934
diff changeset
   268
            string = [ [ NSString alloc ] initWithUTF8String:title ];
158
4382c38dfbee Date: Tue, 21 Aug 2001 03:50:01 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 58
diff changeset
   269
            [ qz_window setTitle:string ];
58
bd6b0a910a65 * Removed fullscreen menu option from the "Window" menu
Sam Lantinga <slouken@lokigames.com>
parents: 47
diff changeset
   270
            [ string release ];
bd6b0a910a65 * Removed fullscreen menu option from the "Window" menu
Sam Lantinga <slouken@lokigames.com>
parents: 47
diff changeset
   271
        }
bd6b0a910a65 * Removed fullscreen menu option from the "Window" menu
Sam Lantinga <slouken@lokigames.com>
parents: 47
diff changeset
   272
        if ( icon != NULL ) {
951
121f56c1277d Date: Sun, 29 Aug 2004 20:55:54 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 934
diff changeset
   273
            string = [ [ NSString alloc ] initWithUTF8String:icon ];
158
4382c38dfbee Date: Tue, 21 Aug 2001 03:50:01 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 58
diff changeset
   274
            [ qz_window setMiniwindowTitle:string ];
58
bd6b0a910a65 * Removed fullscreen menu option from the "Window" menu
Sam Lantinga <slouken@lokigames.com>
parents: 47
diff changeset
   275
            [ string release ];
bd6b0a910a65 * Removed fullscreen menu option from the "Window" menu
Sam Lantinga <slouken@lokigames.com>
parents: 47
diff changeset
   276
        }
bd6b0a910a65 * Removed fullscreen menu option from the "Window" menu
Sam Lantinga <slouken@lokigames.com>
parents: 47
diff changeset
   277
    }
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   278
}
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   279
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   280
void QZ_SetIcon       (_THIS, SDL_Surface *icon, Uint8 *mask)
269
4125b9859c71 Added Quartz version of SDL_SetIcon() for MacOS X (thanks Bob)
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
   281
{
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   282
    NSBitmapImageRep *imgrep;
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   283
    NSImage *img;
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   284
    SDL_Surface *mergedSurface;
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   285
    NSAutoreleasePool *pool;
1812
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   286
    Uint8 *pixels;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   287
    SDL_bool iconSrcAlpha;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   288
    Uint8 iconAlphaValue;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   289
    int i, j, maskPitch, index;
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   290
    
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   291
    pool = [ [ NSAutoreleasePool alloc ] init ];
1812
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   292
    
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   293
    imgrep = [ [ [ NSBitmapImageRep alloc ] initWithBitmapDataPlanes: NULL pixelsWide: icon->w pixelsHigh: icon->h bitsPerSample: 8 samplesPerPixel: 4 hasAlpha: YES isPlanar: NO colorSpaceName: NSDeviceRGBColorSpace bytesPerRow: 4*icon->w bitsPerPixel: 32 ] autorelease ];
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   294
    if (imgrep == nil) goto freePool;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   295
    pixels = [ imgrep bitmapData ];
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   296
    SDL_memset(pixels, 0, 4*icon->w*icon->h); /* make the background, which will survive in colorkeyed areas, completely transparent */
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   297
    
1812
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   298
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   299
#define BYTEORDER_DEPENDENT_RGBA_MASKS 0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   300
#else
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   301
#define BYTEORDER_DEPENDENT_RGBA_MASKS 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   302
#endif
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   303
    mergedSurface = SDL_CreateRGBSurfaceFrom(pixels, icon->w, icon->h, 32, 4*icon->w, BYTEORDER_DEPENDENT_RGBA_MASKS);
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   304
    if (mergedSurface == NULL) goto freePool;
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   305
    
1812
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   306
    /* blit, with temporarily cleared SRCALPHA flag because we want to copy, not alpha-blend */
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   307
    iconSrcAlpha = ((icon->flags & SDL_SRCALPHA) != 0);
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   308
    iconAlphaValue = icon->format->alpha;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   309
    SDL_SetAlpha(icon, 0, 255);
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   310
    SDL_BlitSurface(icon, NULL, mergedSurface, NULL);
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   311
    if (iconSrcAlpha) SDL_SetAlpha(icon, SDL_SRCALPHA, iconAlphaValue);
592
1970e458070d Fixed crash in SDL_SetIcon() under Quartz (thanks Darrell!)
Sam Lantinga <slouken@libsdl.org>
parents: 563
diff changeset
   312
    
1812
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   313
    SDL_FreeSurface(mergedSurface);
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   314
    
1812
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   315
    /* apply mask, source alpha, and premultiply color values by alpha */
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   316
    maskPitch = (icon->w+7)/8;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   317
    for (i = 0; i < icon->h; i++) {
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   318
        for (j = 0; j < icon->w; j++) {
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   319
            index = i*4*icon->w + j*4;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   320
            if (!(mask[i*maskPitch + j/8] & (128 >> j%8))) {
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   321
                pixels[index + 3] = 0;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   322
            }
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   323
            else {
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   324
                if (iconSrcAlpha) {
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   325
                    if (icon->format->Amask == 0) pixels[index + 3] = icon->format->alpha;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   326
                }
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   327
                else {
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   328
                    pixels[index + 3] = 255;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   329
                }
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   330
            }
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   331
            if (pixels[index + 3] < 255) {
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   332
                pixels[index + 0] = (Uint16)pixels[index + 0]*pixels[index + 3]/255;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   333
                pixels[index + 1] = (Uint16)pixels[index + 1]*pixels[index + 3]/255;
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   334
                pixels[index + 2] = (Uint16)pixels[index + 2]*pixels[index + 3]/255;
592
1970e458070d Fixed crash in SDL_SetIcon() under Quartz (thanks Darrell!)
Sam Lantinga <slouken@libsdl.org>
parents: 563
diff changeset
   335
            }
1970e458070d Fixed crash in SDL_SetIcon() under Quartz (thanks Darrell!)
Sam Lantinga <slouken@libsdl.org>
parents: 563
diff changeset
   336
        }
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   337
    }
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   338
    
1812
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   339
    img = [ [ [ NSImage alloc ] initWithSize: NSMakeSize(icon->w, icon->h) ] autorelease ];
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   340
    if (img == nil) goto freePool;
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   341
    [ img addRepresentation: imgrep ];
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   342
    [ NSApp setApplicationIconImage:img ];
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   343
    
269
4125b9859c71 Added Quartz version of SDL_SetIcon() for MacOS X (thanks Bob)
Sam Lantinga <slouken@libsdl.org>
parents: 252
diff changeset
   344
freePool:
1812
9c882e94b545 Fixed bug #208
Sam Lantinga <slouken@libsdl.org>
parents: 1756
diff changeset
   345
    [ pool release ];
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   346
}
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   347
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   348
int  QZ_IconifyWindow (_THIS) { 
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   349
158
4382c38dfbee Date: Tue, 21 Aug 2001 03:50:01 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 58
diff changeset
   350
    if ( ! [ qz_window isMiniaturized ] ) {
4382c38dfbee Date: Tue, 21 Aug 2001 03:50:01 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 58
diff changeset
   351
        [ qz_window miniaturize:nil ];
4122
cb7b118b400a Fixed return value for iconifying the window in a couple spots.
Sam Lantinga <slouken@libsdl.org>
parents: 4070
diff changeset
   352
        if ( ! [ qz_window isMiniaturized ] ) {
cb7b118b400a Fixed return value for iconifying the window in a couple spots.
Sam Lantinga <slouken@libsdl.org>
parents: 4070
diff changeset
   353
            SDL_SetError ("window iconification failed");
cb7b118b400a Fixed return value for iconifying the window in a couple spots.
Sam Lantinga <slouken@libsdl.org>
parents: 4070
diff changeset
   354
            return 0;
cb7b118b400a Fixed return value for iconifying the window in a couple spots.
Sam Lantinga <slouken@libsdl.org>
parents: 4070
diff changeset
   355
        }
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   356
        return 1;
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   357
    }
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   358
    else {
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   359
        SDL_SetError ("window already iconified");
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   360
        return 0;
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   361
    }
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   362
}
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   363
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   364
/*
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   365
int  QZ_GetWMInfo  (_THIS, SDL_SysWMinfo *info) { 
158
4382c38dfbee Date: Tue, 21 Aug 2001 03:50:01 +0200
Sam Lantinga <slouken@libsdl.org>
parents: 58
diff changeset
   366
    info->nsWindowPtr = qz_window;
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   367
    return 0; 
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   368
}*/
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   369
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   370
void QZ_ChangeGrabState (_THIS, int action) {
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   371
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   372
    /* 
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   373
        Figure out what the next state should be based on the action.
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   374
        Ignore actions that can't change the current state.
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   375
    */
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   376
    if ( grab_state == QZ_UNGRABBED ) {
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   377
        if ( action == QZ_ENABLE_GRAB ) {
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   378
            if ( cursor_should_be_visible )
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   379
                grab_state = QZ_VISIBLE_GRAB;
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   380
            else
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   381
                grab_state = QZ_INVISIBLE_GRAB;
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   382
        }
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   383
    }
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   384
    else if ( grab_state == QZ_VISIBLE_GRAB ) {
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   385
        if ( action == QZ_DISABLE_GRAB )
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   386
            grab_state = QZ_UNGRABBED;
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   387
        else if ( action == QZ_HIDECURSOR )
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   388
            grab_state = QZ_INVISIBLE_GRAB;
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   389
    }
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   390
    else {
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   391
        assert( grab_state == QZ_INVISIBLE_GRAB );
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   392
        
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   393
        if ( action == QZ_DISABLE_GRAB )
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   394
            grab_state = QZ_UNGRABBED;
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   395
        else if ( action == QZ_SHOWCURSOR )
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   396
            grab_state = QZ_VISIBLE_GRAB;
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   397
    }
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   398
    
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   399
    /* now apply the new state */
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   400
    if (grab_state == QZ_UNGRABBED) {
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   401
    
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   402
        CGAssociateMouseAndMouseCursorPosition (1);
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   403
    }
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   404
    else if (grab_state == QZ_VISIBLE_GRAB) {
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   405
    
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   406
        CGAssociateMouseAndMouseCursorPosition (1);
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   407
    }
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   408
    else {
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   409
        assert( grab_state == QZ_INVISIBLE_GRAB );
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   410
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   411
        QZ_PrivateWarpCursor (this, SDL_VideoSurface->w / 2, SDL_VideoSurface->h / 2);
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   412
        CGAssociateMouseAndMouseCursorPosition (0);
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   413
    }
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   414
}
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   415
761
c5b2b6d2d1fe Date: Wed, 31 Dec 2003 21:55:30 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 683
diff changeset
   416
SDL_GrabMode QZ_GrabInput (_THIS, SDL_GrabMode grab_mode) {
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   417
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   418
    int doGrab = grab_mode & SDL_GRAB_ON;
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   419
    /*int fullscreen = grab_mode & SDL_GRAB_FULLSCREEN;*/
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   420
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   421
    if ( this->screen == NULL ) {
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   422
        SDL_SetError ("QZ_GrabInput: screen is NULL");
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   423
        return SDL_GRAB_OFF;
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   424
    }
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   425
        
563
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   426
    if ( ! video_set ) {
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   427
        /*SDL_SetError ("QZ_GrabInput: video is not set, grab will take effect on mode switch"); */
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   428
        current_grab_mode = grab_mode;
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   429
        return grab_mode;       /* Will be set later on mode switch */
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   430
    }
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   431
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   432
    if ( grab_mode != SDL_GRAB_QUERY ) {
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   433
        if ( doGrab )
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   434
            QZ_ChangeGrabState (this, QZ_ENABLE_GRAB);
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   435
        else
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   436
            QZ_ChangeGrabState (this, QZ_DISABLE_GRAB);
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   437
        
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   438
        current_grab_mode = doGrab ? SDL_GRAB_ON : SDL_GRAB_OFF;
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   439
    }
04dcaf3da918 Massive Quartz input enhancements from Darrell Walisser. His email:
Ryan C. Gordon <icculus@icculus.org>
parents: 501
diff changeset
   440
501
74262d2647ca Lots of cleanups by Darrell, added the ability to resize Cocoa windows.
Sam Lantinga <slouken@libsdl.org>
parents: 390
diff changeset
   441
    return current_grab_mode;
47
45b1c4303f87 Added initial support for Quartz video (thanks Darrell!)
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   442
}