diff options
author | Torbjörn Andersson | 2003-09-23 15:59:52 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2003-09-23 15:59:52 +0000 |
commit | 57d99796ea8e5d42989d876d35078b686aebda61 (patch) | |
tree | 5acf4eb1fb36a47aba53ecd53c361ed1adb7baa1 /sword2/driver | |
parent | d0de9fff86c9e44e9c10b181028d759ebf770f29 (diff) | |
download | scummvm-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.cpp | 4 | ||||
-rw-r--r-- | sword2/driver/driver96.h | 11 | ||||
-rw-r--r-- | sword2/driver/keyboard.cpp | 23 | ||||
-rw-r--r-- | sword2/driver/keyboard.h | 2 | ||||
-rw-r--r-- | sword2/driver/rdwin.cpp | 2 |
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; |