X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fimage.c;h=73e077340e9a35429480a570692146b5a2be0127;hb=22473d4140e896b64767e3349ef308f69b7668b9;hp=62b8fed355c5cd9bbf7931c3f53bcb5d0bd9b7fa;hpb=7891415ca10eb882506eaaa3bca720ec75723a0e;p=rocksndiamonds.git diff --git a/src/libgame/image.c b/src/libgame/image.c index 62b8fed3..73e07734 100644 --- a/src/libgame/image.c +++ b/src/libgame/image.c @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2001 Artsoft Entertainment * +* (c) 1994-2002 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -16,6 +16,10 @@ #include "misc.h" +/* ========================================================================= */ +/* PLATFORM SPECIFIC IMAGE FUNCTIONS */ +/* ========================================================================= */ + #if defined(TARGET_X11) /* for MS-DOS/Allegro, exclude all except newImage() and freeImage() */ @@ -635,3 +639,84 @@ int Read_PCX_to_Pixmap(Display *display, Window window, GC gc, char *filename, #endif /* PLATFORM_UNIX */ #endif /* TARGET_X11 */ + + +/* ========================================================================= */ +/* PLATFORM INDEPENDANT IMAGE FUNCTIONS */ +/* ========================================================================= */ + +struct ImageInfo +{ + char *source_filename; + int num_references; + + Bitmap *bitmap; +}; +typedef struct ImageInfo ImageInfo; + +static struct ArtworkListInfo *image_info = NULL; + +static void *Load_PCX(char *filename) +{ + ImageInfo *img_info; + +#if 0 + printf("loading PCX file '%s'\n", filename); +#endif + + img_info = checked_calloc(sizeof(ImageInfo)); + + if ((img_info->bitmap = LoadImage(filename)) == NULL) + { + Error(ERR_WARN, "cannot read image file '%s': LoadImage() failed: %s", + filename, GetError()); + free(img_info); + return NULL; + } + + img_info->source_filename = getStringCopy(filename); + + return img_info; +} + +static void FreeImage(void *ptr) +{ + ImageInfo *image = (ImageInfo *)ptr; + + if (image == NULL) + return; + + if (image->bitmap) + FreeBitmap(image->bitmap); + + if (image->source_filename) + free(image->source_filename); + + free(image); +} + +void InitImageList(struct ArtworkConfigInfo *config_list, int num_list_entries) +{ + if (image_info == NULL) + image_info = checked_calloc(sizeof(struct ArtworkListInfo)); + + if (image_info->artwork_list == NULL) + image_info->artwork_list = + checked_calloc(num_list_entries * sizeof(ImageInfo *)); + + image_info->type = ARTWORK_TYPE_GRAPHICS; + image_info->num_list_entries = num_list_entries; + image_info->config_list = config_list; + image_info->file_list = NULL; + image_info->load_artwork = Load_PCX; + image_info->free_artwork = FreeImage; +} + +void ReloadCustomImages() +{ +#if 0 + printf("DEBUG: reloading images '%s' ...\n", artwork.gfx_current_identifier); +#endif + + ReloadCustomArtworkList(image_info); +}