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