diff options
author | Walter van Niftrik | 2011-03-09 20:50:11 +0100 |
---|---|---|
committer | Walter van Niftrik | 2011-03-09 21:05:19 +0100 |
commit | 952d1a084c851a33d8094e384f80890141d63157 (patch) | |
tree | 8c9022bf6a3122ece6a1aa5c082260e73b6d61cc /engines/sci/engine | |
parent | 354e7d05888c69f1af9778ecd065ffc02505fa4b (diff) | |
download | scummvm-rg350-952d1a084c851a33d8094e384f80890141d63157.tar.gz scummvm-rg350-952d1a084c851a33d8094e384f80890141d63157.tar.bz2 scummvm-rg350-952d1a084c851a33d8094e384f80890141d63157.zip |
SCI: Implement Mac iconbar event handling.
Diffstat (limited to 'engines/sci/engine')
-rw-r--r-- | engines/sci/engine/kevent.cpp | 14 | ||||
-rw-r--r-- | engines/sci/engine/kmisc.cpp | 19 | ||||
-rw-r--r-- | engines/sci/engine/selector.cpp | 1 | ||||
-rw-r--r-- | engines/sci/engine/selector.h | 1 |
4 files changed, 24 insertions, 11 deletions
diff --git a/engines/sci/engine/kevent.cpp b/engines/sci/engine/kevent.cpp index 2540861a93..725b78341b 100644 --- a/engines/sci/engine/kevent.cpp +++ b/engines/sci/engine/kevent.cpp @@ -35,6 +35,7 @@ #include "sci/event.h" #include "sci/graphics/coordadjuster.h" #include "sci/graphics/cursor.h" +#include "sci/graphics/maciconbar.h" namespace Sci { @@ -46,6 +47,13 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) { SegManager *segMan = s->_segMan; Common::Point mousePos; + // For Mac games with an icon bar, handle possible icon bar events first + if (g_sci->hasMacIconBar()) { + reg_t iconObj = g_sci->_gfxMacIconBar->handleEvents(); + if (!iconObj.isNull()) + invokeSelector(s, iconObj, SELECTOR(select), argc, argv, 0, NULL); + } + // If there's a simkey pending, and the game wants a keyboard event, use the // simkey instead of a normal event if (g_debug_simulated_key && (mask & SCI_EVENT_KEYBOARD)) { @@ -145,7 +153,11 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) { break; default: - s->r_acc = NULL_REG; // Unknown or no event + // Return a null event + writeSelectorValue(segMan, obj, SELECTOR(type), SCI_EVENT_NONE); + writeSelectorValue(segMan, obj, SELECTOR(message), 0); + writeSelectorValue(segMan, obj, SELECTOR(modifiers), curEvent.modifiers & modifier_mask); + s->r_acc = NULL_REG; } if ((s->r_acc.offset) && (g_sci->_debugState.stopOnEvent)) { diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp index 0061f3aa1c..723aece819 100644 --- a/engines/sci/engine/kmisc.cpp +++ b/engines/sci/engine/kmisc.cpp @@ -359,23 +359,22 @@ reg_t kIconBar(EngineState *s, int argc, reg_t *argv) { case 0: // InitIconBar for (int i = 0; i < argv[1].toUint16(); i++) g_sci->_gfxMacIconBar->addIcon(argv[i + 2]); - - // TODO: Should return icon bar handle - // Said handle is then used by DisposeIconBar break; case 1: // DisposeIconBar warning("kIconBar(Dispose)"); break; - case 2: // EnableIconBar (0xffff = all) - debug(0, "kIconBar(Enable, %d)", argv[1].toUint16()); - g_sci->_gfxMacIconBar->setIconEnabled(argv[1].toUint16(), true); + case 2: // EnableIconBar (-1 = all) + debug(0, "kIconBar(Enable, %i)", argv[1].toSint16()); + g_sci->_gfxMacIconBar->setIconEnabled(argv[1].toSint16(), true); break; - case 3: // DisableIconBar (0xffff = all) - debug(0, "kIconBar(Disable, %d)", argv[1].toUint16()); - g_sci->_gfxMacIconBar->setIconEnabled(argv[1].toUint16(), false); + case 3: // DisableIconBar (-1 = all) + debug(0, "kIconBar(Disable, %i)", argv[1].toSint16()); + g_sci->_gfxMacIconBar->setIconEnabled(argv[1].toSint16(), false); break; case 4: // SetIconBarIcon - warning("kIconBar(SetIcon, %d, %d)", argv[1].toUint16(), argv[2].toUint16()); + debug(0, "kIconBar(SetIcon, %d, %d)", argv[1].toUint16(), argv[2].toUint16()); + if (argv[2].toSint16() == -1) + g_sci->_gfxMacIconBar->setInventoryIcon(argv[2].toSint16()); break; default: error("Unknown kIconBar(%d)", argv[0].toUint16()); diff --git a/engines/sci/engine/selector.cpp b/engines/sci/engine/selector.cpp index 798dbf529c..957a836e3e 100644 --- a/engines/sci/engine/selector.cpp +++ b/engines/sci/engine/selector.cpp @@ -165,6 +165,7 @@ void Kernel::mapSelectors() { FIND_SELECTOR(vanishingX); FIND_SELECTOR(vanishingY); FIND_SELECTOR(iconIndex); + FIND_SELECTOR(select); #ifdef ENABLE_SCI32 FIND_SELECTOR(data); diff --git a/engines/sci/engine/selector.h b/engines/sci/engine/selector.h index 6038ad0c36..8a47984204 100644 --- a/engines/sci/engine/selector.h +++ b/engines/sci/engine/selector.h @@ -130,6 +130,7 @@ struct SelectorCache { // SCI1.1 Mac icon bar selectors Selector iconIndex; ///< Used to index icon bar objects + Selector select; #ifdef ENABLE_SCI32 Selector data; // Used by Array()/String() |