aboutsummaryrefslogtreecommitdiff
path: root/sword2/driver
diff options
context:
space:
mode:
authorTorbjörn Andersson2003-09-23 15:59:52 +0000
committerTorbjörn Andersson2003-09-23 15:59:52 +0000
commit57d99796ea8e5d42989d876d35078b686aebda61 (patch)
tree5acf4eb1fb36a47aba53ecd53c361ed1adb7baa1 /sword2/driver
parentd0de9fff86c9e44e9c10b181028d759ebf770f29 (diff)
downloadscummvm-rg350-57d99796ea8e5d42989d876d35078b686aebda61.tar.gz
scummvm-rg350-57d99796ea8e5d42989d876d35078b686aebda61.tar.bz2
scummvm-rg350-57d99796ea8e5d42989d876d35078b686aebda61.zip
Changed the keyboard handling to store "keyboard events", rather than just
characters. Hopefully this will make things work smoother on the Mac, but I have no way of testing that. svn-id: r10376
Diffstat (limited to 'sword2/driver')
-rw-r--r--sword2/driver/d_draw.cpp4
-rw-r--r--sword2/driver/driver96.h11
-rw-r--r--sword2/driver/keyboard.cpp23
-rw-r--r--sword2/driver/keyboard.h2
-rw-r--r--sword2/driver/rdwin.cpp2
5 files changed, 27 insertions, 15 deletions
diff --git a/sword2/driver/d_draw.cpp b/sword2/driver/d_draw.cpp
index d17c7d3fbf..a893c5ef7f 100644
--- a/sword2/driver/d_draw.cpp
+++ b/sword2/driver/d_draw.cpp
@@ -463,9 +463,9 @@ int32 PlaySmacker(char *filename, _movieTextObject *text[], uint8 *musicOut) {
ServiceWindows();
- char key;
+ _keyboardEvent ke;
- if (ReadKey(&key) == RD_OK && key == 27) {
+ if (ReadKey(&ke) == RD_OK && ke.keycode == 27) {
g_sword2->_mixer->stopHandle(handle);
break;
}
diff --git a/sword2/driver/driver96.h b/sword2/driver/driver96.h
index 1fd32aa760..a0281534e2 100644
--- a/sword2/driver/driver96.h
+++ b/sword2/driver/driver96.h
@@ -1207,11 +1207,16 @@ typedef int BOOL;
// ---------------------
//
-typedef struct
-{
+typedef struct {
uint16 buttons;
} _mouseEvent;
+typedef struct {
+ uint16 ascii;
+ int keycode;
+ int modifiers;
+} _keyboardEvent;
+
#if !defined(__GNUC__)
#pragma START_PACK_STRUCTS
#endif
@@ -1369,7 +1374,7 @@ extern void ResetRenderEngine(void);
// Keyboard functions - from keyboard.c
//-----------------------------------------------------------------------------
extern BOOL KeyWaiting(void);
-extern int32 ReadKey(char *key);
+extern int32 ReadKey(_keyboardEvent *ke);
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
diff --git a/sword2/driver/keyboard.cpp b/sword2/driver/keyboard.cpp
index 6babe45ed4..0297b8073d 100644
--- a/sword2/driver/keyboard.cpp
+++ b/sword2/driver/keyboard.cpp
@@ -66,11 +66,15 @@
uint8 keyBacklog = 0; // The number of key presses waiting to be processed.
uint8 keyPointer = 0; // Index of the next key to read from the buffer.
-char keyBuffer[MAX_KEY_BUFFER]; // The keyboard buffer
+_keyboardEvent keyBuffer[MAX_KEY_BUFFER]; // The keyboard buffer
-void WriteKey(char key) {
+void WriteKey(uint16 ascii, int keycode, int modifiers) {
if (keyBuffer && keyBacklog < MAX_KEY_BUFFER) {
- keyBuffer[(keyPointer + keyBacklog) % MAX_KEY_BUFFER] = key;
+ _keyboardEvent *slot = &keyBuffer[(keyPointer + keyBacklog) % MAX_KEY_BUFFER];
+
+ slot->ascii = ascii;
+ slot->keycode = keycode;
+ slot->modifiers = modifiers;
keyBacklog++;
}
}
@@ -82,16 +86,19 @@ BOOL KeyWaiting(void) {
return FALSE;
}
-
-
-int32 ReadKey(char *key) {
+int32 ReadKey(_keyboardEvent *ev) {
if (!keyBacklog)
return RDERR_NOKEYWAITING;
- if (key == NULL)
+ if (ev == NULL)
return RDERR_INVALIDPOINTER;
- *key = keyBuffer[keyPointer++];
+ ev->ascii = keyBuffer[keyPointer].ascii;
+ ev->keycode = keyBuffer[keyPointer].keycode;
+ ev->modifiers = keyBuffer[keyPointer].modifiers;
+
+ keyPointer++;
+
if (keyPointer == MAX_KEY_BUFFER)
keyPointer = 0;
diff --git a/sword2/driver/keyboard.h b/sword2/driver/keyboard.h
index fb181a384d..458438d795 100644
--- a/sword2/driver/keyboard.h
+++ b/sword2/driver/keyboard.h
@@ -40,6 +40,6 @@
#ifndef KEYBOARD_H
#define KEYBOARD_H
-void WriteKey(char key); // Adds a keypress to the buffer
+void WriteKey(uint16 ascii, int keycode, int modifier); // Adds a keypress to the buffer
#endif
diff --git a/sword2/driver/rdwin.cpp b/sword2/driver/rdwin.cpp
index dfa96190bf..e29d10d355 100644
--- a/sword2/driver/rdwin.cpp
+++ b/sword2/driver/rdwin.cpp
@@ -155,7 +155,7 @@ void Sword2State::parseEvents() {
if (event.kbd.keycode == 'w')
GrabScreenShot();
}
- WriteKey(event.kbd.ascii);
+ WriteKey(event.kbd.ascii, event.kbd.keycode, event.kbd.flags);
break;
case OSystem::EVENT_MOUSEMOVE:
mousex = event.mouse.x;