# HG changeset patch # User koda # Date 1262922764 0 # Node ID 174c94b8ea72d3c495984337ba1bc1189e2d294a # Parent 28b8330b8af1a35d751279cd49829c27ed2f1e1f move all sdl source files in a proper directory remove hackish code to get a window up, now it should be quite clean diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDLOverrides/SDL_uikitappdelegate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.h Fri Jan 08 03:52:44 2010 +0000 @@ -0,0 +1,40 @@ +/* + 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 +#import "SDL_video.h" + +@interface SDLUIKitDelegate:NSObject { + UIWindow *window; + SDL_WindowID windowID; + UITabBarController *controller; +} + +// the outlets are set in MainWindow.xib +@property (readwrite, retain) IBOutlet UIWindow *window; +@property (readwrite, assign) SDL_WindowID windowID; +@property (nonatomic, retain) IBOutlet UITabBarController *controller; + ++(SDLUIKitDelegate *)sharedAppDelegate; +-(void) startSDLgame; + +@end 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 diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDLOverrides/SDL_uikitview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitview.h Fri Jan 08 03:52:44 2010 +0000 @@ -0,0 +1,77 @@ +/* + 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 +#include "SDL_stdinc.h" +#include "SDL_mouse.h" +#include "SDL_mouse_c.h" +#include "SDL_events.h" + +#import "CGPointUtils.h" + +#if SDL_IPHONE_MULTIPLE_MICE +#define MAX_SIMULTANEOUS_TOUCHES 5 +#else +#define MAX_SIMULTANEOUS_TOUCHES 1 +#endif + +// constants for telling which input has been received +#define kMinimumPinchDelta 100 +#define kMinimumGestureLength 20 +#define kMaximumVariance 4 + +/* *INDENT-OFF* */ +//#if SDL_IPHONE_KEYBOARD +//@interface SDL_uikitview : UIView { +//#else +@interface SDL_uikitview : UIView { +//#endif + SDL_Mouse mice[MAX_SIMULTANEOUS_TOUCHES]; + CGFloat initialDistance; + CGPoint gestureStartPoint; + +#if SDL_IPHONE_KEYBOARD + UITextField *textField; + BOOL keyboardVisible; +#endif +} + +-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; +-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; +-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; + +// see initWithFrame for why "+" ++(void) attackButtonPressed; ++(void) attackButtonReleased; + +@property CGFloat initialDistance; +@property CGPoint gestureStartPoint; + +#if SDL_IPHONE_KEYBOARD +- (void)showKeyboard; +- (void)hideKeyboard; +- (void)initializeKeyboard; +@property (readonly) BOOL keyboardVisible; +#endif + +@end +/* *INDENT-ON* */ diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDLOverrides/SDL_uikitview.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitview.m Fri Jan 08 03:52:44 2010 +0000 @@ -0,0 +1,494 @@ +/* + 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 + */ + +#include "PascalImports.h" +#import "SDL_uikitview.h" +#import "SDL_uikitappdelegate.h" + +#if SDL_IPHONE_KEYBOARD +#import "SDL_keyboard_c.h" +#import "keyinfotable.h" +#import "SDL_uikitwindow.h" +#endif + +@implementation SDL_uikitview + +@synthesize initialDistance, gestureStartPoint; + +- (void)dealloc { +#if SDL_IPHONE_KEYBOARD + SDL_DelKeyboard(0); + [textField release]; +#endif + [super dealloc]; +} + +- (id)initWithFrame:(CGRect)frame { + + self = [super initWithFrame: frame]; + +#if SDL_IPHONE_KEYBOARD + [self initializeKeyboard]; +#endif + + int i; + for (i=0; i= kMinimumGestureLength && deltaY <= kMaximumVariance) { + NSLog(@"Horizontal swipe detected, begX:%f curX:%f", gestureStartPoint.x, currentPosition.x); + if (Xdiff > 0) HW_walkLeft(); + else HW_walkRight(); + } + else if (deltaY >= kMinimumGestureLength && deltaX <= kMaximumVariance){ + NSLog(@"Vertical swipe detected, begY:%f curY:%f", gestureStartPoint.y, currentPosition.y); + if (Ydiff > 0) HW_aimUp(); + else HW_aimDown(); + } + + // end pinch detection + if (2 == [touches count]) { + NSArray *twoTouches = [touches allObjects]; + UITouch *first = [twoTouches objectAtIndex:0]; + UITouch *second = [twoTouches objectAtIndex:1]; + CGFloat currentDistance = distanceBetweenPoints([first locationInView:self], [second locationInView:self]); + + if (0 == initialDistance) + initialDistance = currentDistance; + else if (currentDistance - initialDistance > kMinimumPinchDelta) { + NSLog(@"Outward pinch detected"); + HW_zoomOut(); + } + else if (initialDistance - currentDistance > kMinimumPinchDelta) { + NSLog(@"Inward pinch detected"); + HW_zoomIn(); + } + } + + /*NSEnumerator *enumerator = [touches objectEnumerator]; + UITouch *touch=nil;while(touch = (UITouch *)[enumerator nextObject]) { + // try to find the mouse associated with this touch + int i, found = NO; + for (i=0; idriverdata; + view = data->view; + + if (nil == view) { + SDL_SetError("Window has no view"); + return -1; + } + else { + [view showKeyboard]; + return 0; + } +} + +int SDL_iPhoneKeyboardHide(SDL_WindowID windowID) { + + SDL_Window *window = SDL_GetWindowFromID(windowID); + SDL_WindowData *data; + SDL_uikitview *view; + + if (NULL == window) { + SDL_SetError("Window does not exist"); + return -1; + } + + data = (SDL_WindowData *)window->driverdata; + view = data->view; + + if (NULL == view) { + SDL_SetError("Window has no view"); + return -1; + } + else { + [view hideKeyboard]; + return 0; + } +} + +SDL_bool SDL_iPhoneKeyboardIsShown(SDL_WindowID windowID) { + + SDL_Window *window = SDL_GetWindowFromID(windowID); + SDL_WindowData *data; + SDL_uikitview *view; + + if (NULL == window) { + SDL_SetError("Window does not exist"); + return -1; + } + + data = (SDL_WindowData *)window->driverdata; + view = data->view; + + if (NULL == view) { + SDL_SetError("Window has no view"); + return 0; + } + else { + return view.keyboardVisible; + } +} + +int SDL_iPhoneKeyboardToggle(SDL_WindowID windowID) { + + SDL_Window *window = SDL_GetWindowFromID(windowID); + SDL_WindowData *data; + SDL_uikitview *view; + + if (NULL == window) { + SDL_SetError("Window does not exist"); + return -1; + } + + data = (SDL_WindowData *)window->driverdata; + view = data->view; + + if (NULL == view) { + SDL_SetError("Window has no view"); + return -1; + } + else { + if (SDL_iPhoneKeyboardIsShown(windowID)) { + SDL_iPhoneKeyboardHide(windowID); + } + else { + SDL_iPhoneKeyboardShow(windowID); + } + return 0; + } +} + +#else + +/* stubs, used if compiled without keyboard support */ + +int SDL_iPhoneKeyboardShow(SDL_WindowID windowID) { + SDL_SetError("Not compiled with keyboard support"); + return -1; +} + +int SDL_iPhoneKeyboardHide(SDL_WindowID windowID) { + SDL_SetError("Not compiled with keyboard support"); + return -1; +} + +SDL_bool SDL_iPhoneKeyboardIsShown(SDL_WindowID windowID) { + return 0; +} + +int SDL_iPhoneKeyboardToggle(SDL_WindowID windowID) { + SDL_SetError("Not compiled with keyboard support"); + return -1; +} + + +#endif /* SDL_IPHONE_KEYBOARD */ diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDLOverrides/SDL_uikitwindow.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitwindow.h Fri Jan 08 03:52:44 2010 +0000 @@ -0,0 +1,47 @@ +/* + 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 + */ +#include "SDL_config.h" + +#ifndef _SDL_uikitwindow_h +#define _SDL_uikitwindow_h + +#include "../SDL_sysvideo.h" +#import "SDL_uikitopenglview.h" + +typedef struct SDL_WindowData SDL_WindowData; + +extern int UIKit_CreateWindow(_THIS, SDL_Window * window); +extern void UIKit_DestroyWindow(_THIS, SDL_Window * window); + +@class UIWindow; + +struct SDL_WindowData +{ + SDL_WindowID windowID; + UIWindow *uiwindow; + SDL_uikitopenglview *view; +}; + + +#endif /* _SDL_uikitwindow_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDLOverrides/SDL_uikitwindow.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitwindow.m Fri Jan 08 03:52:44 2010 +0000 @@ -0,0 +1,124 @@ +/* + 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 + */ +#include "SDL_config.h" + +#include "SDL_video.h" +#include "SDL_mouse.h" +#include "../SDL_sysvideo.h" +#include "../SDL_pixels_c.h" +#include "../../events/SDL_events_c.h" + +#include "SDL_uikitvideo.h" +#include "SDL_uikitevents.h" +#include "SDL_uikitwindow.h" +#import "SDL_uikitappdelegate.h" + +#import "SDL_uikitopenglview.h" +#import "SDL_renderer_sw.h" + +#include +#include + +static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bool created) { + + SDL_WindowData *data; + + /* Allocate the window data */ + data = (SDL_WindowData *)SDL_malloc(sizeof(*data)); + if (!data) { + SDL_OutOfMemory(); + return -1; + } + data->windowID = window->id; + data->uiwindow = uiwindow; + data->view = nil; + + /* Fill in the SDL window with the window data */ + { + window->x = 0; + window->y = 0; + window->w = (int)uiwindow.frame.size.width; + window->h = (int)uiwindow.frame.size.height; + } + + window->driverdata = data; + + window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizeable */ + window->flags |= SDL_WINDOW_OPENGL; /* window is always OpenGL */ + window->flags |= SDL_WINDOW_FULLSCREEN; /* window is always fullscreen */ + window->flags |= SDL_WINDOW_SHOWN; /* only one window on iPod touch, always shown */ + window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */ + + /* SDL_WINDOW_BORDERLESS controls whether status bar is hidden */ + if (window->flags & SDL_WINDOW_BORDERLESS) { + [UIApplication sharedApplication].statusBarHidden = YES; + } + else { + [UIApplication sharedApplication].statusBarHidden = NO; + } + + return 0; + +} + +int UIKit_CreateWindow(_THIS, SDL_Window *window) { + /* We currently only handle single window applications on iPhone + if (nil != [SDLUIKitDelegate sharedAppDelegate].window) { + SDL_SetError("Window already exists, no multi-window support."); + return -1; + } + + // ignore the size user requested, and make a fullscreen window + UIWindow *uiwindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];*/ + + // since we handle the window with a NIB, we don't need the initialization above + if (SetupWindowData(_this, window, [SDLUIKitDelegate sharedAppDelegate].window, SDL_TRUE) < 0) { + SDL_SetError("SetupWindowData() failed"); + return -1; + } + + // This saves the main window in the app delegate so event callbacks can do stuff on the window. + // This assumes a single window application design and needs to be fixed for multiple windows. + [SDLUIKitDelegate sharedAppDelegate].windowID = window->id; + +/* [SDLUIKitDelegate sharedAppDelegate].window = uiwindow; + [uiwindow release]; /* release the window (the app delegate has retained it) */ + + return 1; + +} + +void UIKit_DestroyWindow(_THIS, SDL_Window * window) { + /* don't worry, the delegate will automatically release the window */ + + SDL_WindowData *data = (SDL_WindowData *)window->driverdata; + if (data) { + SDL_free( window->driverdata ); + } + + /* this will also destroy the window */ + //[SDLUIKitDelegate sharedAppDelegate].window = nil; + [SDLUIKitDelegate sharedAppDelegate].windowID = 0; + +} + +/* vi: set ts=4 sw=4 expandtab: */ diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDL_uikitappdelegate.h --- a/cocoaTouch/SDL_uikitappdelegate.h Fri Jan 08 03:38:01 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +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 -#import "SDL_video.h" - -@interface SDLUIKitDelegate:NSObject { - UIWindow *window; - SDL_WindowID windowID; - UITabBarController *controller; -} - -// the outlets are set in MainWindow.xib -@property (readwrite, retain) IBOutlet UIWindow *window; -@property (readwrite, assign) SDL_WindowID windowID; -@property (nonatomic, retain) IBOutlet UITabBarController *controller; - -+(SDLUIKitDelegate *)sharedAppDelegate; --(void) startSDLgame; - -@end diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDL_uikitappdelegate.m --- a/cocoaTouch/SDL_uikitappdelegate.m Fri Jan 08 03:38:01 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +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_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]; -} - -/*- (id)init { - self = [super init]; - window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ; - windowID = 0; - return self; -}*/ - -- (void) startSDLgame { - // HACK: remove the current window and let SDL create a new one - [self.window release]; - if (nil != self.window) - self.window = nil; - - /* 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 diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDL_uikitview.h --- a/cocoaTouch/SDL_uikitview.h Fri Jan 08 03:38:01 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +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 -#include "SDL_stdinc.h" -#include "SDL_mouse.h" -#include "SDL_mouse_c.h" -#include "SDL_events.h" - -#import "CGPointUtils.h" - -#if SDL_IPHONE_MULTIPLE_MICE -#define MAX_SIMULTANEOUS_TOUCHES 5 -#else -#define MAX_SIMULTANEOUS_TOUCHES 1 -#endif - -// constants for telling which input has been received -#define kMinimumPinchDelta 100 -#define kMinimumGestureLength 20 -#define kMaximumVariance 4 - -/* *INDENT-OFF* */ -//#if SDL_IPHONE_KEYBOARD -//@interface SDL_uikitview : UIView { -//#else -@interface SDL_uikitview : UIView { -//#endif - SDL_Mouse mice[MAX_SIMULTANEOUS_TOUCHES]; - CGFloat initialDistance; - CGPoint gestureStartPoint; - -#if SDL_IPHONE_KEYBOARD - UITextField *textField; - BOOL keyboardVisible; -#endif -} - --(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; --(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; --(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; - -// see initWithFrame for why "+" -+(void) attackButtonPressed; -+(void) attackButtonReleased; - -@property CGFloat initialDistance; -@property CGPoint gestureStartPoint; - -#if SDL_IPHONE_KEYBOARD -- (void)showKeyboard; -- (void)hideKeyboard; -- (void)initializeKeyboard; -@property (readonly) BOOL keyboardVisible; -#endif - -@end -/* *INDENT-ON* */ diff -r 28b8330b8af1 -r 174c94b8ea72 cocoaTouch/SDL_uikitview.m --- a/cocoaTouch/SDL_uikitview.m Fri Jan 08 03:38:01 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,494 +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 - */ - -#include "PascalImports.h" -#import "SDL_uikitview.h" -#import "SDL_uikitappdelegate.h" - -#if SDL_IPHONE_KEYBOARD -#import "SDL_keyboard_c.h" -#import "keyinfotable.h" -#import "SDL_uikitwindow.h" -#endif - -@implementation SDL_uikitview - -@synthesize initialDistance, gestureStartPoint; - -- (void)dealloc { -#if SDL_IPHONE_KEYBOARD - SDL_DelKeyboard(0); - [textField release]; -#endif - [super dealloc]; -} - -- (id)initWithFrame:(CGRect)frame { - - self = [super initWithFrame: frame]; - -#if SDL_IPHONE_KEYBOARD - [self initializeKeyboard]; -#endif - - int i; - for (i=0; i= kMinimumGestureLength && deltaY <= kMaximumVariance) { - NSLog(@"Horizontal swipe detected, begX:%f curX:%f", gestureStartPoint.x, currentPosition.x); - if (Xdiff > 0) HW_walkLeft(); - else HW_walkRight(); - } - else if (deltaY >= kMinimumGestureLength && deltaX <= kMaximumVariance){ - NSLog(@"Vertical swipe detected, begY:%f curY:%f", gestureStartPoint.y, currentPosition.y); - if (Ydiff > 0) HW_aimUp(); - else HW_aimDown(); - } - - // end pinch detection - if (2 == [touches count]) { - NSArray *twoTouches = [touches allObjects]; - UITouch *first = [twoTouches objectAtIndex:0]; - UITouch *second = [twoTouches objectAtIndex:1]; - CGFloat currentDistance = distanceBetweenPoints([first locationInView:self], [second locationInView:self]); - - if (0 == initialDistance) - initialDistance = currentDistance; - else if (currentDistance - initialDistance > kMinimumPinchDelta) { - NSLog(@"Outward pinch detected"); - HW_zoomOut(); - } - else if (initialDistance - currentDistance > kMinimumPinchDelta) { - NSLog(@"Inward pinch detected"); - HW_zoomIn(); - } - } - - /*NSEnumerator *enumerator = [touches objectEnumerator]; - UITouch *touch=nil;while(touch = (UITouch *)[enumerator nextObject]) { - // try to find the mouse associated with this touch - int i, found = NO; - for (i=0; idriverdata; - view = data->view; - - if (nil == view) { - SDL_SetError("Window has no view"); - return -1; - } - else { - [view showKeyboard]; - return 0; - } -} - -int SDL_iPhoneKeyboardHide(SDL_WindowID windowID) { - - SDL_Window *window = SDL_GetWindowFromID(windowID); - SDL_WindowData *data; - SDL_uikitview *view; - - if (NULL == window) { - SDL_SetError("Window does not exist"); - return -1; - } - - data = (SDL_WindowData *)window->driverdata; - view = data->view; - - if (NULL == view) { - SDL_SetError("Window has no view"); - return -1; - } - else { - [view hideKeyboard]; - return 0; - } -} - -SDL_bool SDL_iPhoneKeyboardIsShown(SDL_WindowID windowID) { - - SDL_Window *window = SDL_GetWindowFromID(windowID); - SDL_WindowData *data; - SDL_uikitview *view; - - if (NULL == window) { - SDL_SetError("Window does not exist"); - return -1; - } - - data = (SDL_WindowData *)window->driverdata; - view = data->view; - - if (NULL == view) { - SDL_SetError("Window has no view"); - return 0; - } - else { - return view.keyboardVisible; - } -} - -int SDL_iPhoneKeyboardToggle(SDL_WindowID windowID) { - - SDL_Window *window = SDL_GetWindowFromID(windowID); - SDL_WindowData *data; - SDL_uikitview *view; - - if (NULL == window) { - SDL_SetError("Window does not exist"); - return -1; - } - - data = (SDL_WindowData *)window->driverdata; - view = data->view; - - if (NULL == view) { - SDL_SetError("Window has no view"); - return -1; - } - else { - if (SDL_iPhoneKeyboardIsShown(windowID)) { - SDL_iPhoneKeyboardHide(windowID); - } - else { - SDL_iPhoneKeyboardShow(windowID); - } - return 0; - } -} - -#else - -/* stubs, used if compiled without keyboard support */ - -int SDL_iPhoneKeyboardShow(SDL_WindowID windowID) { - SDL_SetError("Not compiled with keyboard support"); - return -1; -} - -int SDL_iPhoneKeyboardHide(SDL_WindowID windowID) { - SDL_SetError("Not compiled with keyboard support"); - return -1; -} - -SDL_bool SDL_iPhoneKeyboardIsShown(SDL_WindowID windowID) { - return 0; -} - -int SDL_iPhoneKeyboardToggle(SDL_WindowID windowID) { - SDL_SetError("Not compiled with keyboard support"); - return -1; -} - - -#endif /* SDL_IPHONE_KEYBOARD */ diff -r 28b8330b8af1 -r 174c94b8ea72 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Fri Jan 08 03:38:01 2010 +0000 +++ b/hedgewars/hwengine.pas Fri Jan 08 03:52:44 2010 +0000 @@ -144,14 +144,17 @@ procedure OnDestroy; begin {$IFDEF DEBUGFILE}AddFileLog('Freeing resources...');{$ENDIF} -if isSoundEnabled then ReleaseSound; -StoreRelease; -FreeLand; -SendKB; -CloseIPC; -TTF_Quit; -SDL_Quit; -halt + if isSoundEnabled then ReleaseSound(); + StoreRelease(); + FreeLand(); + SendKB(); + CloseIPC(); + TTF_Quit(); +//{$IFNDEF IPHONEOS} + // TODO: don't halt and don't clean, return to the previous view + SDL_Quit(); + halt(); +//{$ENDIF} end; ///////////////////