aboutsummaryrefslogtreecommitdiff
path: root/engines/composer/composer.cpp
diff options
context:
space:
mode:
authorAlyssa Milburn2011-11-05 11:19:22 +0100
committerAlyssa Milburn2011-11-05 11:19:22 +0100
commit3e98c563770bdfde049c0f74871d606be3b9698e (patch)
tree9d35d248ece3663404f49e60a317c757e85387bd /engines/composer/composer.cpp
parentc2cb1019a697943f9afd3c5dd6253f5f76be9033 (diff)
downloadscummvm-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.cpp37
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);