aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sword2/sword2.cpp13
-rw-r--r--sword2/sword2.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp
index 9daced6548..06363f51f5 100644
--- a/sword2/sword2.cpp
+++ b/sword2/sword2.cpp
@@ -132,6 +132,7 @@ Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst) : Engine(syst)
_debugger = NULL;
_keyboardEvent.pending = false;
+ _keyboardEvent.repeat = 0;
_mouseEvent.pending = false;
_wantSfxDebug = false;
@@ -475,17 +476,23 @@ uint32 Sword2Engine::setEventFilter(uint32 filter) {
void Sword2Engine::parseEvents() {
OSystem::Event event;
+
+ uint32 now = _system->getMillis();
while (_system->pollEvent(event)) {
switch (event.type) {
case OSystem::EVENT_KEYDOWN:
if (!(_eventFilter & RD_KEYDOWN)) {
_keyboardEvent.pending = true;
+ _keyboardEvent.repeat = now + 400;
_keyboardEvent.ascii = event.kbd.ascii;
_keyboardEvent.keycode = event.kbd.keycode;
_keyboardEvent.modifiers = event.kbd.flags;
}
break;
+ case OSystem::EVENT_KEYUP:
+ _keyboardEvent.repeat = 0;
+ break;
case OSystem::EVENT_MOUSEMOVE:
if (!(_eventFilter & RD_KEYDOWN)) {
_mouse->setPos(event.mouse.x, event.mouse.y - MENUDEEP);
@@ -534,6 +541,12 @@ void Sword2Engine::parseEvents() {
break;
}
}
+
+ // Handle keyboard auto-repeat
+ if (!_keyboardEvent.pending && _keyboardEvent.repeat && now >= _keyboardEvent.repeat) {
+ _keyboardEvent.pending = true;
+ _keyboardEvent.repeat = now + 100;
+ }
}
void Sword2Engine::gameCycle() {
diff --git a/sword2/sword2.h b/sword2/sword2.h
index afa0a2a5b2..ffbe086b24 100644
--- a/sword2/sword2.h
+++ b/sword2/sword2.h
@@ -78,6 +78,7 @@ struct MouseEvent {
struct KeyboardEvent {
bool pending;
+ uint32 repeat;
uint16 ascii;
int keycode;
int modifiers;