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 | |
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')
-rw-r--r-- | engines/composer/composer.cpp | 37 | ||||
-rw-r--r-- | engines/composer/composer.h | 7 | ||||
-rw-r--r-- | engines/composer/resource.h | 1 |
3 files changed, 45 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); 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<Button> _buttons; + Common::List<KeyboardHandler> _keyboardHandlers; }; struct QueuedScript { diff --git a/engines/composer/resource.h b/engines/composer/resource.h index aeaa5b9c88..cc1985edd2 100644 --- a/engines/composer/resource.h +++ b/engines/composer/resource.h @@ -35,6 +35,7 @@ struct Animation; #define ID_LBRC MKTAG('L','B','R','C') // Main FourCC +#define ID_ACEL MKTAG('A','C','E','L') // Keyboard Accelerator (v1) #define ID_AMBI MKTAG('A','M','B','I') // Ambient (v1 sprite button) #define ID_ANIM MKTAG('A','N','I','M') // Animation #define ID_BMAP MKTAG('B','M','A','P') // Bitmap |