diff --git a/common/2d/bitmap.cpp b/common/2d/bitmap.cpp index bd3bf7403..f51750ccb 100644 --- a/common/2d/bitmap.cpp +++ b/common/2d/bitmap.cpp @@ -36,6 +36,8 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #endif #include "bitmap.h" +#include "compiler-make_unique.h" + // Allocated a bitmap and makes its data be raw_data that is already somewhere. static grs_bitmap_ptr gr_create_bitmap_raw(uint16_t w, uint16_t h, unsigned char * raw_data); @@ -56,7 +58,7 @@ grs_bitmap_ptr gr_create_bitmap(uint16_t w, uint16_t h ) grs_bitmap_ptr gr_create_bitmap_raw(uint16_t w, uint16_t h, unsigned char * raw_data ) { - grs_bitmap_ptr n(new grs_bitmap); + auto n = make_unique(); gr_init_bitmap(*n.get(), 0, 0, 0, w, h, w, raw_data); return n; } @@ -97,16 +99,11 @@ void gr_init_bitmap_data (grs_bitmap &bm) // TODO: virtulize grs_subbitmap_ptr gr_create_sub_bitmap(grs_bitmap &bm, uint16_t x, uint16_t y, uint16_t w, uint16_t h) { - grs_subbitmap_ptr n(new grs_bitmap); + auto n = make_unique(); gr_init_sub_bitmap(*n.get(), bm, x, y, w, h); return n; } -void gr_free_bitmap(std::unique_ptr bm) -{ - gr_free_bitmap_data(*bm.get()); -} - void gr_free_bitmap_data (grs_bitmap &bm) // TODO: virtulize { #ifdef OGL diff --git a/common/include/gr.h b/common/include/gr.h index 5c8d06cfb..839ec8462 100644 --- a/common/include/gr.h +++ b/common/include/gr.h @@ -232,36 +232,37 @@ void gr_init_bitmap(grs_bitmap &bm, uint8_t mode, uint16_t x, uint16_t y, uint16 void gr_init_sub_bitmap (grs_bitmap &bm, grs_bitmap &bmParent, uint16_t x, uint16_t y, uint16_t w, uint16_t h); void gr_init_bitmap_alloc(grs_bitmap &bm, uint8_t mode, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t bytesperline); +void gr_free_bitmap_data(grs_bitmap &bm); // Free the bitmap and its pixel data -void gr_free_bitmap(std::unique_ptr bm); - -struct bitmap_delete +class grs_main_bitmap : public grs_bitmap { - void operator()(grs_bitmap *p) const +public: + grs_main_bitmap() = default; + grs_main_bitmap(const grs_main_bitmap &) = delete; + grs_main_bitmap &operator=(const grs_main_bitmap &) = delete; + ~grs_main_bitmap() { - gr_free_bitmap(std::unique_ptr(p)); + gr_free_bitmap_data(*this); } }; -typedef std::unique_ptr grs_bitmap_ptr; +typedef std::unique_ptr grs_bitmap_ptr; // Allocate a bitmap and its pixel data buffer. grs_bitmap_ptr gr_create_bitmap(uint16_t w,uint16_t h); // Free the bitmap, but not the pixel data buffer -struct subbitmap_delete : private std::default_delete +class grs_subbitmap : public grs_bitmap { - using default_delete::operator(); }; -typedef std::unique_ptr grs_subbitmap_ptr; +typedef std::unique_ptr grs_subbitmap_ptr; // Creates a bitmap which is part of another bitmap grs_subbitmap_ptr gr_create_sub_bitmap(grs_bitmap &bm, uint16_t x, uint16_t y, uint16_t w, uint16_t h); // Free the bitmap's data -void gr_free_bitmap_data (grs_bitmap &bm); void gr_init_bitmap_data (grs_bitmap &bm); void gr_bm_pixel(grs_bitmap &bm, uint_fast32_t x, uint_fast32_t y, uint8_t color );