Fixed spacing
This commit is contained in:
parent
3a83076de1
commit
c9c3d0381a
5 changed files with 409 additions and 413 deletions
|
@ -37,69 +37,68 @@ 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+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
|
||||
|
|
|
@ -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: */
|
||||
|
|
|
@ -35,42 +35,42 @@ static int UIKit_GL_Initialize(_THIS);
|
|||
|
||||
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 @@ void UIKit_GL_SwapWindow(_THIS, SDL_Window * window)
|
|||
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];
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ BOOL SDL_UIKit_supports_multiple_displays = NO;
|
|||
static int
|
||||
UIKit_Available(void)
|
||||
{
|
||||
return (1);
|
||||
return (1);
|
||||
}
|
||||
|
||||
static void UIKit_DeleteDevice(SDL_VideoDevice * device)
|
||||
|
@ -85,22 +85,22 @@ UIKit_CreateDevice(int devindex)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 @@ int SDL_iPhoneKeyboardToggle(SDL_Window * window) {
|
|||
/* 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;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue