unsigned int bytes_per_pixel = (depth + 7) / 8;
int i;
-#if 0
- if (depth > 8)
- Error(ERR_EXIT, "images with more than 256 colors are not supported");
-
- depth = 8;
-#endif
-
image = checked_calloc(sizeof(Image));
image->data = checked_calloc(width * height * bytes_per_pixel);
image->width = width;
for (i = 0; i < bytes_per_pixel; i++)
*dst_ptr++ = *(src_ptr + i);
- src_ptr += i;
+ src_ptr += bytes_per_pixel;
}
}
}
int num_references;
Bitmap *bitmap;
- boolean contains_small_images;
+
+ int original_width; /* original image file width */
+ int original_height; /* original image file height */
+
+ boolean contains_small_images; /* set after adding small images */
+ boolean scaled_up; /* set after scaling up */
};
typedef struct ImageInfo ImageInfo;
ImageInfo *img_info;
#if 0
- printf("loading PCX file '%s'\n", filename);
+ printf("::: loading PCX file '%s'\n", filename);
#endif
img_info = checked_calloc(sizeof(ImageInfo));
img_info->source_filename = getStringCopy(filename);
+ img_info->original_width = img_info->bitmap->width;
+ img_info->original_height = img_info->bitmap->height;
+
img_info->contains_small_images = FALSE;
+ img_info->scaled_up = FALSE;
return img_info;
}
image_info->num_dynamic_file_list_entries);
}
-struct FileInfo *getImageListEntry(int pos)
+struct FileInfo *getImageListEntryFromImageID(int pos)
{
int num_list_entries = image_info->num_file_list_entries;
int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries);
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 =
- (ImageInfo **)(pos < num_list_entries ? image_info->artwork_list :
- 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)
+int getOriginalImageWidthFromImageID(int pos)
{
-#if 0
- /* !!! this does not work for dynamic artwork (crash!) !!! */
- struct FileInfo *file_list = (struct FileInfo *)image_info->file_list;
+ ImageInfo *img_info = getImageInfoEntryFromImageID(pos);
- return file_list[graphic].token;
-#else
- struct FileInfo *file_list = getImageListEntry(graphic);
+ return (img_info != NULL ? img_info->original_width : 0);
+}
+
+int getOriginalImageHeightFromImageID(int pos)
+{
+ ImageInfo *img_info = getImageInfoEntryFromImageID(pos);
+
+ return (img_info != NULL ? img_info->original_height : 0);
+}
+
+char *getTokenFromImageID(int graphic)
+{
+ struct FileInfo *file_list = getImageListEntryFromImageID(graphic);
return (file_list != NULL ? file_list->token : NULL);
-#endif
}
int getImageIDFromToken(char *token)
int i;
for (i = 0; i < num_list_entries; i++)
- if (strcmp(file_list[i].token, token) == 0)
+ if (strEqual(file_list[i].token, token))
return i;
return -1;
void ReloadCustomImages()
{
#if 0
- printf("DEBUG: reloading images '%s' ...\n", artwork.gfx_current_identifier);
+ printf("::: reloading images '%s' ...\n", artwork.gfx_current_identifier);
#endif
LoadArtworkConfig(image_info);
ReloadCustomArtworkList(image_info);
}
-void CreateImageWithSmallImages(int pos)
+void CreateImageWithSmallImages(int pos, int zoom_factor)
{
ImageInfo *img_info = getImageInfoEntryFromImageID(pos);
if (img_info == NULL || img_info->contains_small_images)
return;
- CreateBitmapWithSmallBitmaps(img_info->bitmap);
+ CreateBitmapWithSmallBitmaps(img_info->bitmap, zoom_factor);
img_info->contains_small_images = TRUE;
+ img_info->scaled_up = TRUE;
+}
-#if 0
- printf("CreateImageWithSmallImages: '%s' done\n", img_info->source_filename);
-#endif
+void ScaleImage(int pos, int zoom_factor)
+{
+ ImageInfo *img_info = getImageInfoEntryFromImageID(pos);
+
+ if (img_info == NULL || img_info->scaled_up)
+ return;
+
+ if (zoom_factor != 1)
+ ScaleBitmap(img_info->bitmap, zoom_factor);
+
+ img_info->scaled_up = TRUE;
}
void FreeAllImages()