Mercurial > sdl-ios-xcode
comparison src/video/cocoa/SDL_cocoaevents.m @ 1931:103c6fec2a60
The Mac OS X Cocoa video driver is under construction...
Note that SDLmain is no longer necessary on Mac OS X. :)
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 23 Jul 2006 09:11:10 +0000 |
parents | |
children | dc864bcabcc4 |
comparison
equal
deleted
inserted
replaced
1930:9483df98e011 | 1931:103c6fec2a60 |
---|---|
1 /* | |
2 SDL - Simple DirectMedia Layer | |
3 Copyright (C) 1997-2006 Sam Lantinga | |
4 | |
5 This library is free software; you can redistribute it and/or | |
6 modify it under the terms of the GNU Lesser General Public | |
7 License as published by the Free Software Foundation; either | |
8 version 2.1 of the License, or (at your option) any later version. | |
9 | |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 Lesser General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU Lesser General Public | |
16 License along with this library; if not, write to the Free Software | |
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
18 | |
19 Sam Lantinga | |
20 slouken@libsdl.org | |
21 */ | |
22 #include "SDL_config.h" | |
23 | |
24 #include "SDL_cocoavideo.h" | |
25 | |
26 /* setAppleMenu disappeared from the headers in 10.4 */ | |
27 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 | |
28 @interface NSApplication(NSAppleMenu) | |
29 - (void)setAppleMenu:(NSMenu *)menu; | |
30 @end | |
31 #endif | |
32 | |
33 @interface SDLApplication : NSApplication | |
34 { | |
35 } | |
36 - (void)finishLaunching; | |
37 @end | |
38 | |
39 @implementation SDLApplication | |
40 | |
41 - (void)finishLaunching | |
42 { | |
43 [super finishLaunching]; | |
44 _running = 1; | |
45 } | |
46 | |
47 @end | |
48 | |
49 static NSString * | |
50 GetApplicationName(void) | |
51 { | |
52 NSDictionary *dict; | |
53 NSString *appName = 0; | |
54 | |
55 /* Determine the application name */ | |
56 dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle()); | |
57 if (dict) | |
58 appName = [dict objectForKey: @"CFBundleName"]; | |
59 | |
60 if (![appName length]) | |
61 appName = [[NSProcessInfo processInfo] processName]; | |
62 | |
63 return appName; | |
64 } | |
65 | |
66 static void | |
67 CreateApplicationMenus(void) | |
68 { | |
69 NSString *appName; | |
70 NSString *title; | |
71 NSMenu *appleMenu; | |
72 NSMenu *windowMenu; | |
73 NSMenuItem *menuItem; | |
74 | |
75 /* Create the main menu bar */ | |
76 [NSApp setMainMenu:[[NSMenu alloc] init]]; | |
77 | |
78 /* Create the application menu */ | |
79 appName = GetApplicationName(); | |
80 appleMenu = [[NSMenu alloc] initWithTitle:@""]; | |
81 | |
82 /* Add menu items */ | |
83 title = [@"About " stringByAppendingString:appName]; | |
84 [appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; | |
85 | |
86 [appleMenu addItem:[NSMenuItem separatorItem]]; | |
87 | |
88 title = [@"Hide " stringByAppendingString:appName]; | |
89 [appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"]; | |
90 | |
91 menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; | |
92 [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)]; | |
93 | |
94 [appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; | |
95 | |
96 [appleMenu addItem:[NSMenuItem separatorItem]]; | |
97 | |
98 title = [@"Quit " stringByAppendingString:appName]; | |
99 [appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"]; | |
100 | |
101 /* Put menu into the menubar */ | |
102 menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; | |
103 [menuItem setSubmenu:appleMenu]; | |
104 [[NSApp mainMenu] addItem:menuItem]; | |
105 [menuItem release]; | |
106 | |
107 /* Tell the application object that this is now the application menu */ | |
108 [NSApp setAppleMenu:appleMenu]; | |
109 [appleMenu release]; | |
110 | |
111 | |
112 /* Create the window menu */ | |
113 windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; | |
114 | |
115 /* "Minimize" item */ | |
116 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; | |
117 [windowMenu addItem:menuItem]; | |
118 [menuItem release]; | |
119 | |
120 /* Put menu into the menubar */ | |
121 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""]; | |
122 [menuItem setSubmenu:windowMenu]; | |
123 [[NSApp mainMenu] addItem:menuItem]; | |
124 [menuItem release]; | |
125 | |
126 /* Tell the application object that this is now the window menu */ | |
127 [NSApp setWindowsMenu:windowMenu]; | |
128 [windowMenu release]; | |
129 } | |
130 | |
131 void | |
132 Cocoa_RegisterApp(void) | |
133 { | |
134 ProcessSerialNumber psn; | |
135 NSAutoreleasePool *pool; | |
136 | |
137 if (!GetCurrentProcess(&psn)) { | |
138 TransformProcessType(&psn, kProcessTransformToForegroundApplication); | |
139 SetFrontProcess(&psn); | |
140 } | |
141 | |
142 pool = [[NSAutoreleasePool alloc] init]; | |
143 if (NSApp == nil) { | |
144 [SDLApplication sharedApplication]; | |
145 | |
146 if ([NSApp mainMenu] == nil) { | |
147 CreateApplicationMenus(); | |
148 } | |
149 [NSApp finishLaunching]; | |
150 } | |
151 [pool release]; | |
152 } | |
153 | |
154 void | |
155 Cocoa_PumpEvents(_THIS) | |
156 { | |
157 NSAutoreleasePool *pool; | |
158 | |
159 pool = [[NSAutoreleasePool alloc] init]; | |
160 for ( ; [NSApp isRunning]; ) { | |
161 NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES ]; | |
162 if ( event == nil ) { | |
163 break; | |
164 } | |
165 [NSApp sendEvent:event]; | |
166 } | |
167 [pool release]; | |
168 } | |
169 | |
170 /* vi: set ts=4 sw=4 expandtab: */ |