From 3e98c563770bdfde049c0f74871d606be3b9698e Mon Sep 17 00:00:00 2001 From: Alyssa Milburn Date: Sat, 5 Nov 2011 11:19:22 +0100 Subject: COMPOSER: Support keyboard shortcuts. --- engines/composer/composer.cpp | 37 +++++++++++++++++++++++++++++++++++++ engines/composer/composer.h | 7 +++++++ engines/composer/resource.h | 1 + 3 files changed, 45 insertions(+) (limited to 'engines') 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::iterator i = _libraries.begin(); i != _libraries.end(); i++) { + for (Common::List::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 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); diff --git a/engines/composer/composer.h b/engines/composer/composer.h index d92add1e71..02dbca53b2 100644 --- a/engines/composer/composer.h +++ b/engines/composer/composer.h @@ -95,11 +95,18 @@ enum { kEventKeyUp = 7 }; +struct KeyboardHandler { + uint16 keyId; + uint16 modifierId; + uint16 scriptId; +}; + struct Library { uint _id; Archive *_archive; Common::List