mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-10 03:40:25 +00:00
SCI: Fix Mac icon bar crash on restart (KQ6, FPFP)
Add support for reinitializing the mac icon bar when restarting. Restarting runs the game's init script which calls KPlatform again. Prior to this, restarting these games would fail an assertion.
This commit is contained in:
parent
b2c79fdf4b
commit
0008fab4f5
@ -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)");
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user