diff options
Diffstat (limited to 'backends')
-rw-r--r-- | backends/events/default/default-events.cpp | 33 | ||||
-rw-r--r-- | backends/events/default/default-events.h | 13 |
2 files changed, 46 insertions, 0 deletions
diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index 3b7315a2d4..f4c2623f0d 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -33,19 +33,40 @@ DefaultEventManager::DefaultEventManager(OSystem *boss) : _shouldQuit(false) { assert(_boss); + + // Reset key repeat + _currentKeyDown.keycode = 0; } bool DefaultEventManager::pollEvent(OSystem::Event &event) { + uint32 time = _boss->getMillis(); bool result; result = _boss->pollEvent(event); if (result) { + event.synthetic = false; switch (event.type) { case OSystem::EVENT_KEYDOWN: + _modifierState = event.kbd.flags; + + // init continuous event stream + // not done on PalmOS because keyboard is emulated and keyup is not generated +#if !defined(PALMOS_MODE) + _currentKeyDown.ascii = event.kbd.ascii; + _currentKeyDown.keycode = event.kbd.keycode; + _currentKeyDown.flags = event.kbd.flags; + _keyRepeatTime = time + kKeyRepeatInitialDelay; +#endif + break; case OSystem::EVENT_KEYUP: _modifierState = event.kbd.flags; + if (event.kbd.keycode == _currentKeyDown.keycode) { + // Only stop firing events if it's the current key + _currentKeyDown.keycode = 0; + } break; + case OSystem::EVENT_MOUSEMOVE: _mousePos = event.mouse; break; @@ -75,6 +96,18 @@ bool DefaultEventManager::pollEvent(OSystem::Event &event) { default: break; } + } else { + // Check if event should be sent again (keydown) + if (_currentKeyDown.keycode != 0 && _keyRepeatTime < time) { + // fire event + event.type = OSystem::EVENT_KEYDOWN; + event.synthetic = true; + event.kbd.ascii = _currentKeyDown.ascii; + event.kbd.keycode = _currentKeyDown.keycode; + event.kbd.flags = _currentKeyDown.flags; + _keyRepeatTime = time + kKeyRepeatSustainDelay; + result = true; + } } return result; diff --git a/backends/events/default/default-events.h b/backends/events/default/default-events.h index 1b6c821c23..229249a44d 100644 --- a/backends/events/default/default-events.h +++ b/backends/events/default/default-events.h @@ -46,6 +46,19 @@ class DefaultEventManager : public Common::EventManager { int _modifierState; bool _shouldQuit; + // for continuous events (keyDown) + enum { + kKeyRepeatInitialDelay = 400, + kKeyRepeatSustainDelay = 100 + }; + + struct { + uint16 ascii; + byte flags; + int keycode; + } _currentKeyDown; + uint32 _keyRepeatTime; + public: DefaultEventManager(OSystem *boss); |