From c0b6db56a7402127743964ae36c2824446e4cf4a Mon Sep 17 00:00:00 2001
From: namark <namark@disroot.org>
Date: Sun, 15 Aug 2021 19:43:19 +0400
Subject: [PATCH] Palettes are now reused through format objects,
only makes sense, and seem to covers all use cases for palettes.
---
source/simple/graphical/pixel_format.h | 1 +
source/simple/graphical/surface.cpp | 22 +++++++++++++++++-----
2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/source/simple/graphical/pixel_format.h b/source/simple/graphical/pixel_format.h
index 27f0090..4ce5182 100644
--- a/source/simple/graphical/pixel_format.h
+++ b/source/simple/graphical/pixel_format.h
@@ -104,6 +104,7 @@ namespace simple::graphical
private:
static void free_pixel_format(const SDL_PixelFormat* one) noexcept;
+ friend class surface;
friend surface convert(const surface& source, const pixel_format& format);
};
diff --git a/source/simple/graphical/surface.cpp b/source/simple/graphical/surface.cpp
index b9c9a8e..cf5d205 100644
--- a/source/simple/graphical/surface.cpp
+++ b/source/simple/graphical/surface.cpp
@@ -39,7 +39,10 @@ namespace simple::graphical
SDL_FreeSurface
),
_format(this->guts()->format)
- {}
+ {
+ if(format.palette())
+ SDL_SetSurfacePalette(guts().get(), format.guts().get()->palette);
+ }
surface::surface(byte* pixels, int2 size, const pixel_format& format, int pitch)
: sdl_surface_wrapper
@@ -55,7 +58,10 @@ namespace simple::graphical
SDL_FreeSurface
),
_format(this->guts()->format)
- {}
+ {
+ if(format.palette())
+ SDL_SetSurfacePalette(guts().get(), format.guts().get()->palette);
+ }
surface::surface(std::unique_ptr<byte[]> pixels, int2 size, const pixel_format& format, int pitch)
: sdl_surface_wrapper
@@ -71,8 +77,11 @@ namespace simple::graphical
SDL_FreeSurface
),
_format(this->guts()->format),
- pixels_owner(pixels.release(), [](byte* x){ delete [] x; })
- {}
+ pixels_owner(pixels.release(), [](byte* x){ delete [] x; }) // hmmm... weird... but true
+ {
+ if(format.palette())
+ SDL_SetSurfacePalette(guts().get(), format.guts().get()->palette);
+ }
surface::surface(std::unique_ptr<byte[], void(*)(byte*)> pixels, int2 size, const pixel_format& format, int pitch)
: sdl_surface_wrapper
@@ -89,7 +98,10 @@ namespace simple::graphical
),
_format(this->guts()->format),
pixels_owner(std::move(pixels))
- {}
+ {
+ if(format.palette())
+ SDL_SetSurfacePalette(guts().get(), format.guts().get()->palette);
+ }
#if SDL_VERSION_ATLEAST(2,0,5)
--
GitLab