1 #include "DiabloUI/art.h"
2 #include "display.h"
3 #include "../3rdParty/Storm/Source/storm.h"
4 
5 namespace dvl {
6 
LoadArt(const char * pszFile,Art * art,int frames,SDL_Color * pPalette)7 void LoadArt(const char *pszFile, Art *art, int frames, SDL_Color *pPalette)
8 {
9 	if (art == NULL || art->surface != NULL)
10 		return;
11 
12 	art->frames = frames;
13 
14 	DWORD width, height, bpp;
15 	if (!SBmpLoadImage(pszFile, 0, 0, 0, &width, &height, &bpp)) {
16 		SDL_Log("Failed to load image meta");
17 		return;
18 	}
19 
20 	Uint32 format;
21 	switch (bpp) {
22 	case 8:
23 		format = SDL_PIXELFORMAT_INDEX8;
24 		break;
25 	case 24:
26 		format = SDL_PIXELFORMAT_RGB888;
27 		break;
28 	case 32:
29 		format = SDL_PIXELFORMAT_RGBA8888;
30 		break;
31 	default:
32 		format = 0;
33 		break;
34 	}
35 	SDL_Surface *art_surface = SDL_CreateRGBSurfaceWithFormat(SDL_SWSURFACE, width, height, bpp, format);
36 
37 	if (!SBmpLoadImage(pszFile, pPalette, static_cast<BYTE *>(art_surface->pixels),
38 	        art_surface->pitch * art_surface->format->BytesPerPixel * height, 0, 0, 0)) {
39 		SDL_Log("Failed to load image");
40 		SDL_FreeSurface(art_surface);
41 		art->surface = NULL;
42 		return;
43 	}
44 
45 	art->surface = art_surface;
46 	art->logical_width = art_surface->w;
47 	art->frame_height = height / frames;
48 
49 	ScaleSurfaceToOutput(&art->surface);
50 }
51 
LoadMaskedArt(const char * pszFile,Art * art,int frames,int mask)52 void LoadMaskedArt(const char *pszFile, Art *art, int frames, int mask)
53 {
54 	LoadArt(pszFile, art, frames);
55 	if (art->surface != NULL)
56 		SDLC_SetColorKey(art->surface, mask);
57 }
58 
LoadArt(Art * art,const BYTE * artData,int w,int h,int frames)59 void LoadArt(Art *art, const BYTE *artData, int w, int h, int frames)
60 {
61 	art->frames = frames;
62 	art->surface = SDL_CreateRGBSurfaceWithFormatFrom(
63 	    const_cast<BYTE *>(artData), w, h, 8, w, SDL_PIXELFORMAT_INDEX8);
64 	art->logical_width = w;
65 	art->frame_height = h / frames;
66 	ScaleSurfaceToOutput(&art->surface);
67 }
68 
69 } // namespace dvl
70