diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m Fri Jan 08 03:52:44 2010 +0000 @@ -0,0 +1,129 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2009 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga, mods for Hedgewars by Vittorio Giovara + slouken@libsdl.org, vittorio.giovara@gmail.com +*/ + +#import "SDL_uikitappdelegate.h" +#import "SDL_uikitopenglview.h" +#import "SDL_events_c.h" +#import "jumphack.h" +#import "SDL_video.h" + +#ifdef main +#undef main +#endif + +extern int SDL_main(int argc, char *argv[]); +static int forward_argc; +static char **forward_argv; + +int main (int argc, char **argv) { + int i; + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + /* store arguments */ + forward_argc = argc; + forward_argv = (char **)malloc(argc * sizeof(char *)); + for (i = 0; i < argc; i++) { + forward_argv[i] = malloc( (strlen(argv[i])+1) * sizeof(char)); + strcpy(forward_argv[i], argv[i]); + } + + /* Give over control to run loop, SDLUIKitDelegate will handle most things from here */ + UIApplicationMain(argc, argv, NULL, @"SDLUIKitDelegate"); + + [pool release]; +} + +@implementation SDLUIKitDelegate + +@synthesize window, windowID, controller; + +/* convenience method */ ++(SDLUIKitDelegate *)sharedAppDelegate { + /* the delegate is set in UIApplicationMain(), which is garaunteed to be called before this method */ + return (SDLUIKitDelegate *)[[UIApplication sharedApplication] delegate]; +} + +- (void) startSDLgame { + + /* run the user's application, passing argc and argv */ + NSLog(@"Game is launching"); + SDL_main(forward_argc, forward_argv); + // can't reach here yet + NSLog(@"Game exited"); + + //[self performSelector:@selector(makeNewView) withObject:nil afterDelay:0.0]; + /* exit, passing the return status from the user's application */ + //exit(exit_status); +} + +// override the direct execution of SDL_main to allow us to implement the frontend (even using a nib) +-(void) applicationDidFinishLaunching:(UIApplication *)application { + [application setStatusBarHidden:YES animated:NO]; + + /* Set working directory to resource path */ + [[NSFileManager defaultManager] changeCurrentDirectoryPath: [[NSBundle mainBundle] resourcePath]]; + + [window addSubview:controller.view]; + [window makeKeyAndVisible]; +} + +-(void) applicationWillTerminate:(UIApplication *)application { + /* free the memory we used to hold copies of argc and argv */ + int i; + for (i=0; i < forward_argc; i++) { + free(forward_argv[i]); + } + free(forward_argv); + SDL_SendQuit(); + /* hack to prevent automatic termination. See SDL_uikitevents.m for details */ + // have to remove this otherwise game goes on when pushing the home button + //longjmp(*(jump_env()), 1); + + NSLog(@"Closing App..."); +} + +-(void) applicationWillResignActive:(UIApplication*)application +{ +// NSLog(@"%@", NSStringFromSelector(_cmd)); + SDL_SendWindowEvent(self.windowID, SDL_WINDOWEVENT_MINIMIZED, 0, 0); +} + +-(void) applicationDidBecomeActive:(UIApplication*)application +{ +// NSLog(@"%@", NSStringFromSelector(_cmd)); + SDL_SendWindowEvent(self.windowID, SDL_WINDOWEVENT_RESTORED, 0, 0); +} + +/* +-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation { + NSLog(@"Rotating..."); + return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); +} +*/ + +-(void) dealloc { + [controller release]; + [window release]; + [super dealloc]; +} + +@end