diff options
| -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;  | 
