aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/kmisc.cpp3
-rw-r--r--engines/sci/graphics/maciconbar.cpp17
-rw-r--r--engines/sci/graphics/maciconbar.h4
3 files changed, 21 insertions, 3 deletions
diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp
index e02590aa3a..848cf189e6 100644
--- a/engines/sci/engine/kmisc.cpp
+++ b/engines/sci/engine/kmisc.cpp
@@ -503,8 +503,7 @@ reg_t kIconBar(EngineState *s, int argc, reg_t *argv) {
switch (argv[0].toUint16()) {
case 0: // InitIconBar
- for (int i = 0; i < argv[1].toUint16(); i++)
- g_sci->_gfxMacIconBar->addIcon(argv[i + 2]);
+ g_sci->_gfxMacIconBar->initIcons(argv[1].toUint16(), &argv[2]);
break;
case 1: // DisposeIconBar
warning("kIconBar(Dispose)");
diff --git a/engines/sci/graphics/maciconbar.cpp b/engines/sci/graphics/maciconbar.cpp
index c5c2fb97af..9b645e485f 100644
--- a/engines/sci/graphics/maciconbar.cpp
+++ b/engines/sci/graphics/maciconbar.cpp
@@ -49,6 +49,23 @@ GfxMacIconBar::GfxMacIconBar() {
}
GfxMacIconBar::~GfxMacIconBar() {
+ freeIcons();
+}
+
+void GfxMacIconBar::initIcons(uint16 count, reg_t *objs) {
+ // free icons and reset state in case game is restarting
+ freeIcons();
+ _iconBarItems.clear();
+ _lastX = 0;
+ _inventoryIcon = 0;
+ _allDisabled = true;
+
+ for (uint16 i = 0; i < count; i++) {
+ addIcon(objs[i]);
+ }
+}
+
+void GfxMacIconBar::freeIcons() {
if (_inventoryIcon) {
_inventoryIcon->free();
delete _inventoryIcon;
diff --git a/engines/sci/graphics/maciconbar.h b/engines/sci/graphics/maciconbar.h
index 86cbc74039..21d28dfc29 100644
--- a/engines/sci/graphics/maciconbar.h
+++ b/engines/sci/graphics/maciconbar.h
@@ -38,7 +38,7 @@ public:
GfxMacIconBar();
~GfxMacIconBar();
- void addIcon(reg_t obj);
+ void initIcons(uint16 count, reg_t *objs);
void drawIcons();
void setIconEnabled(int16 index, bool enabled);
void setInventoryIcon(int16 icon);
@@ -63,6 +63,8 @@ private:
Graphics::Surface *createImage(uint32 iconIndex, bool isSelected);
void remapColors(Graphics::Surface *surf, const byte *palette);
+ void freeIcons();
+ void addIcon(reg_t obj);
void drawIcon(uint16 index, bool selected);
void drawSelectedImage(uint16 index);
bool isIconEnabled(uint16 index) const;