aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
Diffstat (limited to 'backends')
-rw-r--r--backends/platform/iphone/iphone_common.h2
-rw-r--r--backends/platform/iphone/iphone_main.m4
-rw-r--r--backends/platform/iphone/iphone_video.h4
-rw-r--r--backends/platform/iphone/iphone_video.m149
-rw-r--r--backends/platform/iphone/osys_events.cpp42
-rw-r--r--backends/platform/iphone/osys_main.cpp4
6 files changed, 118 insertions, 87 deletions
diff --git a/backends/platform/iphone/iphone_common.h b/backends/platform/iphone/iphone_common.h
index 75a83a067b..2f03309215 100644
--- a/backends/platform/iphone/iphone_common.h
+++ b/backends/platform/iphone/iphone_common.h
@@ -75,7 +75,7 @@ void iPhone_updateScreen(int mouseX, int mouseY);
void iPhone_updateScreenRect(unsigned short *screen, int x1, int y1, int x2, int y2);
void iPhone_updateOverlayRect(unsigned short *screen, int x1, int y1, int x2, int y2);
void iPhone_initSurface(int width, int height);
-bool iPhone_fetchEvent(int *outEvent, float *outX, float *outY);
+bool iPhone_fetchEvent(int *outEvent, int *outX, int *outY);
const char *iPhone_getDocumentsDir();
bool iPhone_isHighResDevice();
int iPhone_getScreenHeight();
diff --git a/backends/platform/iphone/iphone_main.m b/backends/platform/iphone/iphone_main.m
index a72b2fd69d..051da417ea 100644
--- a/backends/platform/iphone/iphone_main.m
+++ b/backends/platform/iphone/iphone_main.m
@@ -126,8 +126,8 @@ int main(int argc, char **argv) {
}
- (void)didRotate:(NSNotification *)notification {
- int screenOrientation = [[UIDevice currentDevice] orientation];
- [_view deviceOrientationChanged: screenOrientation];
+ UIDeviceOrientation screenOrientation = [[UIDevice currentDevice] orientation];
+ [_view deviceOrientationChanged:screenOrientation];
}
- (UIWindow*) getWindow {
diff --git a/backends/platform/iphone/iphone_video.h b/backends/platform/iphone/iphone_video.h
index 5b4e0fdbd0..173814a028 100644
--- a/backends/platform/iphone/iphone_video.h
+++ b/backends/platform/iphone/iphone_video.h
@@ -51,6 +51,8 @@
GLuint _screenTexture;
GLuint _overlayTexture;
GLuint _mouseCursorTexture;
+
+ UIDeviceOrientation _orientation;
}
- (id)initWithFrame:(struct CGRect)frame;
@@ -73,7 +75,7 @@
- (id)getEvent;
-- (void)deviceOrientationChanged:(int)orientation;
+- (void)deviceOrientationChanged:(UIDeviceOrientation)orientation;
- (void)applicationSuspend;
diff --git a/backends/platform/iphone/iphone_video.m b/backends/platform/iphone/iphone_video.m
index 5d57b6dcd5..977dcce4bd 100644
--- a/backends/platform/iphone/iphone_video.m
+++ b/backends/platform/iphone/iphone_video.m
@@ -148,7 +148,7 @@ void iPhone_initSurface(int width, int height) {
[sharedInstance performSelectorOnMainThread:@selector(initSurface) withObject:nil waitUntilDone: YES];
}
-bool iPhone_fetchEvent(int *outEvent, float *outX, float *outY) {
+bool iPhone_fetchEvent(int *outEvent, int *outX, int *outY) {
id event = [sharedInstance getEvent];
if (event == nil) {
return false;
@@ -162,8 +162,8 @@ bool iPhone_fetchEvent(int *outEvent, float *outX, float *outY) {
}
*outEvent = [type intValue];
- *outX = [[event objectForKey:@"x"] floatValue];
- *outY = [[event objectForKey:@"y"] floatValue];
+ *outX = [[event objectForKey:@"x"] intValue];
+ *outY = [[event objectForKey:@"y"] intValue];
return true;
}
@@ -186,18 +186,55 @@ const char *iPhone_getDocumentsDir() {
return [documentsDirectory UTF8String];
}
-bool getLocalMouseCoords(CGPoint *point) {
+static bool getMouseCoords(UIDeviceOrientation orientation, CGPoint point, int *x, int *y) {
if (_overlayIsEnabled) {
- point->x = point->x / _overlayHeight;
- point->y = point->y / _overlayWidth;
+ switch (orientation) {
+ case UIDeviceOrientationLandscapeLeft:
+ *x = (int)point.y;
+ *y = _overlayHeight - (int)point.x;
+ break;
+
+ case UIDeviceOrientationLandscapeRight:
+ *x = _overlayWidth - (int)point.y;
+ *y = (int)point.x;
+ break;
+
+ case UIDeviceOrientationPortrait:
+ *x = (int)point.x;
+ *y = (int)point.y;
+ break;
+
+ default:
+ return false;
+ }
} else {
- if (point->x < _screenRect.origin.x || point->x >= _screenRect.origin.x + _screenRect.size.width ||
- point->y < _screenRect.origin.y || point->y >= _screenRect.origin.y + _screenRect.size.height) {
+ if (point.x < _screenRect.origin.x || point.x >= _screenRect.origin.x + _screenRect.size.width ||
+ point.y < _screenRect.origin.y || point.y >= _screenRect.origin.y + _screenRect.size.height) {
return false;
}
- point->x = (point->x - _screenRect.origin.x) / _screenRect.size.width;
- point->y = (point->y - _screenRect.origin.y) / _screenRect.size.height;
+ point.x = (point.x - _screenRect.origin.x) / _screenRect.size.width;
+ point.y = (point.y - _screenRect.origin.y) / _screenRect.size.height;
+
+ switch (orientation) {
+ case UIDeviceOrientationLandscapeLeft:
+ *x = point.y * _width;
+ *y = (1.0f - point.x) * _height;
+ break;
+
+ case UIDeviceOrientationLandscapeRight:
+ *x = (1.0f - point.y) * _width;
+ *y = point.x * _height;
+ break;
+
+ case UIDeviceOrientationPortrait:
+ *x = point.x * _width;
+ *y = point.y * _height;
+ break;
+
+ default:
+ return false;
+ }
}
return true;
@@ -442,12 +479,22 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
_gameScreenTextureWidth = getSizeNextPOT(_width);
_gameScreenTextureHeight = getSizeNextPOT(_height);
- UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
+ _orientation = [[UIDevice currentDevice] orientation];
+
+ switch (_orientation) {
+ case UIDeviceOrientationLandscapeLeft:
+ case UIDeviceOrientationLandscapeRight:
+ case UIDeviceOrientationPortrait:
+ break;
+
+ default:
+ _orientation = UIDeviceOrientationLandscapeRight;
+ }
//printf("Window: (%d, %d), Surface: (%d, %d), Texture(%d, %d)\n", _fullWidth, _fullHeight, _width, _height, _gameScreenTextureWidth, _gameScreenTextureHeight);
if (_context == nil) {
- orientation = UIDeviceOrientationLandscapeRight;
+ _orientation = UIDeviceOrientationLandscapeRight;
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
eaglLayer.opaque = YES;
@@ -496,9 +543,9 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
- if (orientation == UIDeviceOrientationLandscapeRight) {
+ if (_orientation == UIDeviceOrientationLandscapeRight) {
glRotatef(-90, 0, 0, 1); printOpenGLError();
- } else if (orientation == UIDeviceOrientationLandscapeLeft) {
+ } else if (_orientation == UIDeviceOrientationLandscapeLeft) {
glRotatef(90, 0, 0, 1); printOpenGLError();
} else {
glRotatef(180, 0, 0, 1); printOpenGLError();
@@ -534,7 +581,7 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[[_keyboardView inputView] removeFromSuperview];
}
- if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) {
+ if (_orientation == UIDeviceOrientationLandscapeLeft || _orientation == UIDeviceOrientationLandscapeRight) {
_visibleHeight = _backingHeight;
_visibleWidth = _backingWidth;
@@ -607,12 +654,23 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[_events addObject: event];
}
-- (void)deviceOrientationChanged:(int)orientation {
+- (void)deviceOrientationChanged:(UIDeviceOrientation)orientation {
+ switch (orientation) {
+ case UIDeviceOrientationLandscapeLeft:
+ case UIDeviceOrientationLandscapeRight:
+ case UIDeviceOrientationPortrait:
+ _orientation = orientation;
+ break;
+
+ default:
+ return;
+ }
+
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputOrientationChanged], @"type",
- [NSNumber numberWithFloat:(float)orientation], @"x",
- [NSNumber numberWithFloat:0], @"y",
+ [NSNumber numberWithInt:orientation], @"x",
+ [NSNumber numberWithInt:0], @"y",
nil
]
];
@@ -620,20 +678,21 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
+ int x, y;
switch ([allTouches count]) {
case 1: {
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
- if (!getLocalMouseCoords(&point))
+ if (!getMouseCoords(_orientation, point, &x, &y))
return;
_firstTouch = touch;
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputMouseDown], @"type",
- [NSNumber numberWithFloat:point.x], @"x",
- [NSNumber numberWithFloat:point.y], @"y",
+ [NSNumber numberWithInt:x], @"x",
+ [NSNumber numberWithInt:y], @"y",
nil
]
];
@@ -643,15 +702,15 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
case 2: {
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self];
- if (!getLocalMouseCoords(&point))
+ if (!getMouseCoords(_orientation, point, &x, &y))
return;
_secondTouch = touch;
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputMouseSecondDown], @"type",
- [NSNumber numberWithFloat:point.x], @"x",
- [NSNumber numberWithFloat:point.y], @"y",
+ [NSNumber numberWithInt:x], @"x",
+ [NSNumber numberWithInt:y], @"y",
nil
]
];
@@ -662,31 +721,32 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
//NSSet *allTouches = [event allTouches];
+ int x, y;
for (UITouch *touch in touches) {
if (touch == _firstTouch) {
CGPoint point = [touch locationInView:self];
- if (!getLocalMouseCoords(&point))
+ if (!getMouseCoords(_orientation, point, &x, &y))
return;
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputMouseDragged], @"type",
- [NSNumber numberWithFloat:point.x], @"x",
- [NSNumber numberWithFloat:point.y], @"y",
+ [NSNumber numberWithInt:x], @"x",
+ [NSNumber numberWithInt:y], @"y",
nil
]
];
} else if (touch == _secondTouch) {
CGPoint point = [touch locationInView:self];
- if (!getLocalMouseCoords(&point))
+ if (!getMouseCoords(_orientation, point, &x, &y))
return;
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputMouseSecondDragged], @"type",
- [NSNumber numberWithFloat:point.x], @"x",
- [NSNumber numberWithFloat:point.y], @"y",
+ [NSNumber numberWithInt:x], @"x",
+ [NSNumber numberWithInt:y], @"y",
nil
]
];
@@ -696,19 +756,20 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
+ int x, y;
switch ([allTouches count]) {
case 1: {
UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
CGPoint point = [touch locationInView:self];
- if (!getLocalMouseCoords(&point))
+ if (!getMouseCoords(_orientation, point, &x, &y))
return;
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputMouseUp], @"type",
- [NSNumber numberWithFloat:point.x], @"x",
- [NSNumber numberWithFloat:point.y], @"y",
+ [NSNumber numberWithInt:x], @"x",
+ [NSNumber numberWithInt:y], @"y",
nil
]
];
@@ -718,14 +779,14 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
case 2: {
UITouch *touch = [[allTouches allObjects] objectAtIndex:1];
CGPoint point = [touch locationInView:self];
- if (!getLocalMouseCoords(&point))
+ if (!getMouseCoords(_orientation, point, &x, &y))
return;
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputMouseSecondUp], @"type",
- [NSNumber numberWithFloat:point.x], @"x",
- [NSNumber numberWithFloat:point.y], @"y",
+ [NSNumber numberWithInt:x], @"x",
+ [NSNumber numberWithInt:y], @"y",
nil
]
];
@@ -741,8 +802,8 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputKeyPressed], @"type",
- [NSNumber numberWithFloat:(float)c], @"x",
- [NSNumber numberWithFloat:0], @"y",
+ [NSNumber numberWithInt:c], @"x",
+ [NSNumber numberWithInt:0], @"y",
nil
]
];
@@ -758,8 +819,8 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputSwipe], @"type",
- [NSNumber numberWithFloat:(float)num], @"x",
- [NSNumber numberWithFloat:0], @"y",
+ [NSNumber numberWithInt:num], @"x",
+ [NSNumber numberWithInt:0], @"y",
nil
]
];
@@ -769,8 +830,8 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputApplicationSuspended], @"type",
- [NSNumber numberWithFloat:0], @"x",
- [NSNumber numberWithFloat:0], @"y",
+ [NSNumber numberWithInt:0], @"x",
+ [NSNumber numberWithInt:0], @"y",
nil
]
];
@@ -780,8 +841,8 @@ static void setFilterModeForTexture(GLuint tex, GraphicsModes mode) {
[self addEvent:
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kInputApplicationResumed], @"type",
- [NSNumber numberWithFloat:0], @"x",
- [NSNumber numberWithFloat:0], @"y",
+ [NSNumber numberWithInt:0], @"x",
+ [NSNumber numberWithInt:0], @"y",
nil
]
];
diff --git a/backends/platform/iphone/osys_events.cpp b/backends/platform/iphone/osys_events.cpp
index 5beba8a397..c167da35e6 100644
--- a/backends/platform/iphone/osys_events.cpp
+++ b/backends/platform/iphone/osys_events.cpp
@@ -47,41 +47,9 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
}
int eventType;
- float xUnit, yUnit;
-
- if (iPhone_fetchEvent(&eventType, &xUnit, &yUnit)) {
- int x = 0;
- int y = 0;
- switch (_screenOrientation) {
- case kScreenOrientationPortrait:
- if (_overlayVisible) {
- x = (int)(xUnit * _overlayWidth);
- y = (int)(yUnit * _overlayHeight);
- } else {
- x = (int)(xUnit * _screenWidth);
- y = (int)(yUnit * _screenHeight);
- }
- break;
- case kScreenOrientationLandscape:
- if (_overlayVisible) {
- x = (int)(yUnit * _overlayWidth);
- y = (int)((1.0 - xUnit) * _overlayHeight);
- } else {
- x = (int)(yUnit * _screenWidth);
- y = (int)((1.0 - xUnit) * _screenHeight);
- }
- break;
- case kScreenOrientationFlippedLandscape:
- if (_overlayVisible) {
- x = (int)((1.0 - yUnit) * _overlayWidth);
- y = (int)(xUnit * _overlayHeight);
- } else {
- x = (int)((1.0 - yUnit) * _screenWidth);
- y = (int)(xUnit * _screenHeight);
- }
- break;
- }
+ int x, y;
+ if (iPhone_fetchEvent(&eventType, &x, &y)) {
switch ((InputEvent)eventType) {
case kInputMouseDown:
if (!handleEvent_mouseDown(event, x, y))
@@ -112,7 +80,7 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
return false;
break;
case kInputOrientationChanged:
- handleEvent_orientationChanged((int)xUnit);
+ handleEvent_orientationChanged(x);
return false;
break;
@@ -122,11 +90,11 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
break;
case kInputKeyPressed:
- handleEvent_keyPressed(event, (int)xUnit);
+ handleEvent_keyPressed(event, x);
break;
case kInputSwipe:
- if (!handleEvent_swipe(event, (int)xUnit))
+ if (!handleEvent_swipe(event, x))
return false;
break;
diff --git a/backends/platform/iphone/osys_main.cpp b/backends/platform/iphone/osys_main.cpp
index 36f21363be..2bdc09c9ce 100644
--- a/backends/platform/iphone/osys_main.cpp
+++ b/backends/platform/iphone/osys_main.cpp
@@ -139,13 +139,13 @@ bool OSystem_IPHONE::getFeatureState(Feature f) {
void OSystem_IPHONE::suspendLoop() {
bool done = false;
int eventType;
- float xUnit, yUnit;
+ int x, y;
uint32 startTime = getMillis();
stopSoundsystem();
while (!done) {
- if (iPhone_fetchEvent(&eventType, &xUnit, &yUnit))
+ if (iPhone_fetchEvent(&eventType, &x, &y))
if ((InputEvent)eventType == kInputApplicationResumed)
done = true;
usleep(100000);