From 3c61db33ffc94ee194dd0111a332762199334d37 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 16 Apr 2015 15:56:48 +0100 Subject: Convert atari frontend to use bitmap operation table --- atari/bitmap.h | 119 +++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 87 insertions(+), 32 deletions(-) (limited to 'atari/bitmap.h') diff --git a/atari/bitmap.h b/atari/bitmap.h index ed8093835..b0fa18069 100755 --- a/atari/bitmap.h +++ b/atari/bitmap.h @@ -16,6 +16,11 @@ * along with this program. If not, see . */ +/** + * \file + * Atari bitmap handling implementation. + */ + #ifndef NS_ATARI_BITMAP_H #define NS_ATARI_BITMAP_H @@ -24,33 +29,33 @@ #define NS_BMP_DEFAULT_BPP 4 -/* Flags for init_mfdb function: */ -#define MFDB_FLAG_STAND 0x01 -#define MFDB_FLAG_ZEROMEM 0x02 -#define MFDB_FLAG_NOALLOC 0x04 +/* Flags for init_mfdb function: */ +#define MFDB_FLAG_STAND 0x01 +#define MFDB_FLAG_ZEROMEM 0x02 +#define MFDB_FLAG_NOALLOC 0x04 -#define BITMAP_SHRINK 0 -#define BITMAP_GROW 1024 /* Don't realloc when bitmap size shrinks */ -#define BITMAP_CLEAR 2048 /* Zero bitmap memory */ +#define BITMAP_SHRINK 0 +#define BITMAP_GROW 1024 /* Don't realloc when bitmap size shrinks */ +#define BITMAP_CLEAR 2048 /* Zero bitmap memory */ -/* - calculates MFDB compatible rowstride (in number of bits) -*/ +/** + * Calculates MFDB compatible rowstride (in number of bits) + */ #define MFDB_STRIDE( w ) (((w & 15) != 0) ? (w | 15)+1 : w) -/* -Calculate size of an mfdb, - - params: - - bpp: Bits per pixel, - stride: Word aligned rowstride (width) as returned by MFDB_STRIDE, - h: Height in pixels +/** + * Calculate size of an mfdb, + * + * \param bpp Bits per pixel. + * \param stride Word aligned rowstride (width) as returned by MFDB_STRIDE, + * \param h Height in pixels. */ #define MFDB_SIZE( bpp, stride, h ) ( ((stride >> 3) * h) * bpp ) +struct gui_bitmap_table *atari_bitmap_table; + struct bitmap { int width; int height; @@ -63,20 +68,70 @@ struct bitmap { bool converted; }; -void * bitmap_create_ex( int w, int h, short bpp, int rowstride, unsigned int state, void * pixdata ); -void bitmap_to_mfdb(void * bitmap, MFDB * out); -void * bitmap_realloc( int w, int h, short bpp, int rowstride, unsigned int state, void * bmp ); -size_t bitmap_buffer_size( void * bitmap ) ; -bool bitmap_resize(struct bitmap * img, HermesHandle hermes_h, - HermesFormat *fmt, int nw, int nh); -/* - setup an MFDB struct and allocate memory for it when it is needed. - If bpp == 0, this function assumes that the MFDB shall point to the screen - and will not allocate any memory (mfdb.fd_addr == 0). - The function will return 0 when the memory allocation fails - ( out of memory), otherwise it returns the size of the mfdb.fd_addr - as number of bytes. -*/ + + +/** + * setup an MFDB struct and allocate memory for it when it is needed. + * + * If bpp == 0, this function assumes that the MFDB shall point to the + * screen and will not allocate any memory (mfdb.fd_addr == 0). + * + * \return 0 when the memory allocation fails (out of memory), + * otherwise it returns the size of the mfdb.fd_addr as number + * of bytes. + */ int init_mfdb(int bpp, int w, int h, uint32_t flags, MFDB * out ); +/** + * Create a bitmap. + * + * \param w width of image in pixels + * \param h width of image in pixels + * \param state a flag word indicating the initial state + * \return an opaque struct bitmap, or NULL on memory exhaustion + */ +void *atari_bitmap_create(int w, int h, unsigned int state); + +/** + * Find the width of a pixel row in bytes. + * + * \param bitmap a bitmap, as returned by bitmap_create() + * \return width of a pixel row in the bitmap + */ +size_t atari_bitmap_get_rowstride(void *bitmap); + +/** + * Free a bitmap. + * + * \param bitmap a bitmap, as returned by bitmap_create() + */ +void atari_bitmap_destroy(void *bitmap); + +/** + * Get bitmap width + * + * \param bitmap a bitmap, as returned by bitmap_create() + */ +int atari_bitmap_get_width(void *bitmap); + +/** + * Get bitmap height + * + * \param bitmap a bitmap, as returned by bitmap_create() + */ +int atari_bitmap_get_height(void *bitmap); + +/** + * Gets whether a bitmap should be plotted opaque + * + * \param bitmap a bitmap, as returned by bitmap_create() + */ +bool atari_bitmap_get_opaque(void *bitmap); + +size_t atari_bitmap_buffer_size(void *bitmap); + +bool atari_bitmap_resize(struct bitmap *img, HermesHandle hermes_h, HermesFormat *fmt, int nw, int nh); + +void *atari_bitmap_realloc( int w, int h, short bpp, int rowstride, unsigned int state, void * bmp ); + #endif -- cgit v1.2.3