aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/sdl
diff options
context:
space:
mode:
authorStephen Kennedy2008-08-06 14:21:05 +0000
committerStephen Kennedy2008-08-06 14:21:05 +0000
commit57b13141af10c5e0773c2e1606daca8e08410ed5 (patch)
treea890e33f430cbff65f99a4512058667e4cfb343e /backends/platform/sdl
parent1caf48b08435b4077843cb7ebfe14ee45180f8ee (diff)
downloadscummvm-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.cpp34
-rw-r--r--backends/platform/sdl/sdl.cpp3
-rw-r--r--backends/platform/sdl/sdl.h3
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);