// Compatibility wrappers for SDL 1 & 2. #pragma once #include #ifndef USE_SDL1 #define SDLC_KEYSTATE_LEFTCTRL SDL_SCANCODE_LCTRL #define SDLC_KEYSTATE_RIGHTCTRL SDL_SCANCODE_RCTRL #define SDLC_KEYSTATE_LEFTSHIFT SDL_SCANCODE_LSHIFT #define SDLC_KEYSTATE_RIGHTSHIFT SDL_SCANCODE_RSHIFT #define SDLC_KEYSTATE_LALT SDL_SCANCODE_LALT #define SDLC_KEYSTATE_RALT SDL_SCANCODE_RALT #define SDLC_KEYSTATE_UP SDL_SCANCODE_UP #define SDLC_KEYSTATE_DOWN SDL_SCANCODE_DOWN #define SDLC_KEYSTATE_LEFT SDL_SCANCODE_LEFT #define SDLC_KEYSTATE_RIGHT SDL_SCANCODE_RIGHT #else #define SDLC_KEYSTATE_LEFTCTRL SDLK_LCTRL #define SDLC_KEYSTATE_RIGHTCTRL SDLK_RCTRL #define SDLC_KEYSTATE_LEFTSHIFT SDLK_LSHIFT #define SDLC_KEYSTATE_RIGHTSHIFT SDLK_LSHIFT #define SDLC_KEYSTATE_LALT SDLK_LALT #define SDLC_KEYSTATE_RALT SDLK_RALT #define SDLC_KEYSTATE_UP SDLK_UP #define SDLC_KEYSTATE_DOWN SDLK_DOWN #define SDLC_KEYSTATE_LEFT SDLK_LEFT #define SDLC_KEYSTATE_RIGHT SDLK_RIGHT #endif inline const Uint8 *SDLC_GetKeyState() { #ifndef USE_SDL1 return SDL_GetKeyboardState(NULL); #else return SDL_GetKeyState(NULL); #endif } inline int SDLC_SetColorKey(SDL_Surface *surface, Uint32 key) { #ifdef USE_SDL1 return SDL_SetColorKey(surface, SDL_SRCCOLORKEY, key); #else return SDL_SetColorKey(surface, SDL_TRUE, key); #endif } // Copies the colors into the surface's palette. inline int SDLC_SetSurfaceColors(SDL_Surface *surface, SDL_Color *colors, int firstcolor, int ncolors) { #ifdef USE_SDL1 return SDL_SetPalette(surface, SDL_LOGPAL, colors, firstcolor, ncolors) - 1; #else return SDL_SetPaletteColors(surface->format->palette, colors, firstcolor, ncolors); #endif } // Copies the colors into the surface's palette. inline int SDLC_SetSurfaceColors(SDL_Surface *surface, SDL_Palette *palette) { return SDLC_SetSurfaceColors(surface, palette->colors, 0, palette->ncolors); } // Sets the palette's colors and: // SDL2: Points the surface's palette to the given palette if necessary. // SDL1: Sets the surface's colors. inline int SDLC_SetSurfaceAndPaletteColors(SDL_Surface *surface, SDL_Palette *palette, SDL_Color *colors, int firstcolor, int ncolors) { #ifdef USE_SDL1 if (ncolors > (palette->ncolors - firstcolor)) { SDL_SetError("ncolors > (palette->ncolors - firstcolor)"); return -1; } if (colors != (palette->colors + firstcolor)) SDL_memcpy(palette->colors + firstcolor, colors, ncolors * sizeof(*colors)); #if SDL1_VIDEO_MODE_BPP == 8 // When the video surface is 8bit, we need to set the output palette as well. SDL_SetColors(SDL_GetVideoSurface(), colors, firstcolor, ncolors); #endif // In SDL1, the surface always has its own distinct palette, so we need to // update it as well. return SDL_SetPalette(surface, SDL_LOGPAL, colors, firstcolor, ncolors) - 1; #else // !USE_SDL1 if (SDL_SetPaletteColors(palette, colors, firstcolor, ncolors) < 0) return -1; if (surface->format->palette != palette) return SDL_SetSurfacePalette(surface, palette); return 0; #endif }