diff --git a/graphics/managed_surface.cpp b/graphics/managed_surface.cpp index 421acee1353..23452e95a48 100644 --- a/graphics/managed_surface.cpp +++ b/graphics/managed_surface.cpp @@ -90,6 +90,12 @@ ManagedSurface &ManagedSurface::operator=(const ManagedSurface &surf) { _innerSurface.h = surf.h; _innerSurface.pitch = surf.pitch; this->format = surf.format; + + // Copy miscellaneous properties + _transparentColorSet = surf._transparentColorSet; + _transparentColor = surf._transparentColor; + _paletteSet = surf._paletteSet; + Common::copy(&surf._palette[0], &surf._palette[256], _palette); } return *this; @@ -123,6 +129,12 @@ void ManagedSurface::create(ManagedSurface &surf, const Common::Rect &bounds) { _innerSurface.h = bounds.height(); _owner = &surf; _disposeAfterUse = DisposeAfterUse::NO; + + // Copy miscellaneous properties + _transparentColorSet = surf._transparentColorSet; + _transparentColor = surf._transparentColor; + _paletteSet = surf._paletteSet; + Common::copy(&surf._palette[0], &surf._palette[256], _palette); } void ManagedSurface::free() { @@ -568,12 +580,18 @@ void ManagedSurface::setPalette(const byte *colors, uint start, uint num) { } _paletteSet = true; + + if (_owner) + _owner->setPalette(colors, start, num); } void ManagedSurface::setPalette(const uint32 *colors, uint start, uint num) { assert(start < 256 && (start + num) <= 256); Common::copy(colors, colors + num, &_palette[start]); _paletteSet = true; + + if (_owner) + _owner->setPalette(colors, start, num); } } // End of namespace Graphics diff --git a/graphics/screen.cpp b/graphics/screen.cpp index f55ed2057b9..59ab767543d 100644 --- a/graphics/screen.cpp +++ b/graphics/screen.cpp @@ -122,6 +122,7 @@ void Screen::setPalette(const byte palette[PALETTE_SIZE]) { void Screen::setPalette(const byte *palette, uint start, uint num) { assert(format.bytesPerPixel == 1); g_system->getPaletteManager()->setPalette(palette, start, num); + ManagedSurface::setPalette(palette, start, num); } void Screen::clearPalette() {