diff options
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/engine/kmisc.cpp | 3 | ||||
-rw-r--r-- | engines/sci/graphics/maciconbar.cpp | 17 | ||||
-rw-r--r-- | engines/sci/graphics/maciconbar.h | 4 |
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; |