aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine
diff options
context:
space:
mode:
authorWalter van Niftrik2011-03-09 20:50:11 +0100
committerWalter van Niftrik2011-03-09 21:05:19 +0100
commit952d1a084c851a33d8094e384f80890141d63157 (patch)
tree8c9022bf6a3122ece6a1aa5c082260e73b6d61cc /engines/sci/engine
parent354e7d05888c69f1af9778ecd065ffc02505fa4b (diff)
downloadscummvm-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.cpp14
-rw-r--r--engines/sci/engine/kmisc.cpp19
-rw-r--r--engines/sci/engine/selector.cpp1
-rw-r--r--engines/sci/engine/selector.h1
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()