diff options
author | Eugene Sandulenko | 2009-01-11 00:20:27 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2009-01-11 00:20:27 +0000 |
commit | 83972e2001e0654e057b5a4930cd2cbc05165786 (patch) | |
tree | 1137fef4016651c2ad56aa44024649c80d0a939f /backends/events/default | |
parent | 326df55debb696f73c33450569af4a6d0c60b0fd (diff) | |
parent | fe39d4f5075cc723945ca813142d02983069d0d5 (diff) | |
download | scummvm-rg350-83972e2001e0654e057b5a4930cd2cbc05165786.tar.gz scummvm-rg350-83972e2001e0654e057b5a4930cd2cbc05165786.tar.bz2 scummvm-rg350-83972e2001e0654e057b5a4930cd2cbc05165786.zip |
Merge in Virtual Keybpard & KeyMapper branch,
- Merge is perfromed in order to not let rotting the code
- Makefile modifications were avoided
Stuff to resolve:
- Circular dependency of common/vkeybd from graphics/
- Make it compilable (?)
- Add some keyboards
- Decide on the key bindings
svn-id: r35813
Diffstat (limited to 'backends/events/default')
-rw-r--r-- | backends/events/default/default-events.cpp | 73 | ||||
-rw-r--r-- | backends/events/default/default-events.h | 29 |
2 files changed, 99 insertions, 3 deletions
diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index d1e836ac59..feed4b0c62 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -28,6 +28,9 @@ #include "common/system.h" #include "common/config-manager.h" #include "backends/events/default/default-events.h" +#include "backends/keymapper/keymapper.h" +#include "backends/keymapper/remap-dialog.h" +#include "backends/vkeybd/virtual-keyboard.h" #include "engines/engine.h" #include "gui/message.h" @@ -193,9 +196,23 @@ DefaultEventManager::DefaultEventManager(OSystem *boss) : _hasPlaybackEvent = false; } + +#ifdef ENABLE_VKEYBD + _vk = new Common::VirtualKeyboard(); +#endif +#ifdef ENABLE_KEYMAPPER + _keymapper = new Common::Keymapper(this); + _remap = false; +#endif } DefaultEventManager::~DefaultEventManager() { +#ifdef ENABLE_KEYMAPPER + delete _keymapper; +#endif +#ifdef ENABLE_VKEYBD + delete _vk; +#endif _boss->lockMutex(_timeMutex); _boss->lockMutex(_recorderMutex); _recordMode = kPassthrough; @@ -254,6 +271,16 @@ DefaultEventManager::~DefaultEventManager() { _boss->deleteMutex(_recorderMutex); } +void DefaultEventManager::init() { +#ifdef ENABLE_VKEYBD + if (ConfMan.hasKey("vkeybd_pack_name")) { + _vk->loadKeyboardPack(ConfMan.get("vkeybd_pack_name")); + } else { + _vk->loadKeyboardPack("vkeybd"); + } +#endif +} + bool DefaultEventManager::playback(Common::Event &event) { if (!_hasPlaybackEvent) { @@ -357,9 +384,25 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { if (!artificialEventQueue.empty()) { event = artificialEventQueue.pop(); result = true; - } else + } else { result = _boss->pollEvent(event); +#ifdef ENABLE_KEYMAPPER + if (result) { + // send key press events to keymapper + if (event.type == Common::EVENT_KEYDOWN) { + if (_keymapper->mapKeyDown(event.kbd)) { + result = false; + } + } else if (event.type == Common::EVENT_KEYUP) { + if (_keymapper->mapKeyUp(event.kbd)) { + result = false; + } + } + } +#endif + } + if (_recordMode != kPassthrough) { _boss->lockMutex(_recorderMutex); @@ -425,6 +468,32 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { event.type = Common::EVENT_RTL; } } +#ifdef ENABLE_VKEYBD + else if (event.kbd.keycode == Common::KEYCODE_F7 && event.kbd.flags == 0) { + if (_vk->isDisplaying()) { + _vk->close(true); + } else { + bool isPaused = (g_engine) ? g_engine->isPaused() : true; + if (!isPaused) g_engine->pauseEngine(true); + _vk->show(); + if (!isPaused) g_engine->pauseEngine(false); + result = false; + } + } +#endif +#ifdef ENABLE_KEYMAPPER + else if (event.kbd.keycode == Common::KEYCODE_F8 && event.kbd.flags == 0) { + if (!_remap) { + _remap = true; + Common::RemapDialog _remapDialog; + bool isPaused = (g_engine) ? g_engine->isPaused() : true; + if (!isPaused) g_engine->pauseEngine(true); + _remapDialog.runModal(); + if (!isPaused) g_engine->pauseEngine(false); + _remap = false; + } + } +#endif break; case Common::EVENT_KEYUP: @@ -520,7 +589,7 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { return result; } -void DefaultEventManager::pushEvent(Common::Event event) { +void DefaultEventManager::pushEvent(const Common::Event &event) { // If already received an EVENT_QUIT, don't add another one if (event.type == Common::EVENT_QUIT) { diff --git a/backends/events/default/default-events.h b/backends/events/default/default-events.h index 89846da1ae..1aeab4d68b 100644 --- a/backends/events/default/default-events.h +++ b/backends/events/default/default-events.h @@ -29,9 +29,20 @@ #include "common/events.h" #include "common/savefile.h" #include "common/mutex.h" +#include "common/queue.h" class OSystem; +namespace Common { +#ifdef ENABLE_KEYMAPPER + class Keymapper; +#endif +#ifdef ENABLE_VKEYBD + class VirtualKeyboard; +#endif +} + + /* At some point we will remove pollEvent from OSystem and change DefaultEventManager to use a "boss" derived from this class: @@ -47,6 +58,17 @@ use a subclass of EventProvider. class DefaultEventManager : public Common::EventManager { OSystem *_boss; +#ifdef ENABLE_VKEYBD + Common::VirtualKeyboard *_vk; +#endif + +#ifdef ENABLE_KEYMAPPER + Common::Keymapper *_keymapper; + bool _remap; +#endif + + Common::Queue<Common::Event> _artificialEventQueue; + Common::Point _mousePos; int _buttonState; int _modifierState; @@ -111,8 +133,9 @@ public: DefaultEventManager(OSystem *boss); ~DefaultEventManager(); + virtual void init(); virtual bool pollEvent(Common::Event &event); - virtual void pushEvent(Common::Event event); + virtual void pushEvent(const Common::Event &event); virtual void registerRandomSource(Common::RandomSource &rnd, const char *name); virtual void processMillis(uint32 &millis); @@ -122,6 +145,10 @@ public: virtual int shouldQuit() const { return _shouldQuit; } virtual int shouldRTL() const { return _shouldRTL; } virtual void resetRTL() { _shouldRTL = false; } + +#ifdef ENABLE_KEYMAPPER + virtual Common::Keymapper *getKeymapper() { return _keymapper; } +#endif }; #endif |