aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra
diff options
context:
space:
mode:
authorTorbjörn Andersson2007-03-17 15:44:26 +0000
committerTorbjörn Andersson2007-03-17 15:44:26 +0000
commit53624376b4d614689695d1ea56c1052cd0e7ad12 (patch)
treec98fc0e637f6634d270ae0b6e5311852e3634811 /engines/kyra
parente72455c215a1deebe235d18e7efbe55f76d8f2da (diff)
downloadscummvm-rg350-53624376b4d614689695d1ea56c1052cd0e7ad12.tar.gz
scummvm-rg350-53624376b4d614689695d1ea56c1052cd0e7ad12.tar.bz2
scummvm-rg350-53624376b4d614689695d1ea56c1052cd0e7ad12.zip
Applied my re-revised patch #1487149 ("Simplified keyboard repeat"), with
Fingolfin's blessings. Keyboard repeat is now handled by the event manager, rather than by individual engines. Since this can cause problems with some engines (see the AGI engine), the extra "key down" events are marked as "synthetic", so that they can be ignored if necessary. svn-id: r26170
Diffstat (limited to 'engines/kyra')
-rw-r--r--engines/kyra/gui.cpp26
-rw-r--r--engines/kyra/kyra.h8
2 files changed, 9 insertions, 25 deletions
diff --git a/engines/kyra/gui.cpp b/engines/kyra/gui.cpp
index 0ca9fd6be2..f68b38eec1 100644
--- a/engines/kyra/gui.cpp
+++ b/engines/kyra/gui.cpp
@@ -597,8 +597,7 @@ int KyraEngine::buttonMenuCallback(Button *caller) {
calcCoords(_menu[i]);
_menuRestoreScreen = true;
- _keyboardEvent.pending = 0;
- _keyboardEvent.repeat = 0;
+ _keyPressed = 0;
_mousePressFlag = false;
_toplevelMenu = 0;
@@ -835,12 +834,7 @@ void KyraEngine::gui_getInput() {
_mouseWheel = 1;
break;
case OSystem::EVENT_KEYDOWN:
- _keyboardEvent.pending = true;
- _keyboardEvent.repeat = now + 400;
- _keyboardEvent.ascii = event.kbd.ascii;
- break;
- case OSystem::EVENT_KEYUP:
- _keyboardEvent.repeat = 0;
+ _keyPressed = event.kbd.ascii;
break;
default:
break;
@@ -852,10 +846,6 @@ void KyraEngine::gui_getInput() {
lastScreenUpdate = now;
}
- if (!_keyboardEvent.pending && _keyboardEvent.repeat && now >= _keyboardEvent.repeat) {
- _keyboardEvent.pending = true;
- _keyboardEvent.repeat = now + 100;
- }
_system->delayMillis(3);
}
@@ -1020,26 +1010,26 @@ void KyraEngine::gui_redrawTextfield() {
void KyraEngine::gui_updateSavegameString() {
int length;
- if (_keyboardEvent.pending && _keyboardEvent.ascii) {
+ if (_keyPressed) {
length = strlen(_savegameName);
- if (_keyboardEvent.ascii > 31 && _keyboardEvent.ascii < 127) {
+ if (_keyPressed > 31 && _keyPressed < 127) {
if (length < 31) {
- _savegameName[length] = _keyboardEvent.ascii;
+ _savegameName[length] = _keyPressed;
_savegameName[length+1] = 0;
gui_redrawTextfield();
}
- } else if (_keyboardEvent.ascii == 8 ||_keyboardEvent.ascii == 127) {
+ } else if (_keyPressed == 8 ||_keyPressed == 127) {
if (length > 0) {
_savegameName[length-1] = 0;
gui_redrawTextfield();
}
- } else if (_keyboardEvent.ascii == 13) {
+ } else if (_keyPressed == 13) {
_displaySubMenu = false;
}
}
- _keyboardEvent.pending = false;
+ _keyPressed = 0;
}
int KyraEngine::gui_saveGame(Button *button) {
diff --git a/engines/kyra/kyra.h b/engines/kyra/kyra.h
index 6722f84f51..21d32988ef 100644
--- a/engines/kyra/kyra.h
+++ b/engines/kyra/kyra.h
@@ -227,12 +227,6 @@ struct Menu {
MenuItem item[6];
};
-struct KeyboardEvent {
- bool pending;
- uint32 repeat;
- uint8 ascii;
-};
-
class KyraEngine : public Engine {
friend class MusicPlayer;
friend class Debugger;
@@ -839,7 +833,7 @@ protected:
int _gameToLoad;
char _savegameName[31];
const char *_specialSavegameString;
- KeyboardEvent _keyboardEvent;
+ uint8 _keyPressed;
struct KyragemState {
uint16 nextOperation;