IPHONE: Use InternalEvent directly.

This commit is contained in:
Johannes Schickel 2012-04-02 00:02:31 +02:00
parent a92c54454f
commit b886bc0a41
5 changed files with 29 additions and 34 deletions

View File

@ -86,9 +86,17 @@ struct VideoContext {
int shakeOffsetY;
};
struct InternalEvent {
InternalEvent() : type(), value1(), value2() {}
InternalEvent(InputEvent t, int v1, int v2) : type(t), value1(v1), value2(v2) {}
InputEvent type;
int value1, value2;
};
// On the ObjC side
void iPhone_updateScreen();
bool iPhone_fetchEvent(int *outEvent, int *outX, int *outY);
bool iPhone_fetchEvent(InternalEvent *event);
const char *iPhone_getDocumentsDir();
bool iPhone_isHighResDevice();

View File

@ -36,14 +36,6 @@
#include "common/list.h"
struct InternalEvent {
InternalEvent() : type(), value1(), value2() {}
InternalEvent(InputEvent t, int v1, int v2) : type(t), value1(v1), value2(v2) {}
InputEvent type;
int value1, value2;
};
@interface iPhoneView : UIView {
VideoContext _videoContext;
@ -111,7 +103,7 @@ struct InternalEvent {
- (void)applicationResume;
- (bool)fetchEvent:(int *)outEvent value1:(int *)v1 value2:(int *)v2;
- (bool)fetchEvent:(InternalEvent *)event;
@end

View File

@ -65,8 +65,8 @@ void iPhone_updateScreen() {
}
}
bool iPhone_fetchEvent(int *outEvent, int *outX, int *outY) {
return [g_iPhoneViewInstance fetchEvent:outEvent value1:outX value2:outY];
bool iPhone_fetchEvent(InternalEvent *event) {
return [g_iPhoneViewInstance fetchEvent:event];
}
uint getSizeNextPOT(uint size) {
@ -569,17 +569,14 @@ const char *iPhone_getDocumentsDir() {
[_eventLock unlock];
}
- (bool)fetchEvent:(int *)outEvent value1:(int *)v1 value2:(int *)v2 {
- (bool)fetchEvent:(InternalEvent *)event {
[_eventLock lock];
if (_events.empty()) {
[_eventLock unlock];
return false;
}
const InternalEvent &front = *_events.begin();
*outEvent = front.type;
*v1 = front.value1;
*v2 = front.value2;
*event = *_events.begin();
_events.pop_front();
[_eventLock unlock];
return true;

View File

@ -46,41 +46,40 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
return true;
}
int eventType;
int x, y;
InternalEvent internalEvent;
if (iPhone_fetchEvent(&eventType, &x, &y)) {
switch ((InputEvent)eventType) {
if (iPhone_fetchEvent(&internalEvent)) {
switch (internalEvent.type) {
case kInputMouseDown:
if (!handleEvent_mouseDown(event, x, y))
if (!handleEvent_mouseDown(event, internalEvent.value1, internalEvent.value2))
return false;
break;
case kInputMouseUp:
if (!handleEvent_mouseUp(event, x, y))
if (!handleEvent_mouseUp(event, internalEvent.value1, internalEvent.value2))
return false;
break;
case kInputMouseDragged:
if (!handleEvent_mouseDragged(event, x, y))
if (!handleEvent_mouseDragged(event, internalEvent.value1, internalEvent.value2))
return false;
break;
case kInputMouseSecondDragged:
if (!handleEvent_mouseSecondDragged(event, x, y))
if (!handleEvent_mouseSecondDragged(event, internalEvent.value1, internalEvent.value2))
return false;
break;
case kInputMouseSecondDown:
_secondaryTapped = true;
if (!handleEvent_secondMouseDown(event, x, y))
if (!handleEvent_secondMouseDown(event, internalEvent.value1, internalEvent.value2))
return false;
break;
case kInputMouseSecondUp:
_secondaryTapped = false;
if (!handleEvent_secondMouseUp(event, x, y))
if (!handleEvent_secondMouseUp(event, internalEvent.value1, internalEvent.value2))
return false;
break;
case kInputOrientationChanged:
handleEvent_orientationChanged(x);
handleEvent_orientationChanged(internalEvent.value1);
return false;
break;
@ -90,11 +89,11 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
break;
case kInputKeyPressed:
handleEvent_keyPressed(event, x);
handleEvent_keyPressed(event, internalEvent.value1);
break;
case kInputSwipe:
if (!handleEvent_swipe(event, x))
if (!handleEvent_swipe(event, internalEvent.value1))
return false;
break;

View File

@ -145,15 +145,14 @@ bool OSystem_IPHONE::getFeatureState(Feature f) {
void OSystem_IPHONE::suspendLoop() {
bool done = false;
int eventType;
int x, y;
uint32 startTime = getMillis();
stopSoundsystem();
InternalEvent event;
while (!done) {
if (iPhone_fetchEvent(&eventType, &x, &y))
if ((InputEvent)eventType == kInputApplicationResumed)
if (iPhone_fetchEvent(&event))
if (event.type == kInputApplicationResumed)
done = true;
usleep(100000);
}