Files
itgmania212121/stepmania/PBProject/SDLMain.m
T

146 lines
3.6 KiB
Objective-C
Executable File

/* SDLMain.m - main entry point for our Cocoa-ized SDL app
Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
Non-NIB-Code & other changes: Max Horn <max@quendi.de>
Feel free to customize this file to suit your needs
*/
#import <Cocoa/Cocoa.h>
#import <SDL.h>
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
static int gArgc;
static char **gArgv;
@interface SDLApplication : NSApplication
@end
@interface SDLMain : NSObject {}
- (void) startGame:(id)obj;
@end
@implementation SDLApplication
/* Invoked from the Quit menu item */
- (void)terminate:(id)sender
{
/* Post a SDL_QUIT event */
SDL_Event event;
event.type = SDL_QUIT;
SDL_PushEvent(&event);
}
- (void)sendEvent:(NSEvent *)event
{
if( [event type] != NSKeyDown )
[super sendEvent:event];
}
@end
/* The main class of the application, the application's delegate */
@implementation SDLMain
- (void) startGame:(id)obj
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
/* Hand off to main application code */
exit( SDL_main (gArgc, gArgv) );
[pool release]; // not really needed, but shuts gcc up.
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
#if 1
[NSThread detachNewThreadSelector:@selector(startGame:) toTarget:self withObject:nil];
#else
[self startGame:nil];
#endif
}
@end
static void setupMenus( void )
{
NSMenu *windowMenu;
NSMenuItem *windowMenuItem;
NSMenuItem *menuItem;
NSMenu *mainMenu = [NSApp mainMenu];
printf("%d\n", [mainMenu numberOfItems]);
windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
/* "Minimize" item */
menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:)
keyEquivalent:@"m"];
[windowMenu addItem:menuItem];
[menuItem release];
/* Put menu into the menubar */
windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
[windowMenuItem setSubmenu:windowMenu];
[mainMenu addItem:windowMenuItem];
/* Tell the application object that this is now the window menu */
[NSApp setWindowsMenu:windowMenu];
/* Finally give up our references to the objects */
[windowMenu release];
[windowMenuItem release];
}
/* Replacement for NSApplicationMain */
static void CustomApplicationMain( int argc, char **argv )
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SDLMain *sdlMain;
/* Ensure the application object is initialised */
[SDLApplication sharedApplication];
//[NSApp setMainMenu:[[NSMenu alloc] initWithTitle:@""]];
/* Set up the menubar */
setupMenus();
/* Create SDLMain and make it the app delegate */
sdlMain = [[SDLMain alloc] init];
[NSApp setDelegate:sdlMain];
/* Start the main event loop */
[NSApp run];
[sdlMain release];
[pool release];
}
#ifdef main
# undef main
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main( int argc, char **argv )
{
/* Copy the arguments into a global variable */
int i;
/* This is passed if we are launched by double-clicking */
if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 )
gArgc = 1;
else
gArgc = argc;
gArgv = (char**) malloc (sizeof(*gArgv) * (gArgc+1));
assert (gArgv != NULL);
for (i = 0; i < gArgc; i++)
gArgv[i] = argv[i];
gArgv[i] = NULL;
[SDLApplication poseAsClass:[NSApplication class]];
CustomApplicationMain( argc, argv );
return 0;
}