Mercurial > sdl-ios-xcode
changeset 5134:7b7da52e8775
Fixed spacing
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 01 Feb 2011 08:59:22 -0800 |
parents | ec13e48ee0d9 |
children | 5f09cb749d75 |
files | src/video/uikit/SDL_uikitappdelegate.m src/video/uikit/SDL_uikitevents.m src/video/uikit/SDL_uikitopengles.m src/video/uikit/SDL_uikitvideo.m src/video/uikit/SDL_uikitview.m |
diffstat | 5 files changed, 409 insertions(+), 413 deletions(-) [+] |
line wrap: on
line diff
--- a/src/video/uikit/SDL_uikitappdelegate.m Tue Feb 01 08:54:34 2011 -0800 +++ b/src/video/uikit/SDL_uikitappdelegate.m Tue Feb 01 08:59:22 2011 -0800 @@ -37,69 +37,68 @@ int main(int argc, char **argv) { - int i; - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - /* store arguments */ - forward_argc = argc; - forward_argv = (char **)malloc((argc+1) * sizeof(char *)); - for (i=0; i<argc; i++) { - forward_argv[i] = malloc( (strlen(argv[i])+1) * sizeof(char)); - strcpy(forward_argv[i], argv[i]); - } - forward_argv[i] = NULL; + int i; + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + /* store arguments */ + forward_argc = argc; + forward_argv = (char **)malloc((argc+1) * sizeof(char *)); + for (i=0; i<argc; i++) { + forward_argv[i] = malloc( (strlen(argv[i])+1) * sizeof(char)); + strcpy(forward_argv[i], argv[i]); + } + forward_argv[i] = NULL; - /* Give over control to run loop, SDLUIKitDelegate will handle most things from here */ - UIApplicationMain(argc, argv, NULL, @"SDLUIKitDelegate"); - - [pool release]; - + /* Give over control to run loop, SDLUIKitDelegate will handle most things from here */ + UIApplicationMain(argc, argv, NULL, @"SDLUIKitDelegate"); + + [pool release]; + } @implementation SDLUIKitDelegate /* convenience method */ +(SDLUIKitDelegate *)sharedAppDelegate { - /* the delegate is set in UIApplicationMain(), which is garaunteed to be called before this method */ - return (SDLUIKitDelegate *)[[UIApplication sharedApplication] delegate]; + /* 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]; - return self; + self = [super init]; + return self; } - (void)postFinishLaunch { - /* run the user's application, passing argc and argv */ - int exit_status = SDL_main(forward_argc, forward_argv); - - /* 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); - - /* exit, passing the return status from the user's application */ - exit(exit_status); + /* run the user's application, passing argc and argv */ + int exit_status = SDL_main(forward_argc, forward_argv); + + /* 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); + + /* exit, passing the return status from the user's application */ + exit(exit_status); } - (void)applicationDidFinishLaunching:(UIApplication *)application { - - /* Set working directory to resource path */ - [[NSFileManager defaultManager] changeCurrentDirectoryPath: [[NSBundle mainBundle] resourcePath]]; - - [self performSelector:@selector(postFinishLaunch) withObject:nil + + /* Set working directory to resource path */ + [[NSFileManager defaultManager] changeCurrentDirectoryPath: [[NSBundle mainBundle] resourcePath]]; + + [self performSelector:@selector(postFinishLaunch) withObject:nil afterDelay:0.0]; } - (void)applicationWillTerminate:(UIApplication *)application { - - SDL_SendQuit(); - /* hack to prevent automatic termination. See SDL_uikitevents.m for details */ - longjmp(*(jump_env()), 1); - + + SDL_SendQuit(); + /* hack to prevent automatic termination. See SDL_uikitevents.m for details */ + longjmp(*(jump_env()), 1); } - (void) applicationWillResignActive:(UIApplication*)application
--- a/src/video/uikit/SDL_uikitevents.m Tue Feb 01 08:54:34 2011 -0800 +++ b/src/video/uikit/SDL_uikitevents.m Tue Feb 01 08:59:22 2011 -0800 @@ -32,25 +32,24 @@ void UIKit_PumpEvents(_THIS) { - /* - When the user presses the 'home' button on the iPod - the application exits -- immediatly. - - Unlike in Mac OS X, it appears there is no way to cancel the termination. - - This doesn't give the SDL user's application time to respond to an SDL_Quit event. - So what we do is that in the UIApplicationDelegate class (SDLUIApplicationDelegate), - when the delegate receives the ApplicationWillTerminate message, we execute - a longjmp statement to get back here, preventing an immediate exit. - */ - if (setjmp(*jump_env()) == 0) { - /* if we're setting the jump, rather than jumping back */ - SInt32 result; - do { - result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE); - } while(result == kCFRunLoopRunHandledSource); - } - + /* + When the user presses the 'home' button on the iPod + the application exits -- immediatly. + + Unlike in Mac OS X, it appears there is no way to cancel the termination. + + This doesn't give the SDL user's application time to respond to an SDL_Quit event. + So what we do is that in the UIApplicationDelegate class (SDLUIApplicationDelegate), + when the delegate receives the ApplicationWillTerminate message, we execute + a longjmp statement to get back here, preventing an immediate exit. + */ + if (setjmp(*jump_env()) == 0) { + /* if we're setting the jump, rather than jumping back */ + SInt32 result; + do { + result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE); + } while(result == kCFRunLoopRunHandledSource); + } } /* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/uikit/SDL_uikitopengles.m Tue Feb 01 08:54:34 2011 -0800 +++ b/src/video/uikit/SDL_uikitopengles.m Tue Feb 01 08:59:22 2011 -0800 @@ -35,42 +35,42 @@ void * UIKit_GL_GetProcAddress(_THIS, const char *proc) -{ - /* Look through all SO's for the proc symbol. Here's why: - -Looking for the path to the OpenGL Library seems not to work in the iPhone Simulator. - -We don't know that the path won't change in the future. - */ +{ + /* Look through all SO's for the proc symbol. Here's why: + -Looking for the path to the OpenGL Library seems not to work in the iPhone Simulator. + -We don't know that the path won't change in the future. + */ return SDL_LoadFunction(RTLD_DEFAULT, proc); } /* - note that SDL_GL_Delete context makes it current without passing the window + note that SDL_GL_Delete context makes it current without passing the window */ int UIKit_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) { - - if (context) { - SDL_WindowData *data = (SDL_WindowData *)window->driverdata; - [data->view setCurrentContext]; - } - else { - [EAGLContext setCurrentContext: nil]; - } - + + if (context) { + SDL_WindowData *data = (SDL_WindowData *)window->driverdata; + [data->view setCurrentContext]; + } + else { + [EAGLContext setCurrentContext: nil]; + } + return 0; } int UIKit_GL_LoadLibrary(_THIS, const char *path) { - /* - shouldn't be passing a path into this function - why? Because we've already loaded the library - and because the SDK forbids loading an external SO - */ + /* + shouldn't be passing a path into this function + why? Because we've already loaded the library + and because the SDK forbids loading an external SO + */ if (path != NULL) { - SDL_SetError("iPhone GL Load Library just here for compatibility"); - return -1; + SDL_SetError("iPhone GL Load Library just here for compatibility"); + return -1; } return 0; } @@ -84,65 +84,63 @@ SDL_UIKit_UpdateBatteryMonitoring(); #endif - SDL_WindowData *data = (SDL_WindowData *)window->driverdata; - - if (nil == data->view) { - return; - } - [data->view swapBuffers]; - /* since now we've got something to draw - make the window visible */ - [data->uiwindow makeKeyAndVisible]; + SDL_WindowData *data = (SDL_WindowData *)window->driverdata; + + if (nil == data->view) { + return; + } + [data->view swapBuffers]; + /* since now we've got something to draw + make the window visible */ + [data->uiwindow makeKeyAndVisible]; - /* we need to let the event cycle run, or the OS won't update the OpenGL view! */ - SDL_PumpEvents(); - + /* we need to let the event cycle run, or the OS won't update the OpenGL view! */ + SDL_PumpEvents(); + } SDL_GLContext UIKit_GL_CreateContext(_THIS, SDL_Window * window) { - SDL_uikitopenglview *view; - SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + SDL_uikitopenglview *view; + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; UIScreen *uiscreen = (UIScreen *) window->display->driverdata; - UIWindow *uiwindow = data->uiwindow; + UIWindow *uiwindow = data->uiwindow; /* construct our view, passing in SDL's OpenGL configuration data */ view = [[SDL_uikitopenglview alloc] initWithFrame: [uiwindow bounds] \ - retainBacking: _this->gl_config.retained_backing \ - rBits: _this->gl_config.red_size \ - gBits: _this->gl_config.green_size \ - bBits: _this->gl_config.blue_size \ - aBits: _this->gl_config.alpha_size \ - depthBits: _this->gl_config.depth_size]; - - data->view = view; - - /* add the view to our window */ - [uiwindow addSubview: view ]; - - /* Don't worry, the window retained the view */ - [view release]; - - if ( UIKit_GL_MakeCurrent(_this, window, view) < 0 ) { + retainBacking: _this->gl_config.retained_backing \ + rBits: _this->gl_config.red_size \ + gBits: _this->gl_config.green_size \ + bBits: _this->gl_config.blue_size \ + aBits: _this->gl_config.alpha_size \ + depthBits: _this->gl_config.depth_size]; + + data->view = view; + + /* add the view to our window */ + [uiwindow addSubview: view ]; + + /* Don't worry, the window retained the view */ + [view release]; + + if ( UIKit_GL_MakeCurrent(_this, window, view) < 0 ) { UIKit_GL_DeleteContext(_this, view); return NULL; } - /* Make this window the current mouse focus for touch input */ - SDL_SetMouseFocus(window); - SDL_SetKeyboardFocus(window); + /* Make this window the current mouse focus for touch input */ + SDL_SetMouseFocus(window); + SDL_SetKeyboardFocus(window); - return view; + return view; } void UIKit_GL_DeleteContext(_THIS, SDL_GLContext context) { - /* the delegate has retained the view, this will release him */ - SDL_uikitopenglview *view = (SDL_uikitopenglview *)context; - /* this will also delete it */ - [view removeFromSuperview]; - - return; + /* the delegate has retained the view, this will release him */ + SDL_uikitopenglview *view = (SDL_uikitopenglview *)context; + /* this will also delete it */ + [view removeFromSuperview]; }
--- a/src/video/uikit/SDL_uikitvideo.m Tue Feb 01 08:54:34 2011 -0800 +++ b/src/video/uikit/SDL_uikitvideo.m Tue Feb 01 08:59:22 2011 -0800 @@ -56,7 +56,7 @@ static int UIKit_Available(void) { - return (1); + return (1); } static void UIKit_DeleteDevice(SDL_VideoDevice * device) @@ -85,22 +85,22 @@ device->GetDisplayModes = UIKit_GetDisplayModes; device->SetDisplayMode = UIKit_SetDisplayMode; device->PumpEvents = UIKit_PumpEvents; - device->CreateWindow = UIKit_CreateWindow; - device->DestroyWindow = UIKit_DestroyWindow; + device->CreateWindow = UIKit_CreateWindow; + device->DestroyWindow = UIKit_DestroyWindow; device->GetWindowWMInfo = UIKit_GetWindowWMInfo; - - - /* OpenGL (ES) functions */ - device->GL_MakeCurrent = UIKit_GL_MakeCurrent; - device->GL_SwapWindow = UIKit_GL_SwapWindow; - device->GL_CreateContext = UIKit_GL_CreateContext; - device->GL_DeleteContext = UIKit_GL_DeleteContext; - device->GL_GetProcAddress = UIKit_GL_GetProcAddress; - device->GL_LoadLibrary = UIKit_GL_LoadLibrary; - device->free = UIKit_DeleteDevice; + + + /* OpenGL (ES) functions */ + device->GL_MakeCurrent = UIKit_GL_MakeCurrent; + device->GL_SwapWindow = UIKit_GL_SwapWindow; + device->GL_CreateContext = UIKit_GL_CreateContext; + device->GL_DeleteContext = UIKit_GL_DeleteContext; + device->GL_GetProcAddress = UIKit_GL_GetProcAddress; + device->GL_LoadLibrary = UIKit_GL_LoadLibrary; + device->free = UIKit_DeleteDevice; - device->gl_config.accelerated = 1; - + device->gl_config.accelerated = 1; + return device; }
--- a/src/video/uikit/SDL_uikitview.m Tue Feb 01 08:54:34 2011 -0800 +++ b/src/video/uikit/SDL_uikitview.m Tue Feb 01 08:59:22 2011 -0800 @@ -35,271 +35,271 @@ @implementation SDL_uikitview - (void)dealloc { - [super dealloc]; + [super dealloc]; } - (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame: frame]; - + self = [super initWithFrame: frame]; + #if SDL_IPHONE_KEYBOARD - [self initializeKeyboard]; -#endif + [self initializeKeyboard]; +#endif #ifdef FIXED_MULTITOUCH - SDL_Touch touch; - touch.id = 0; //TODO: Should be -1? + SDL_Touch touch; + touch.id = 0; //TODO: Should be -1? - //touch.driverdata = SDL_malloc(sizeof(EventTouchData)); - //EventTouchData* data = (EventTouchData*)(touch.driverdata); - - touch.x_min = 0; - touch.x_max = frame.size.width; - touch.native_xres = touch.x_max - touch.x_min; - touch.y_min = 0; - touch.y_max = frame.size.height; - touch.native_yres = touch.y_max - touch.y_min; - touch.pressure_min = 0; - touch.pressure_max = 1; - touch.native_pressureres = touch.pressure_max - touch.pressure_min; + //touch.driverdata = SDL_malloc(sizeof(EventTouchData)); + //EventTouchData* data = (EventTouchData*)(touch.driverdata); + + touch.x_min = 0; + touch.x_max = frame.size.width; + touch.native_xres = touch.x_max - touch.x_min; + touch.y_min = 0; + touch.y_max = frame.size.height; + touch.native_yres = touch.y_max - touch.y_min; + touch.pressure_min = 0; + touch.pressure_max = 1; + touch.native_pressureres = touch.pressure_max - touch.pressure_min; - touchId = SDL_AddTouch(&touch, "IPHONE SCREEN"); + touchId = SDL_AddTouch(&touch, "IPHONE SCREEN"); #endif - return self; + return self; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - NSEnumerator *enumerator = [touches objectEnumerator]; - UITouch *touch = (UITouch*)[enumerator nextObject]; - - //NSLog("Click"); - - if (touch) { - CGPoint locationInView = [touch locationInView: self]; - - /* send moved event */ - SDL_SendMouseMotion(NULL, 0, locationInView.x, locationInView.y); + NSEnumerator *enumerator = [touches objectEnumerator]; + UITouch *touch = (UITouch*)[enumerator nextObject]; + + //NSLog("Click"); + + if (touch) { + CGPoint locationInView = [touch locationInView: self]; + + /* send moved event */ + SDL_SendMouseMotion(NULL, 0, locationInView.x, locationInView.y); - /* send mouse down event */ - SDL_SendMouseButton(NULL, SDL_PRESSED, SDL_BUTTON_LEFT); - } + /* send mouse down event */ + SDL_SendMouseButton(NULL, SDL_PRESSED, SDL_BUTTON_LEFT); + } #ifdef FIXED_MULTITOUCH - while(touch) { - CGPoint locationInView = [touch locationInView: self]; + while(touch) { + CGPoint locationInView = [touch locationInView: self]; #ifdef IPHONE_TOUCH_EFFICIENT_DANGEROUS - //FIXME: TODO: Using touch as the fingerId is potentially dangerous - //It is also much more efficient than storing the UITouch pointer - //and comparing it to the incoming event. - SDL_SendFingerDown(touchId,(long)touch, - SDL_TRUE,locationInView.x,locationInView.y, - 1); + //FIXME: TODO: Using touch as the fingerId is potentially dangerous + //It is also much more efficient than storing the UITouch pointer + //and comparing it to the incoming event. + SDL_SendFingerDown(touchId,(long)touch, + SDL_TRUE,locationInView.x,locationInView.y, + 1); #else - int i; - for(i = 0;i < MAX_SIMULTANEOUS_TOUCHES;i++) { - if(finger[i] == NULL) { - finger[i] = touch; - SDL_SendFingerDown(touchId,i, - SDL_TRUE,locationInView.x,locationInView.y, - 1); - break; - } - } + int i; + for(i = 0;i < MAX_SIMULTANEOUS_TOUCHES;i++) { + if(finger[i] == NULL) { + finger[i] = touch; + SDL_SendFingerDown(touchId,i, + SDL_TRUE,locationInView.x,locationInView.y, + 1); + break; + } + } #endif - + - + - touch = (UITouch*)[enumerator nextObject]; - } + touch = (UITouch*)[enumerator nextObject]; + } #endif } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - - NSEnumerator *enumerator = [touches objectEnumerator]; - UITouch *touch = (UITouch*)[enumerator nextObject]; - - if (touch) { - /* send mouse up */ - SDL_SendMouseButton(NULL, SDL_RELEASED, SDL_BUTTON_LEFT); - } + + NSEnumerator *enumerator = [touches objectEnumerator]; + UITouch *touch = (UITouch*)[enumerator nextObject]; + + if (touch) { + /* send mouse up */ + SDL_SendMouseButton(NULL, SDL_RELEASED, SDL_BUTTON_LEFT); + } #ifdef FIXED_MULTITOUCH - while(touch) { - CGPoint locationInView = [touch locationInView: self]; - + while(touch) { + CGPoint locationInView = [touch locationInView: self]; + #ifdef IPHONE_TOUCH_EFFICIENT_DANGEROUS - SDL_SendFingerDown(touchId,(long)touch, - SDL_FALSE,locationInView.x,locationInView.y, - 1); + SDL_SendFingerDown(touchId,(long)touch, + SDL_FALSE,locationInView.x,locationInView.y, + 1); #else - int i; - for(i = 0;i < MAX_SIMULTANEOUS_TOUCHES;i++) { - if(finger[i] == touch) { - SDL_SendFingerDown(touchId,i, - SDL_FALSE,locationInView.x,locationInView.y, - 1); - break; - } - } + int i; + for(i = 0;i < MAX_SIMULTANEOUS_TOUCHES;i++) { + if(finger[i] == touch) { + SDL_SendFingerDown(touchId,i, + SDL_FALSE,locationInView.x,locationInView.y, + 1); + break; + } + } #endif - touch = (UITouch*)[enumerator nextObject]; - } + touch = (UITouch*)[enumerator nextObject]; + } #endif } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { - /* - this can happen if the user puts more than 5 touches on the screen - at once, or perhaps in other circumstances. Usually (it seems) - all active touches are canceled. - */ - [self touchesEnded: touches withEvent: event]; + /* + this can happen if the user puts more than 5 touches on the screen + at once, or perhaps in other circumstances. Usually (it seems) + all active touches are canceled. + */ + [self touchesEnded: touches withEvent: event]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { - - NSEnumerator *enumerator = [touches objectEnumerator]; - UITouch *touch = (UITouch*)[enumerator nextObject]; - - if (touch) { - CGPoint locationInView = [touch locationInView: self]; + + NSEnumerator *enumerator = [touches objectEnumerator]; + UITouch *touch = (UITouch*)[enumerator nextObject]; + + if (touch) { + CGPoint locationInView = [touch locationInView: self]; - /* send moved event */ - SDL_SendMouseMotion(NULL, 0, locationInView.x, locationInView.y); - } + /* send moved event */ + SDL_SendMouseMotion(NULL, 0, locationInView.x, locationInView.y); + } #ifdef FIXED_MULTITOUCH - while(touch) { - CGPoint locationInView = [touch locationInView: self]; - + while(touch) { + CGPoint locationInView = [touch locationInView: self]; + #ifdef IPHONE_TOUCH_EFFICIENT_DANGEROUS - SDL_SendTouchMotion(touchId,(long)touch, - SDL_FALSE,locationInView.x,locationInView.y, - 1); + SDL_SendTouchMotion(touchId,(long)touch, + SDL_FALSE,locationInView.x,locationInView.y, + 1); #else - int i; - for(i = 0;i < MAX_SIMULTANEOUS_TOUCHES;i++) { - if(finger[i] == touch) { - SDL_SendTouchMotion(touchId,i, - SDL_FALSE,locationInView.x,locationInView.y, - 1); - break; - } - } + int i; + for(i = 0;i < MAX_SIMULTANEOUS_TOUCHES;i++) { + if(finger[i] == touch) { + SDL_SendTouchMotion(touchId,i, + SDL_FALSE,locationInView.x,locationInView.y, + 1); + break; + } + } #endif - touch = (UITouch*)[enumerator nextObject]; - } + touch = (UITouch*)[enumerator nextObject]; + } #endif } /* - ---- Keyboard related functionality below this line ---- + ---- Keyboard related functionality below this line ---- */ #if SDL_IPHONE_KEYBOARD /* Is the iPhone virtual keyboard visible onscreen? */ - (BOOL)keyboardVisible { - return keyboardVisible; + return keyboardVisible; } /* Set ourselves up as a UITextFieldDelegate */ - (void)initializeKeyboard { - - textField = [[UITextField alloc] initWithFrame: CGRectZero]; - textField.delegate = self; - /* placeholder so there is something to delete! */ - textField.text = @" "; - - /* set UITextInputTrait properties, mostly to defaults */ - textField.autocapitalizationType = UITextAutocapitalizationTypeNone; - textField.autocorrectionType = UITextAutocorrectionTypeNo; - textField.enablesReturnKeyAutomatically = NO; - textField.keyboardAppearance = UIKeyboardAppearanceDefault; - textField.keyboardType = UIKeyboardTypeDefault; - textField.returnKeyType = UIReturnKeyDefault; - textField.secureTextEntry = NO; - - textField.hidden = YES; - keyboardVisible = NO; - /* add the UITextField (hidden) to our view */ - [self addSubview: textField]; - [textField release]; + + textField = [[UITextField alloc] initWithFrame: CGRectZero]; + textField.delegate = self; + /* placeholder so there is something to delete! */ + textField.text = @" "; + + /* set UITextInputTrait properties, mostly to defaults */ + textField.autocapitalizationType = UITextAutocapitalizationTypeNone; + textField.autocorrectionType = UITextAutocorrectionTypeNo; + textField.enablesReturnKeyAutomatically = NO; + textField.keyboardAppearance = UIKeyboardAppearanceDefault; + textField.keyboardType = UIKeyboardTypeDefault; + textField.returnKeyType = UIReturnKeyDefault; + textField.secureTextEntry = NO; + + textField.hidden = YES; + keyboardVisible = NO; + /* add the UITextField (hidden) to our view */ + [self addSubview: textField]; + [textField release]; } /* reveal onscreen virtual keyboard */ - (void)showKeyboard { - keyboardVisible = YES; - [textField becomeFirstResponder]; + keyboardVisible = YES; + [textField becomeFirstResponder]; } /* hide onscreen virtual keyboard */ - (void)hideKeyboard { - keyboardVisible = NO; - [textField resignFirstResponder]; + keyboardVisible = NO; + [textField resignFirstResponder]; } /* UITextFieldDelegate method. Invoked when user types something. */ - (BOOL)textField:(UITextField *)_textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { - - if ([string length] == 0) { - /* it wants to replace text with nothing, ie a delete */ - SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_DELETE); - SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_DELETE); - } - else { - /* go through all the characters in the string we've been sent - and convert them to key presses */ - int i; - for (i=0; i<[string length]; i++) { - - unichar c = [string characterAtIndex: i]; - - Uint16 mod = 0; - SDL_ScanCode code; - - if (c < 127) { - /* figure out the SDL_ScanCode and SDL_keymod for this unichar */ - code = unicharToUIKeyInfoTable[c].code; - mod = unicharToUIKeyInfoTable[c].mod; - } - else { - /* we only deal with ASCII right now */ - code = SDL_SCANCODE_UNKNOWN; - mod = 0; - } - - if (mod & KMOD_SHIFT) { - /* If character uses shift, press shift down */ - SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_LSHIFT); - } - /* send a keydown and keyup even for the character */ - SDL_SendKeyboardKey(SDL_PRESSED, code); - SDL_SendKeyboardKey(SDL_RELEASED, code); - if (mod & KMOD_SHIFT) { - /* If character uses shift, press shift back up */ - SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LSHIFT); - } - } - } - return NO; /* don't allow the edit! (keep placeholder text there) */ + + if ([string length] == 0) { + /* it wants to replace text with nothing, ie a delete */ + SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_DELETE); + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_DELETE); + } + else { + /* go through all the characters in the string we've been sent + and convert them to key presses */ + int i; + for (i=0; i<[string length]; i++) { + + unichar c = [string characterAtIndex: i]; + + Uint16 mod = 0; + SDL_ScanCode code; + + if (c < 127) { + /* figure out the SDL_ScanCode and SDL_keymod for this unichar */ + code = unicharToUIKeyInfoTable[c].code; + mod = unicharToUIKeyInfoTable[c].mod; + } + else { + /* we only deal with ASCII right now */ + code = SDL_SCANCODE_UNKNOWN; + mod = 0; + } + + if (mod & KMOD_SHIFT) { + /* If character uses shift, press shift down */ + SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_LSHIFT); + } + /* send a keydown and keyup even for the character */ + SDL_SendKeyboardKey(SDL_PRESSED, code); + SDL_SendKeyboardKey(SDL_RELEASED, code); + if (mod & KMOD_SHIFT) { + /* If character uses shift, press shift back up */ + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LSHIFT); + } + } + } + return NO; /* don't allow the edit! (keep placeholder text there) */ } /* Terminates the editing session */ - (BOOL)textFieldShouldReturn:(UITextField*)_textField { - [self hideKeyboard]; - return YES; + [self hideKeyboard]; + return YES; } #endif @@ -310,99 +310,99 @@ #if SDL_IPHONE_KEYBOARD int SDL_iPhoneKeyboardShow(SDL_Window * window) { - - 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 (nil == view) { - SDL_SetError("Window has no view"); - return -1; - } - else { - [view showKeyboard]; - return 0; - } + + 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 (nil == view) { + SDL_SetError("Window has no view"); + return -1; + } + else { + [view showKeyboard]; + return 0; + } } int SDL_iPhoneKeyboardHide(SDL_Window * window) { - - 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_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_Window * window) { - - 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; - } + + 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_Window * window) { - - 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(window)) { - SDL_iPhoneKeyboardHide(window); - } - else { - SDL_iPhoneKeyboardShow(window); - } - return 0; - } + + 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(window)) { + SDL_iPhoneKeyboardHide(window); + } + else { + SDL_iPhoneKeyboardShow(window); + } + return 0; + } } #else @@ -410,22 +410,22 @@ /* stubs, used if compiled without keyboard support */ int SDL_iPhoneKeyboardShow(SDL_Window * window) { - SDL_SetError("Not compiled with keyboard support"); - return -1; + SDL_SetError("Not compiled with keyboard support"); + return -1; } int SDL_iPhoneKeyboardHide(SDL_Window * window) { - SDL_SetError("Not compiled with keyboard support"); - return -1; + SDL_SetError("Not compiled with keyboard support"); + return -1; } SDL_bool SDL_iPhoneKeyboardIsShown(SDL_Window * window) { - return 0; + return 0; } int SDL_iPhoneKeyboardToggle(SDL_Window * window) { - SDL_SetError("Not compiled with keyboard support"); - return -1; + SDL_SetError("Not compiled with keyboard support"); + return -1; }