Commit c9c3d038 authored by Sam Lantinga's avatar Sam Lantinga

Fixed spacing

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