diff options
Diffstat (limited to 'graphics/paletteman.cpp')
-rw-r--r-- | graphics/paletteman.cpp | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/graphics/paletteman.cpp b/graphics/paletteman.cpp index 0d751531a3..320b3b6497 100644 --- a/graphics/paletteman.cpp +++ b/graphics/paletteman.cpp @@ -41,15 +41,13 @@ void PaletteManager::pushCursorPalette(const byte *colors, uint start, uint num) if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) return; - Palette *pal = new Palette; - - pal->colors = new byte[4 * num]; - pal->start = start; - pal->num = num; - memcpy(pal->colors, colors, 4 * num); - + Palette *pal = new Palette(colors, start, num); _cursorPaletteStack.push(pal); - g_system->setCursorPalette(colors, start, num); + + if (num) + g_system->setCursorPalette(colors, start, num); + else + g_system->disableCursorPalette(true); } void PaletteManager::popCursorPalette() { @@ -70,7 +68,11 @@ void PaletteManager::popCursorPalette() { } pal = _cursorPaletteStack.top(); - g_system->setCursorPalette(pal->colors, pal->start, pal->num); + + if (pal->_num) + g_system->setCursorPalette(pal->_colors, pal->_start, pal->_num); + else + g_system->disableCursorPalette(true); } void PaletteManager::replaceCursorPalette(const byte *colors, uint start, uint num) { @@ -82,16 +84,24 @@ void PaletteManager::replaceCursorPalette(const byte *colors, uint start, uint n return; } - Palette *pal = _cursorPaletteStack.pop(); + Palette *pal = _cursorPaletteStack.top(); - delete pal->colors; - pal->colors = new byte[4 * num]; - pal->start = start; - pal->num = num; - memcpy(pal->colors, colors, 4 * num); + if (pal->_size < 4 * num) { + delete pal->_colors; + pal->_colors = new byte[4 * num]; + } else { + pal->_size = 4 * num; + } - _cursorPaletteStack.push(pal); - g_system->setCursorPalette(pal->colors, pal->start, pal->num); + pal->_start = start; + pal->_num = num; + + if (num) { + memcpy(pal->_colors, colors, 4 * num); + g_system->setCursorPalette(pal->_colors, pal->_start, pal->_num); + } else { + g_system->disableCursorPalette(true); + } } } // End of namespace Graphics |