diff -r b07ee704f35d -r ccf4854df294 project_files/HedgewarsMobile/Classes/otherSrc/SDL_uikitappdelegate.m --- a/project_files/HedgewarsMobile/Classes/otherSrc/SDL_uikitappdelegate.m Wed Jun 23 21:39:14 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,194 +0,0 @@ -/* - 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_uikitwindow.h" -#import "SDL_events_c.h" -#import "../SDL_sysvideo.h" -#import "jumphack.h" -#import "SDL_video.h" -#import "GameSetup.h" -#import "PascalImports.h" -#import "MainMenuViewController.h" -#import "OverlayViewController.h" -#import "CommodityFunctions.h" - -#ifdef main -#undef main -#endif - -#define VALGRIND "/opt/valgrind/bin/valgrind" - -int main (int argc, char *argv[]) { -#ifdef VALGRIND_REXEC - // Using the valgrind build config, rexec ourself in valgrind - // from http://landonf.bikemonkey.org/code/iphone/iPhone_Simulator_Valgrind.20081224.html - if (argc < 2 || (argc >= 2 && strcmp(argv[1], "-valgrind") != 0)) - execl(VALGRIND, VALGRIND, "--leak-check=full", argv[0], "-valgrind", NULL); -#endif - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - int retVal = UIApplicationMain(argc, argv, nil, @"SDLUIKitDelegate"); - [pool release]; - return retVal; -} - -@implementation SDLUIKitDelegate -@synthesize uiwindow, window; - -// convenience method -+(SDLUIKitDelegate *)sharedAppDelegate { - // the delegate is set in UIApplicationMain(), which is guaranteed to be called before this method - return (SDLUIKitDelegate *)[[UIApplication sharedApplication] delegate]; -} - --(id) init { - if (self = [super init]){ - mainViewController = nil; - isInGame = NO; - self.uiwindow = nil; - self.window = NULL; - } - return self; -} - --(void) dealloc { - SDL_DestroyWindow(self.window); - [uiwindow release]; - [mainViewController release]; - [super dealloc]; -} - -// main routine for calling the actual game engine --(IBAction) startSDLgame { - [UIView beginAnimations:@"removing main controller" context:NULL]; - [UIView setAnimationDuration:1]; - mainViewController.view.alpha = 0; - [UIView commitAnimations]; - - // pull out useful configuration info from various files - GameSetup *setup = [[GameSetup alloc] init]; - [setup startThread:@"engineProtocol"]; - const char **gameArgs = [setup getSettings]; - [setup release]; - - // since the sdlwindow is not yet created, we add the overlayController with a delay - [self performSelector:@selector(displayOverlayLater) withObject:nil afterDelay:0.5]; - - // this is the pascal fuction that starts the game (wrapped around isInGame) - isInGame = YES; - Game(gameArgs); - isInGame = NO; - - free(gameArgs); - - [UIView beginAnimations:@"inserting main controller" context:NULL]; - [UIView setAnimationDuration:1]; - mainViewController.view.alpha = 1; - [UIView commitAnimations]; -} - --(void) displayOverlayLater { - // overlay with controls, become visible after 4 seconds, with a transparency effect - OverlayViewController *overlayController = [[OverlayViewController alloc] initWithNibName:@"OverlayViewController" bundle:nil]; - - [[[UIApplication sharedApplication] keyWindow] addSubview:overlayController.view]; - [overlayController release]; -} - -// override the direct execution of SDL_main to allow us to implement the frontend (or even using a nib) --(void) applicationDidFinishLaunching:(UIApplication *)application { - [application setStatusBarHidden:YES]; - [application setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO]; - - uiwindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - uiwindow.backgroundColor = [UIColor blackColor]; - // needed to keep the app running after a game (gets released in sdl_uikitwindow) - [uiwindow retain]; - - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) - mainViewController = [[MainMenuViewController alloc] initWithNibName:@"MainMenuViewController-iPad" bundle:nil]; - else - mainViewController = [[MainMenuViewController alloc] initWithNibName:@"MainMenuViewController-iPhone" bundle:nil]; - - [uiwindow addSubview:mainViewController.view]; - [uiwindow makeKeyAndVisible]; - - // Set working directory to resource path - [[NSFileManager defaultManager] changeCurrentDirectoryPath:[[NSBundle mainBundle] resourcePath]]; -} - --(void) applicationWillTerminate:(UIApplication *)application { - SDL_SendQuit(); - if (isInGame) { - HW_terminate(YES); - // hack to prevent automatic termination. See SDL_uikitevents.m for details - longjmp(*(jump_env()), 1); - } -} - --(void) applicationWillResignActive:(UIApplication *)application { - //NSLog(@"%@", NSStringFromSelector(_cmd)); - if (isInGame) { - HW_pause(); - - /* - // Send every window on every screen a MINIMIZED event. - SDL_VideoDevice *_this = SDL_GetVideoDevice(); - if (!_this) - return; - - int i; - for (i = 0; i < _this->num_displays; i++) { - const SDL_VideoDisplay *display = &_this->displays[i]; - SDL_Window *window; - for (window = display->windows; window != nil; window = window->next) - SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MINIMIZED, 0, 0); - } - */ - } -} - --(void) applicationDidBecomeActive:(UIApplication *)application { - //NSLog(@"%@", NSStringFromSelector(_cmd)); - if (isInGame) { - HW_pause(); - - /* - // Send every window on every screen a RESTORED event. - SDL_VideoDevice *_this = SDL_GetVideoDevice(); - if (!_this) - return; - - int i; - for (i = 0; i < _this->num_displays; i++) { - const SDL_VideoDisplay *display = &_this->displays[i]; - SDL_Window *window; - for (window = display->windows; window != nil; window = window->next) - SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0); - } - */ - } -} - -@end