diff options
author | Alyssa Milburn | 2011-11-05 11:19:22 +0100 |
---|---|---|
committer | Alyssa Milburn | 2011-11-05 11:19:22 +0100 |
commit | 3e98c563770bdfde049c0f74871d606be3b9698e (patch) | |
tree | 9d35d248ece3663404f49e60a317c757e85387bd /engines/composer/composer.cpp | |
parent | c2cb1019a697943f9afd3c5dd6253f5f76be9033 (diff) | |
download | scummvm-rg350-3e98c563770bdfde049c0f74871d606be3b9698e.tar.gz scummvm-rg350-3e98c563770bdfde049c0f74871d606be3b9698e.tar.bz2 scummvm-rg350-3e98c563770bdfde049c0f74871d606be3b9698e.zip |
COMPOSER: Support keyboard shortcuts.
Diffstat (limited to 'engines/composer/composer.cpp')
-rw-r--r-- | engines/composer/composer.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/engines/composer/composer.cpp b/engines/composer/composer.cpp index af08ad6e07..17c14ddba9 100644 --- a/engines/composer/composer.cpp +++ b/engines/composer/composer.cpp @@ -262,6 +262,33 @@ void ComposerEngine::onMouseMove(const Common::Point &pos) { void ComposerEngine::onKeyDown(uint16 keyCode) { runEvent(kEventKeyDown, keyCode, 0, 0); runEvent(kEventChar, keyCode, 0, 0); + + for (Common::List<Library>::iterator i = _libraries.begin(); i != _libraries.end(); i++) { + for (Common::List<KeyboardHandler>::iterator j = i->_keyboardHandlers.begin(); j != i->_keyboardHandlers.end(); j++) { + const KeyboardHandler &handler = *j; + if (keyCode != handler.keyId) + continue; + + int modifiers = g_system->getEventManager()->getModifierState(); + switch (handler.modifierId) { + case 0x10: // shift + if (!(modifiers & Common::KBD_SHIFT)) + continue; + break; + case 0x11: // control + if (!(modifiers & Common::KBD_CTRL)) + continue; + break; + case 0: + break; + default: + warning("unknown keyb modifier %d", handler.modifierId); + continue; + } + + runScript(handler.scriptId); + } + } } void ComposerEngine::setCursor(uint16 id, const Common::Point &offset) { @@ -406,6 +433,16 @@ void ComposerEngine::loadLibrary(uint id) { newLib._buttons.insert(newLib._buttons.begin(), button); } + Common::Array<uint16> accelResources = library._archive->getResourceIDList(ID_ACEL); + for (uint i = 0; i < accelResources.size(); i++) { + Common::SeekableReadStream *stream = library._archive->getResource(ID_ACEL, accelResources[i]); + KeyboardHandler handler; + handler.keyId = stream->readUint16LE(); + handler.modifierId = stream->readUint16LE(); + handler.scriptId = stream->readUint16LE(); + newLib._keyboardHandlers.push_back(handler); + } + // add background sprite, if it exists if (hasResource(ID_BMAP, 1000)) setBackground(1000); |