[Scummvm-cvs-logs] scummvm master -> b3062b5e7eb3737c5426ef8e9d93efe01fbd0a50

vinterstum oystein at geheb.com
Mon May 16 00:06:26 CEST 2011


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b3062b5e7e IPHONE: Changed the iOS queued event handling to fix mouseclicks in Gob


Commit: b3062b5e7eb3737c5426ef8e9d93efe01fbd0a50
    https://github.com/scummvm/scummvm/commit/b3062b5e7eb3737c5426ef8e9d93efe01fbd0a50
Author: Oystein Eftevaag (oystein at geheb.com)
Date: 2011-05-15T15:04:36-07:00

Commit Message:
IPHONE: Changed the iOS queued event handling to fix mouseclicks in Gob

We now delay the mouseup events for 50ms, rather than just delaying them for an additional couple of pollEvent (which doesn't work anymore due to changes in the eventhandling code elsewhere). This fixes #3018512.

Changed paths:
    backends/platform/iphone/osys_events.cpp
    backends/platform/iphone/osys_main.cpp
    backends/platform/iphone/osys_main.h



diff --git a/backends/platform/iphone/osys_events.cpp b/backends/platform/iphone/osys_events.cpp
index 38e1013..6e2a4b7 100644
--- a/backends/platform/iphone/osys_events.cpp
+++ b/backends/platform/iphone/osys_events.cpp
@@ -28,6 +28,7 @@
 
 #include "osys_main.h"
 
+static const int kQueuedInputEventDelay = 50;
 
 bool OSystem_IPHONE::pollEvent(Common::Event &event) {
 	//printf("pollEvent()\n");
@@ -39,14 +40,7 @@ bool OSystem_IPHONE::pollEvent(Common::Event &event) {
 		_timerCallbackNext = curTime + _timerCallbackTimer;
 	}
 
-	if (_needEventRestPeriod) {
-		// Workaround: Some engines can't handle mouse-down and mouse-up events
-		// appearing right after each other, without a call returning no input in between.
-		_needEventRestPeriod = false;
-		return false;
-	}
-
-	if (_queuedInputEvent.type != (Common::EventType)0) {
+	if (_queuedInputEvent.type != (Common::EventType)0 && curTime >= _queuedEventTime) {
 		event = _queuedInputEvent;
 		_queuedInputEvent.type = (Common::EventType)0;
 		return true;
@@ -191,7 +185,7 @@ bool OSystem_IPHONE::handleEvent_mouseUp(Common::Event &event, int x, int y) {
 			_queuedInputEvent.mouse.x = _mouseX;
 			_queuedInputEvent.mouse.y = _mouseY;
 			_lastMouseTap = getMillis();
-			_needEventRestPeriod = true;
+			_queuedEventTime = _lastMouseTap + kQueuedInputEventDelay;
 		} else
 			return false;
 	}
@@ -232,7 +226,7 @@ bool OSystem_IPHONE::handleEvent_secondMouseUp(Common::Event &event, int x, int
 			event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
 			event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_ESCAPE;
 			event.kbd.ascii = _queuedInputEvent.kbd.ascii = Common::ASCII_ESCAPE;
-			_needEventRestPeriod = true;
+			_queuedEventTime = curTime + kQueuedInputEventDelay;
 			_lastSecondaryTap = 0;
 		} else if (!_mouseClickAndDragEnabled) {
 			//printf("Rightclick!\n");
@@ -243,7 +237,7 @@ bool OSystem_IPHONE::handleEvent_secondMouseUp(Common::Event &event, int x, int
 			_queuedInputEvent.mouse.x = _mouseX;
 			_queuedInputEvent.mouse.y = _mouseY;
 			_lastSecondaryTap = curTime;
-			_needEventRestPeriod = true;
+			_queuedEventTime = curTime + kQueuedInputEventDelay;
 		} else {
 			//printf("Right nothing!\n");
 			return false;
@@ -331,7 +325,7 @@ bool OSystem_IPHONE::handleEvent_mouseSecondDragged(Common::Event &event, int x,
 			event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
 			event.kbd.keycode = _queuedInputEvent.kbd.keycode = Common::KEYCODE_F5;
 			event.kbd.ascii = _queuedInputEvent.kbd.ascii = Common::ASCII_F5;
-			_needEventRestPeriod = true;
+			_queuedEventTime = getMillis() + kQueuedInputEventDelay;
 			return true;
 		}
 
@@ -460,7 +454,7 @@ void  OSystem_IPHONE::handleEvent_keyPressed(Common::Event &event, int keyPresse
 	event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
 	event.kbd.keycode = _queuedInputEvent.kbd.keycode = (Common::KeyCode)keyPressed;
 	event.kbd.ascii = _queuedInputEvent.kbd.ascii = ascii;
-	_needEventRestPeriod = true;
+	_queuedEventTime = getMillis() + kQueuedInputEventDelay;
 }
 
 bool OSystem_IPHONE::handleEvent_swipe(Common::Event &event, int direction) {
@@ -527,7 +521,7 @@ bool OSystem_IPHONE::handleEvent_swipe(Common::Event &event, int direction) {
 	event.type = Common::EVENT_KEYDOWN;
 	_queuedInputEvent.type = Common::EVENT_KEYUP;
 	event.kbd.flags = _queuedInputEvent.kbd.flags = 0;
-	_needEventRestPeriod = true;
+	_queuedEventTime = getMillis() + kQueuedInputEventDelay;
 
 	return true;
 }
diff --git a/backends/platform/iphone/osys_main.cpp b/backends/platform/iphone/osys_main.cpp
index dcca8dc..12317ad 100644
--- a/backends/platform/iphone/osys_main.cpp
+++ b/backends/platform/iphone/osys_main.cpp
@@ -55,9 +55,9 @@ void *OSystem_IPHONE::s_soundParam = NULL;
 OSystem_IPHONE::OSystem_IPHONE() :
 	_savefile(NULL), _mixer(NULL), _timer(NULL), _offscreen(NULL),
 	_overlayVisible(false), _fullscreen(NULL),
-	_mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0),
-	_secondaryTapped(false), _lastSecondaryTap(0), _screenOrientation(kScreenOrientationFlippedLandscape),
-	_needEventRestPeriod(false), _mouseClickAndDragEnabled(false),
+	_mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0), _queuedEventTime(0),
+	_secondaryTapped(false), _lastSecondaryTap(0),
+	_screenOrientation(kScreenOrientationFlippedLandscape), _mouseClickAndDragEnabled(false),
 	_gestureStartX(-1), _gestureStartY(-1), _fullScreenIsDirty(false), _fullScreenOverlayIsDirty(false),
 	_mouseDirty(false), _timeSuspended(0), _lastDragPosX(-1), _lastDragPosY(-1), _screenChangeCount(0),
 	_overlayHeight(0), _overlayWidth(0), _overlayBuffer(0)
diff --git a/backends/platform/iphone/osys_main.h b/backends/platform/iphone/osys_main.h
index be3ae4b..1ff8796 100644
--- a/backends/platform/iphone/osys_main.h
+++ b/backends/platform/iphone/osys_main.h
@@ -86,9 +86,9 @@ protected:
 	bool _mouseDirty;
 	long _lastMouseDown;
 	long _lastMouseTap;
+	long _queuedEventTime;
 	Common::Rect _lastDrawnMouseRect;
 	Common::Event _queuedInputEvent;
-	bool _needEventRestPeriod;
 	bool _secondaryTapped;
 	long _lastSecondaryDown;
 	long _lastSecondaryTap;






More information about the Scummvm-git-logs mailing list