ANDROID: Add faked input delay.

This adds an artificial delay for mouse up events to make engines
like Gob work, similar to the iPhone fix in b3062b5e.
This commit is contained in:
Alyssa Milburn 2012-02-03 12:36:03 +01:00
parent a488556dcd
commit 4763b2c51b
3 changed files with 24 additions and 2 deletions

View file

@ -134,6 +134,7 @@ OSystem_Android::OSystem_Android(int audio_sample_rate, int audio_buffer_size) :
_enable_zoning(false), _enable_zoning(false),
_mixer(0), _mixer(0),
_shake_offset(0), _shake_offset(0),
_queuedEventTime(0),
_event_queue_lock(createMutex()), _event_queue_lock(createMutex()),
_touch_pt_down(), _touch_pt_down(),
_touch_pt_scroll(), _touch_pt_scroll(),

View file

@ -220,6 +220,8 @@ public:
private: private:
Common::Queue<Common::Event> _event_queue; Common::Queue<Common::Event> _event_queue;
Common::Event _queuedEvent;
uint32 _queuedEventTime;
MutexRef _event_queue_lock; MutexRef _event_queue_lock;
Common::Point _touch_pt_down, _touch_pt_scroll, _touch_pt_dt; Common::Point _touch_pt_down, _touch_pt_scroll, _touch_pt_dt;

View file

@ -216,6 +216,8 @@ static inline T scalef(T in, float numerator, float denominator) {
return static_cast<float>(in) * numerator / denominator; return static_cast<float>(in) * numerator / denominator;
} }
static const int kQueuedInputEventDelay = 50;
void OSystem_Android::setupKeymapper() { void OSystem_Android::setupKeymapper() {
#ifdef ENABLE_KEYMAPPER #ifdef ENABLE_KEYMAPPER
using namespace Common; using namespace Common;
@ -601,13 +603,18 @@ void OSystem_Android::pushEvent(int type, int arg1, int arg2, int arg3,
lockMutex(_event_queue_lock); lockMutex(_event_queue_lock);
if (_queuedEventTime)
_event_queue.push(_queuedEvent);
if (!_touchpad_mode) if (!_touchpad_mode)
_event_queue.push(e); _event_queue.push(e);
e.type = down; e.type = down;
_event_queue.push(e); _event_queue.push(e);
e.type = up; e.type = up;
_event_queue.push(e); _queuedEvent = e;
_queuedEventTime = getMillis() + kQueuedInputEventDelay;
unlockMutex(_event_queue_lock); unlockMutex(_event_queue_lock);
} }
@ -702,9 +709,14 @@ void OSystem_Android::pushEvent(int type, int arg1, int arg2, int arg3,
lockMutex(_event_queue_lock); lockMutex(_event_queue_lock);
if (_queuedEventTime)
_event_queue.push(_queuedEvent);
_event_queue.push(e); _event_queue.push(e);
e.type = up; e.type = up;
_event_queue.push(e); _queuedEvent = e;
_queuedEventTime = getMillis() + kQueuedInputEventDelay;
unlockMutex(_event_queue_lock); unlockMutex(_event_queue_lock);
return; return;
@ -800,6 +812,13 @@ bool OSystem_Android::pollEvent(Common::Event &event) {
lockMutex(_event_queue_lock); lockMutex(_event_queue_lock);
if (_queuedEventTime && (getMillis() > _queuedEventTime)) {
event = _queuedEvent;
_queuedEventTime = 0;
unlockMutex(_event_queue_lock);
return true;
}
if (_event_queue.empty()) { if (_event_queue.empty()) {
unlockMutex(_event_queue_lock); unlockMutex(_event_queue_lock);
return false; return false;