diff options
author | Stephen Kennedy | 2008-08-06 14:21:05 +0000 |
---|---|---|
committer | Stephen Kennedy | 2008-08-06 14:21:05 +0000 |
commit | 57b13141af10c5e0773c2e1606daca8e08410ed5 (patch) | |
tree | a890e33f430cbff65f99a4512058667e4cfb343e /backends/platform/sdl | |
parent | 1caf48b08435b4077843cb7ebfe14ee45180f8ee (diff) | |
download | scummvm-rg350-57b13141af10c5e0773c2e1606daca8e08410ed5.tar.gz scummvm-rg350-57b13141af10c5e0773c2e1606daca8e08410ed5.tar.bz2 scummvm-rg350-57b13141af10c5e0773c2e1606daca8e08410ed5.zip |
Keymapper WIP:
* Implemented stack-based active map in Keymapper
* Started proper testing by adding code to OSystem_SDL to set up simple HardwareKeySet and Keymap
svn-id: r33660
Diffstat (limited to 'backends/platform/sdl')
-rw-r--r-- | backends/platform/sdl/events.cpp | 34 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.cpp | 3 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.h | 3 |
3 files changed, 40 insertions, 0 deletions
diff --git a/backends/platform/sdl/events.cpp b/backends/platform/sdl/events.cpp index a4a72ca380..830555e514 100644 --- a/backends/platform/sdl/events.cpp +++ b/backends/platform/sdl/events.cpp @@ -24,6 +24,7 @@ */ #include "backends/platform/sdl/sdl.h" +#include "backends/common/keymapper.h" #include "common/util.h" #include "common/events.h" @@ -520,3 +521,36 @@ bool OSystem_SDL::remapKey(SDL_Event &ev, Common::Event &event) { return false; } +void OSystem_SDL::setupKeymapper() { + using namespace Common; + Keymapper *mapper = getEventManager()->getKeymapper(); + + HardwareKeySet *keySet = new HardwareKeySet(); + keySet->addHardwareKey(new HardwareKey( 'a', KeyState(KEYCODE_a), "a" )); + keySet->addHardwareKey(new HardwareKey( 's', KeyState(KEYCODE_s), "s" )); + keySet->addHardwareKey(new HardwareKey( 'd', KeyState(KEYCODE_d), "d" )); + keySet->addHardwareKey(new HardwareKey( 'f', KeyState(KEYCODE_f), "f" )); + mapper->registerHardwareKeySet(keySet); + + Keymap *global = new Keymap(); + Action *act; + Event evt; + + #define ADD_KEYDOWN_EVENT(kc, asc, flags) \ + evt.type = EVENT_KEYDOWN; \ + evt.kbd = KeyState(kc, asc, flags); \ + act->events.push_back(evt); + + act = new Action('MENU', "Menu", kGenericActionCategory, kMenuAction); + ADD_KEYDOWN_EVENT(KEYCODE_F5, ASCII_F5, 0) + global->addAction(act); + + act = new Action('QUIT', "Quit", kGenericActionCategory, kQuitAction); + ADD_KEYDOWN_EVENT(KEYCODE_ESCAPE, ASCII_ESCAPE, 0); + global->addAction(act); + + #undef ADD_KEYDOWN_EVENT + + mapper->setDefaultGlobalKeymap(global); +} + diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index d8394b5c9c..14668dac11 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -148,6 +148,9 @@ void OSystem_SDL::initBackend() { _timerID = SDL_AddTimer(10, &timer_handler, _timer); } + // Provide the keymapper with backend's set of keys + setupKeymapper(); + // Invoke parent implementation of this method OSystem::initBackend(); diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index 4ad588f5f5..3fbfa8ba0d 100644 --- a/backends/platform/sdl/sdl.h +++ b/backends/platform/sdl/sdl.h @@ -142,6 +142,9 @@ public: // Returns true if an event was retrieved. virtual bool pollEvent(Common::Event &event); // overloaded by CE backend + // Sets up the keymapper with the backends hardware key set + virtual void setupKeymapper(); + // Set function that generates samples virtual void setupMixer(); static void mixCallback(void *s, byte *samples, int len); |