This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
SDL_uikitview is just a generic view class which SDL_uikitopenglview …
…inherits from. The functionality found in this class relates to (right now) mouse/touch input support. The reason for putting it here is that if someone wanted to write a render driver for iPhone based around CoreGraphics rather than OpenGL ES, they could make their Core Graphics view inherit from this class as well.
- Loading branch information
Holmes Futrell
committed
Jul 17, 2008
1 parent
137132e
commit 531edeb
Showing
2 changed files
with
134 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// | ||
// SDL_uikitview.h | ||
// iPodSDL | ||
// | ||
// Created by Holmes Futrell on 6/23/08. | ||
// Copyright 2008 __MyCompanyName__. All rights reserved. | ||
// | ||
|
||
#import <UIKit/UIKit.h> | ||
#include "SDL_stdinc.h" | ||
#include "SDL_mouse.h" | ||
#include "SDL_mouse_c.h" | ||
#include "SDL_events.h" | ||
|
||
#define MAX_SIMULTANEOUS_TOUCHES 5 | ||
|
||
@interface SDL_uikitview : UIView { | ||
|
||
SDL_Mouse mice[MAX_SIMULTANEOUS_TOUCHES]; | ||
|
||
} | ||
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; | ||
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; | ||
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; | ||
|
||
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
// | ||
// SDL_uikitview.m | ||
// iPodSDL | ||
// | ||
// Created by Holmes Futrell on 6/23/08. | ||
// Copyright 2008 __MyCompanyName__. All rights reserved. | ||
// | ||
|
||
#import "SDL_uikitview.h" | ||
|
||
@implementation SDL_uikitview | ||
|
||
- (void)dealloc { | ||
[super dealloc]; | ||
} | ||
|
||
- (id)initWithFrame:(CGRect)frame { | ||
|
||
self = [super initWithFrame: frame]; | ||
|
||
int i; | ||
for (i=0; i<MAX_SIMULTANEOUS_TOUCHES; i++) { | ||
mice[i].driverdata = NULL; | ||
SDL_AddMouse(&(mice[i]), i); | ||
} | ||
self.multipleTouchEnabled = YES; | ||
|
||
return self; | ||
|
||
} | ||
|
||
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { | ||
|
||
NSEnumerator *enumerator = [touches objectEnumerator]; | ||
UITouch *touch=(UITouch*)[enumerator nextObject]; | ||
|
||
// associate touches with mice, so long as we have slots | ||
int i; | ||
int found = 0; | ||
for(i=0; touch && i < MAX_SIMULTANEOUS_TOUCHES; i++) { | ||
|
||
// check if this mouse is already tracking a touch | ||
if (mice[i].driverdata != NULL) { | ||
continue; | ||
} | ||
|
||
found = 1; | ||
|
||
int oldMouse = SDL_SelectMouse(-1); | ||
SDL_SelectMouse(i); | ||
CGPoint locationInView = [touch locationInView: self]; | ||
mice[i].driverdata = [touch retain]; | ||
SDL_SendMouseMotion(i, 0, locationInView.x, locationInView.y); | ||
SDL_SendMouseButton(i, SDL_PRESSED, SDL_BUTTON_LEFT); | ||
SDL_GetRelativeMouseState(NULL, NULL); | ||
touch = (UITouch*)[enumerator nextObject]; | ||
|
||
SDL_SelectMouse(oldMouse); | ||
|
||
} | ||
} | ||
|
||
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { | ||
|
||
NSEnumerator *enumerator = [touches objectEnumerator]; | ||
UITouch *touch=nil; | ||
|
||
while(touch = (UITouch *)[enumerator nextObject]) { | ||
int i, found = NO; | ||
for (i=0; i<MAX_SIMULTANEOUS_TOUCHES && !found; i++) { | ||
if (mice[i].driverdata == touch) { | ||
[(UITouch*)(mice[i].driverdata) release]; | ||
mice[i].driverdata = NULL; | ||
SDL_SendMouseButton(i, SDL_RELEASED, SDL_BUTTON_LEFT); | ||
|
||
found = YES; | ||
} | ||
} | ||
} | ||
} | ||
|
||
- (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 all active | ||
touches are canceled. | ||
*/ | ||
[self touchesEnded: touches withEvent: event]; | ||
} | ||
|
||
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { | ||
|
||
NSEnumerator *enumerator = [touches objectEnumerator]; | ||
UITouch *touch=nil; | ||
|
||
while(touch = (UITouch *)[enumerator nextObject]) { | ||
int i, found = NO; | ||
for (i=0; i<MAX_SIMULTANEOUS_TOUCHES && !found; i++) { | ||
if (mice[i].driverdata == touch) { | ||
CGPoint locationInView = [touch locationInView: self]; | ||
SDL_SendMouseMotion(i, 0, locationInView.x, locationInView.y); | ||
found = YES; | ||
} | ||
} | ||
} | ||
} | ||
|
||
@end |