X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fimage.c;h=4e30f4c1a4e7792980fa0f90e2fca0da1a7ef855;hp=64dc3c416d4fe11a4fdd5eea5a8f64e3213041d2;hb=720b0a62c8af0585e9517ed7a98ea336304c02e4;hpb=ab0c2cf87c09fdc785f5124640a9f3334bb3a4b4 diff --git a/src/libgame/image.c b/src/libgame/image.c index 64dc3c41..4e30f4c1 100644 --- a/src/libgame/image.c +++ b/src/libgame/image.c @@ -699,7 +699,7 @@ int Read_PCX_to_Pixmap(Display *display, Window window, GC gc, char *filename, /* ========================================================================= */ -/* PLATFORM INDEPENDANT IMAGE FUNCTIONS */ +/* PLATFORM INDEPENDENT IMAGE FUNCTIONS */ /* ========================================================================= */ struct ImageInfo @@ -708,6 +708,7 @@ struct ImageInfo int num_references; Bitmap *bitmap; + boolean contains_small_images; }; typedef struct ImageInfo ImageInfo; @@ -733,6 +734,8 @@ static void *Load_PCX(char *filename) img_info->source_filename = getStringCopy(filename); + img_info->contains_small_images = FALSE; + return img_info; } @@ -767,8 +770,20 @@ struct FileInfo *getImageListEntry(int pos) &image_info->dynamic_file_list[list_pos]); } +static ImageInfo *getImageInfoEntryFromImageID(int pos) +{ + int num_list_entries = image_info->num_file_list_entries; + int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries); + ImageInfo **img_info = + (ImageInfo **)(pos < num_list_entries ? image_info->artwork_list : + image_info->dynamic_artwork_list); + + return img_info[list_pos]; +} + Bitmap *getBitmapFromImageID(int pos) { +#if 0 int num_list_entries = image_info->num_file_list_entries; int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries); ImageInfo **img_info = @@ -776,6 +791,11 @@ Bitmap *getBitmapFromImageID(int pos) image_info->dynamic_artwork_list); return (img_info[list_pos] != NULL ? img_info[list_pos]->bitmap : NULL); +#else + ImageInfo *img_info = getImageInfoEntryFromImageID(pos); + + return (img_info != NULL ? img_info->bitmap : NULL); +#endif } char *getTokenFromImageID(int graphic) @@ -802,9 +822,9 @@ struct PropertyMapping *getImageListPropertyMapping() void InitImageList(struct ConfigInfo *config_list, int num_file_list_entries, struct ConfigInfo *config_suffix_list, - char **base_prefixes, - char **ext1_suffixes, - char **ext2_suffixes) + char **base_prefixes, char **ext1_suffixes, + char **ext2_suffixes, char **ext3_suffixes, + char **ignore_tokens) { int i; @@ -817,7 +837,7 @@ void InitImageList(struct ConfigInfo *config_list, int num_file_list_entries, image_info->num_dynamic_file_list_entries = 0; image_info->file_list = - getFileListFromConfigList(config_list, config_suffix_list, + getFileListFromConfigList(config_list, config_suffix_list, ignore_tokens, num_file_list_entries); image_info->dynamic_file_list = NULL; @@ -841,9 +861,19 @@ void InitImageList(struct ConfigInfo *config_list, int num_file_list_entries, for (i=0; ext2_suffixes[i] != NULL; i++) image_info->num_ext2_suffixes++; + image_info->num_ext3_suffixes = 0; + for (i=0; ext3_suffixes[i] != NULL; i++) + image_info->num_ext3_suffixes++; + + image_info->num_ignore_tokens = 0; + for (i=0; ignore_tokens[i] != NULL; i++) + image_info->num_ignore_tokens++; + image_info->base_prefixes = base_prefixes; image_info->ext1_suffixes = ext1_suffixes; image_info->ext2_suffixes = ext2_suffixes; + image_info->ext3_suffixes = ext3_suffixes; + image_info->ignore_tokens = ignore_tokens; image_info->num_property_mapping_entries = 0; @@ -865,23 +895,6 @@ void InitImageList(struct ConfigInfo *config_list, int num_file_list_entries, image_info->free_artwork = FreeImage; } -void dumpImages() -{ - struct ListNode *node; - - if (image_info->content_list == NULL) - return; - - for (node = image_info->content_list; node != NULL; node = node->next) - { - ImageInfo *img_info = (ImageInfo *)node->content; - - printf("---> '%s' [%d]\n", - img_info->source_filename, - img_info->num_references); - } -} - void ReloadCustomImages() { #if 0 @@ -890,8 +903,22 @@ void ReloadCustomImages() LoadArtworkConfig(image_info); ReloadCustomArtworkList(image_info); +} - dumpImages(); +void CreateImageWithSmallImages(int pos) +{ + ImageInfo *img_info = getImageInfoEntryFromImageID(pos); + + if (img_info == NULL || img_info->contains_small_images) + return; + + CreateBitmapWithSmallBitmaps(img_info->bitmap); + + img_info->contains_small_images = TRUE; + +#if 0 + printf("CreateImageWithSmallImages: '%s' done\n", img_info->source_filename); +#endif } void FreeAllImages()