aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOystein Eftevaag2008-01-02 00:07:16 +0000
committerOystein Eftevaag2008-01-02 00:07:16 +0000
commitfe8faf4f195c0105bc31845f9fcd3017462830cb (patch)
treed2f55565dd93a2d6ff6104f98ccf17dd80cda4be
parent46368eac5f1afc6d3fe706a3efffc7ccf336a924 (diff)
downloadscummvm-rg350-fe8faf4f195c0105bc31845f9fcd3017462830cb.tar.gz
scummvm-rg350-fe8faf4f195c0105bc31845f9fcd3017462830cb.tar.bz2
scummvm-rg350-fe8faf4f195c0105bc31845f9fcd3017462830cb.zip
(forward-port) Quick swipes across the screen now triggers arrow key events. Also, some mouse cursor fixes for landscape mode
svn-id: r30134
-rw-r--r--backends/platform/iphone/iphone_common.h11
-rw-r--r--backends/platform/iphone/iphone_video.h8
-rw-r--r--backends/platform/iphone/iphone_video.m11
-rw-r--r--backends/platform/iphone/osys_iphone.cpp74
4 files changed, 91 insertions, 13 deletions
diff --git a/backends/platform/iphone/iphone_common.h b/backends/platform/iphone/iphone_common.h
index b4723670eb..6a5250a018 100644
--- a/backends/platform/iphone/iphone_common.h
+++ b/backends/platform/iphone/iphone_common.h
@@ -32,7 +32,8 @@ enum InputEvent {
kInputOrientationChanged,
kInputKeyPressed,
kInputApplicationSuspended,
- kInputApplicationResumed
+ kInputApplicationResumed,
+ kInputSwipe
};
enum ScreenOrientation {
@@ -41,6 +42,14 @@ enum ScreenOrientation {
kScreenOrientationFlippedLandscape
};
+typedef enum
+{
+ kUIViewSwipeUp = 1,
+ kUIViewSwipeDown = 2,
+ kUIViewSwipeLeft = 4,
+ kUIViewSwipeRight = 8
+} UIViewSwipeDirection;
+
// We need this to be able to call functions from/in Objective-C.
#ifdef __cplusplus
extern "C" {
diff --git a/backends/platform/iphone/iphone_video.h b/backends/platform/iphone/iphone_video.h
index 837cd83b1a..615b2e5345 100644
--- a/backends/platform/iphone/iphone_video.h
+++ b/backends/platform/iphone/iphone_video.h
@@ -35,14 +35,6 @@
#import "iphone_keyboard.h"
-typedef enum
-{
- kUIViewSwipeUp = 1,
- kUIViewSwipeDown = 2,
- kUIViewSwipeLeft = 4,
- kUIViewSwipeRight = 8
-} UIViewSwipeDirection;
-
@interface iPhoneView : UIView
{
CoreSurfaceBufferRef _screenSurface;
diff --git a/backends/platform/iphone/iphone_video.m b/backends/platform/iphone/iphone_video.m
index 1d1f46179d..0bc07c10ac 100644
--- a/backends/platform/iphone/iphone_video.m
+++ b/backends/platform/iphone/iphone_video.m
@@ -388,11 +388,20 @@ bool getLocalMouseCoords(CGPoint *point) {
}
- (BOOL)canHandleSwipes {
- return FALSE;
+ return TRUE;
}
- (int)swipe:(UIViewSwipeDirection)num withEvent:(GSEvent*)event {
//printf("swipe: %i\n", num);
+
+ [self addEvent:
+ [[NSDictionary alloc] initWithObjectsAndKeys:
+ [NSNumber numberWithInt:kInputSwipe], @"type",
+ [NSNumber numberWithFloat:(float)num], @"x",
+ [NSNumber numberWithFloat:0], @"y",
+ nil
+ ]
+ ];
}
- (void)view:(UIView *)view handleTapWithCount:(int)count event:(GSEvent *)event fingerCount:(int)fingerCount{
diff --git a/backends/platform/iphone/osys_iphone.cpp b/backends/platform/iphone/osys_iphone.cpp
index 6120a5fa2a..c957191cdb 100644
--- a/backends/platform/iphone/osys_iphone.cpp
+++ b/backends/platform/iphone/osys_iphone.cpp
@@ -403,7 +403,7 @@ void OSystem_IPHONE::internUpdateScreen() {
break;
}
case kScreenOrientationLandscape: {
- byte *src = &_mouseBuf[_mouseHeight * _mouseWidth - 1];
+ byte *src = &_mouseBuf[(_mouseHeight - 1 - srcY) * _mouseWidth + srcX];
uint16 *dst = &_fullscreen[left * _screenHeight + (_screenHeight - bottom + srcY)];
for (int x = displayWidth; x > srcX; x--) {
for (int y = displayHeight; y > srcY; y--) {
@@ -413,7 +413,7 @@ void OSystem_IPHONE::internUpdateScreen() {
src -= _mouseWidth;
}
dst -= -_screenHeight + displayHeight - srcY;
- src -= 1 - (displayHeight - srcY) * _mouseWidth;
+ src += 1 - (displayHeight - srcY) * -_mouseWidth;
}
break;
}
@@ -933,7 +933,75 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
event.kbd.ascii = _queuedInputEvent.kbd.ascii = ascii;
_needEventRestPeriod = true;
break;
-
+
+ case kInputSwipe: {
+ Common::KeyCode keycode = Common::KEYCODE_INVALID;
+ switch (_screenOrientation) {
+ case kScreenOrientationPortrait:
+ switch ((UIViewSwipeDirection)xUnit) {
+ case kUIViewSwipeUp:
+ keycode = Common::KEYCODE_UP;
+ break;
+ case kUIViewSwipeDown:
+ keycode = Common::KEYCODE_DOWN;
+ break;
+ case kUIViewSwipeLeft:
+ keycode = Common::KEYCODE_LEFT;
+ break;
+ case kUIViewSwipeRight:
+ keycode = Common::KEYCODE_RIGHT;
+ break;
+ default:
+ return false;
+ }
+ break;
+ case kScreenOrientationLandscape:
+ switch ((UIViewSwipeDirection)xUnit) {
+ case kUIViewSwipeUp:
+ keycode = Common::KEYCODE_LEFT;
+ break;
+ case kUIViewSwipeDown:
+ keycode = Common::KEYCODE_RIGHT;
+ break;
+ case kUIViewSwipeLeft:
+ keycode = Common::KEYCODE_DOWN;
+ break;
+ case kUIViewSwipeRight:
+ keycode = Common::KEYCODE_UP;
+ break;
+ default:
+ return false;
+ }
+ break;
+ case kScreenOrientationFlippedLandscape:
+ switch ((UIViewSwipeDirection)xUnit) {
+ case kUIViewSwipeUp:
+ keycode = Common::KEYCODE_RIGHT;
+ break;
+ case kUIViewSwipeDown:
+ keycode = Common::KEYCODE_LEFT;
+ break;
+ case kUIViewSwipeLeft:
+ keycode = Common::KEYCODE_UP;
+ break;
+ case kUIViewSwipeRight:
+ keycode = Common::KEYCODE_DOWN;
+ break;
+ default:
+ return false;
+ }
+ break;
+ }
+
+ event.kbd.keycode = _queuedInputEvent.kbd.keycode = keycode;
+ event.kbd.ascii = _queuedInputEvent.kbd.ascii = 0;
+ event.type = Common::EVENT_KEYDOWN;
+ _queuedInputEvent.type = Common::EVENT_KEYUP;
+ event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
+ _needEventRestPeriod = true;
+ break;
+ }
+
default:
break;
}