aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/platform/iphone/osys_iphone.cpp80
-rw-r--r--backends/platform/iphone/osys_iphone.h1
2 files changed, 45 insertions, 36 deletions
diff --git a/backends/platform/iphone/osys_iphone.cpp b/backends/platform/iphone/osys_iphone.cpp
index 8c029d10b5..2e38e1af1c 100644
--- a/backends/platform/iphone/osys_iphone.cpp
+++ b/backends/platform/iphone/osys_iphone.cpp
@@ -43,6 +43,7 @@
#include "backends/timer/default/default-timer.h"
#include "backends/intern.h"
#include "sound/mixer.h"
+#include "gui/message.h"
#include "osys_iphone.h"
#include "iphone_common.h"
@@ -60,7 +61,8 @@ OSystem_IPHONE::OSystem_IPHONE() :
_overlayVisible(false), _overlayBuffer(NULL), _fullscreen(NULL),
_mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0),
_secondaryTapped(false), _lastSecondaryTap(0), _landscapeMode(true),
- _needEventRestPeriod(false)
+ _needEventRestPeriod(false), _mouseClickAndDragEnabled(false),
+ _gestureStartX(-1), _gestureStartY(-1)
{
_queuedInputEvent.type = (Common::EventType)0;
}
@@ -173,7 +175,7 @@ void OSystem_IPHONE::setPalette(const byte *colors, uint start, uint num) {
//printf("setPalette()\n");
const byte *b = colors;
- for (uint i = start; i < num; ++i) {
+ for (uint i = start; i < start + num; ++i) {
_palette[i] = RGBToColor(b[0], b[1], b[2]);
b += 4;
}
@@ -526,51 +528,54 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
switch ((InputEvent)eventType) {
case kInputMouseDown:
//printf("Mouse down at (%u, %u)\n", x, y);
- _lastMouseDown = curTime;
+
warpMouse(x, y);
- return false;
-
+ if (_mouseClickAndDragEnabled) {
+ event.type = Common::EVENT_LBUTTONDOWN;
+ event.mouse.x = _mouseX;
+ event.mouse.y = _mouseY;
+ } else {
+ _lastMouseDown = curTime;
+ return false;
+ }
break;
case kInputMouseUp:
//printf("Mouse up at (%u, %u)\n", x, y);
- if (curTime - _lastMouseDown < 250) {
- event.type = Common::EVENT_LBUTTONDOWN;
+ if (_mouseClickAndDragEnabled) {
+ event.type = Common::EVENT_LBUTTONUP;
event.mouse.x = _mouseX;
event.mouse.y = _mouseY;
-
- _queuedInputEvent.type = Common::EVENT_LBUTTONUP;
- _queuedInputEvent.mouse.x = _mouseX;
- _queuedInputEvent.mouse.y = _mouseY;
- _lastMouseTap = curTime;
- _needEventRestPeriod = true;
-
- // if (curTime - _lastMouseTap < 250 && !_overlayVisible) {
- // event.type = Common::EVENT_KEYDOWN;
- // _queuedInputEvent.type = Common::EVENT_KEYUP;
- //
- // event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
- // event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_ESCAPE;
- // event.kbd.ascii = _queuedInputEvent.kbd.ascii = 27;
- //
- // _lastMouseTap = 0;
- // } else {
- //
- // }
} else {
- return false;
+ if (curTime - _lastMouseDown < 250) {
+ event.type = Common::EVENT_LBUTTONDOWN;
+ event.mouse.x = _mouseX;
+ event.mouse.y = _mouseY;
+
+ _queuedInputEvent.type = Common::EVENT_LBUTTONUP;
+ _queuedInputEvent.mouse.x = _mouseX;
+ _queuedInputEvent.mouse.y = _mouseY;
+ _lastMouseTap = curTime;
+ _needEventRestPeriod = true;
+ } else {
+ return false;
+ }
}
break;
case kInputMouseDragged:
//printf("Mouse dragged at (%u, %u)\n", x, y);
if (_secondaryTapped) {
+ // if (_gestureStartX == -1 || _gestureStartY == -1) {
+ // return false;
+ // }
+
int vecX = (x - _gestureStartX);
int vecY = (y - _gestureStartY);
int lengthSq = vecX * vecX + vecY * vecY;
//printf("Lengthsq: %u\n", lengthSq);
- if (lengthSq > 5000) { // Long enough gesture to react upon.
+ if (lengthSq > 15000) { // Long enough gesture to react upon.
_gestureStartX = x;
_gestureStartY = y;
@@ -591,15 +596,17 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
_needEventRestPeriod = true;
} else if (vecXNorm > -0.50 && vecXNorm < 0.50 && vecYNorm < -0.75) {
// Swipe up
- event.type = Common::EVENT_KEYDOWN;
- _queuedInputEvent.type = Common::EVENT_KEYUP;
-
- event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
- event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_1;
- event.kbd.ascii = _queuedInputEvent.kbd.ascii = '1';
- _needEventRestPeriod = true;
+ _mouseClickAndDragEnabled = !_mouseClickAndDragEnabled;
+ GUI::TimedMessageDialog dialog("Toggling mouse-click-and-drag mode.", 1500);
+ dialog.runModal();
} else if (vecXNorm > 0.75 && vecYNorm > -0.5 && vecYNorm < 0.5) {
// Swipe right
+ // _secondaryTapped = !_secondaryTapped;
+ // _gestureStartX = x;
+ // _gestureStartY = y;
+ //
+ // GUI::TimedMessageDialog dialog("Forcing toggle of pressed state.", 1500);
+ // dialog.runModal();
return false;
} else if (vecXNorm < -0.75 && vecYNorm > -0.5 && vecYNorm < 0.5) {
// Swipe left
@@ -614,7 +621,8 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
event.type = Common::EVENT_MOUSEMOVE;
event.mouse.x = x;
event.mouse.y = y;
- warpMouse(x, y); }
+ warpMouse(x, y);
+ }
break;
case kInputMouseSecondToggled:
_secondaryTapped = !_secondaryTapped;
diff --git a/backends/platform/iphone/osys_iphone.h b/backends/platform/iphone/osys_iphone.h
index 65d4b9744e..48daf05c53 100644
--- a/backends/platform/iphone/osys_iphone.h
+++ b/backends/platform/iphone/osys_iphone.h
@@ -79,6 +79,7 @@ protected:
long _lastSecondaryDown;
long _lastSecondaryTap;
int _gestureStartX, _gestureStartY;
+ bool _mouseClickAndDragEnabled;
int _timerCallbackNext;
int _timerCallbackTimer;