X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsdl.h;h=838be3ad467ca6e96cbd5293fbb8e3428b740fe8;hp=f150e7df0ac7d0050ebff8e2f5950cafcb8fff3c;hb=0d214d4e314f6f42df24be140bb433e980319767;hpb=da14f69fd95c7bd5a0d70cdf4935af06f1f20a04 diff --git a/src/libgame/sdl.h b/src/libgame/sdl.h index f150e7df..838be3ad 100644 --- a/src/libgame/sdl.h +++ b/src/libgame/sdl.h @@ -1,66 +1,139 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* ©1995 Artsoft Development * -* Holger Schemel * -* 33659 Bielefeld-Senne * -* Telefon: (0521) 493245 * -* eMail: aeglos@valinor.owl.de * -* aeglos@uni-paderborn.de * -* q99492@pbhrzx.uni-paderborn.de * -*----------------------------------------------------------* -* sdl.h * -***********************************************************/ +// ============================================================================ +// Artsoft Retro-Game Library +// ---------------------------------------------------------------------------- +// (c) 1995-2014 by Artsoft Entertainment +// Holger Schemel +// info@artsoft.org +// http://www.artsoft.org/ +// ---------------------------------------------------------------------------- +// sdl.h +// ============================================================================ #ifndef SDL_H #define SDL_H -#include "SDL.h" -#include "SDL_image.h" -#include "SDL_mixer.h" - +#include +#include +#include +#include +#include +#if defined(PLATFORM_WIN32) +#include +#endif /* definitions needed for "system.c" */ +#if defined(TARGET_SDL2) +#define SURFACE_FLAGS (0) +#else #define SURFACE_FLAGS (SDL_SWSURFACE) +#endif +#if defined(TARGET_SDL2) +#define SET_TRANSPARENT_PIXEL (SDL_TRUE) +#define UNSET_TRANSPARENT_PIXEL (SDL_FALSE) +#else +#define SET_TRANSPARENT_PIXEL (SDL_SRCCOLORKEY) +#define UNSET_TRANSPARENT_PIXEL (0) +#endif /* system dependent definitions */ +#if defined(TARGET_SDL2) +#define TARGET_STRING "SDL2" +#else #define TARGET_STRING "SDL" +#endif + +#if defined(PLATFORM_ANDROID) +#define WINDOW_SCALING_STATUS WINDOW_SCALING_NOT_AVAILABLE #define FULLSCREEN_STATUS FULLSCREEN_AVAILABLE +#elif defined(TARGET_SDL2) +#define WINDOW_SCALING_STATUS WINDOW_SCALING_AVAILABLE +#define FULLSCREEN_STATUS FULLSCREEN_AVAILABLE +#else // SDL 1.2 +#define WINDOW_SCALING_STATUS WINDOW_SCALING_NOT_AVAILABLE +#define FULLSCREEN_STATUS FULLSCREEN_AVAILABLE +#endif + +#define CURSOR_MAX_WIDTH 32 +#define CURSOR_MAX_HEIGHT 32 /* SDL type definitions */ -typedef SDL_Surface *Bitmap; -typedef SDL_Surface *DrawWindow; -typedef SDL_Surface *DrawBuffer; +typedef struct SDLSurfaceInfo Bitmap; +typedef struct SDLSurfaceInfo DrawBuffer; +typedef struct SDLSurfaceInfo DrawWindow; +typedef Uint32 Pixel; +typedef SDL_Cursor *Cursor; +#if defined(TARGET_SDL2) +typedef SDL_Keycode Key; +typedef SDL_Keymod KeyMod; +#else typedef SDLKey Key; +typedef unsigned int KeyMod; +#endif typedef SDL_Event Event; typedef SDL_MouseButtonEvent ButtonEvent; typedef SDL_MouseMotionEvent MotionEvent; +#if defined(TARGET_SDL2) +typedef SDL_MouseWheelEvent WheelEvent; +typedef SDL_TouchFingerEvent FingerEvent; +typedef SDL_TextInputEvent TextEvent; +typedef SDL_Event PauseResumeEvent; +typedef SDL_WindowEvent WindowEvent; +#endif typedef SDL_KeyboardEvent KeyEvent; typedef SDL_Event ExposeEvent; typedef SDL_Event FocusChangeEvent; typedef SDL_Event ClientMessageEvent; -typedef int GC; -typedef int Pixmap; -typedef int Display; -typedef int Visual; -typedef int Colormap; + +/* structure definitions */ + +struct SDLSurfaceInfo +{ + char *source_filename; + + int width, height; + SDL_Surface *surface; + SDL_Surface *surface_masked; +#if defined(TARGET_SDL2) + SDL_Texture *texture; + SDL_Texture *texture_masked; +#endif +}; + +struct MouseCursorInfo +{ + int width, height; + int hot_x, hot_y; + + byte data[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8]; + byte mask[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8]; +}; /* SDL symbol definitions */ #define None 0L +#define BLACK_PIXEL 0x000000 +#define WHITE_PIXEL 0xffffff + #define EVENT_BUTTONPRESS SDL_MOUSEBUTTONDOWN #define EVENT_BUTTONRELEASE SDL_MOUSEBUTTONUP #define EVENT_MOTIONNOTIFY SDL_MOUSEMOTION +#if defined(TARGET_SDL2) +#define EVENT_WHEELMOTION SDL_MOUSEWHEEL +#define EVENT_FINGERPRESS SDL_FINGERDOWN +#define EVENT_FINGERRELEASE SDL_FINGERUP +#define EVENT_FINGERMOTION SDL_FINGERMOTION +#define EVENT_TEXTINPUT SDL_TEXTINPUT +#endif #define EVENT_KEYPRESS SDL_KEYDOWN #define EVENT_KEYRELEASE SDL_KEYUP #define EVENT_EXPOSE SDL_USEREVENT + 0 @@ -98,12 +171,21 @@ typedef int Colormap; #define KSYM_Shift_R SDLK_RSHIFT #define KSYM_Control_L SDLK_LCTRL #define KSYM_Control_R SDLK_RCTRL + +#if defined(TARGET_SDL2) +#define KSYM_Meta_L SDLK_LGUI +#define KSYM_Meta_R SDLK_RGUI +#else #define KSYM_Meta_L SDLK_LMETA #define KSYM_Meta_R SDLK_RMETA +#endif + #define KSYM_Alt_L SDLK_LALT #define KSYM_Alt_R SDLK_RALT +#if !defined(TARGET_SDL2) #define KSYM_Super_L SDLK_LSUPER #define KSYM_Super_R SDLK_RSUPER +#endif #define KSYM_Mode_switch SDLK_MODE #define KSYM_Multi_key SDLK_RCTRL @@ -115,14 +197,29 @@ typedef int Colormap; #define KSYM_End SDLK_END #define KSYM_Page_Up SDLK_PAGEUP #define KSYM_Page_Down SDLK_PAGEDOWN + +#if defined(TARGET_SDL2) #define KSYM_Menu SDLK_MENU +#define KSYM_Back SDLK_AC_BACK +#define KSYM_PlayPause SDLK_AUDIOPLAY +#if defined(PLATFORM_ANDROID) +#define KSYM_Rewind SDLK_AUDIORWND +#define KSYM_FastForward SDLK_AUDIOFFWD +#endif +#endif #define KSYM_space SDLK_SPACE #define KSYM_exclam SDLK_EXCLAIM #define KSYM_quotedbl SDLK_QUOTEDBL #define KSYM_numbersign SDLK_HASH #define KSYM_dollar SDLK_DOLLAR -#define KSYM_percent KSYM_UNDEFINED /* undefined */ + +#if defined(TARGET_SDL2) +#define KSYM_percent SDLK_PERCENT +#else +#define KSYM_percent 37 /* undefined in SDL */ +#endif + #define KSYM_ampersand SDLK_AMPERSAND #define KSYM_apostrophe SDLK_QUOTE #define KSYM_parenleft SDLK_LEFTPAREN @@ -155,6 +252,17 @@ typedef int Colormap; #define KSYM_braceright KSYM_UNDEFINED /* undefined */ #define KSYM_asciitilde KSYM_UNDEFINED /* undefined */ +#if defined(TARGET_SDL2) +#define KSYM_degree 176 +#define KSYM_Adiaeresis 196 +#define KSYM_Odiaeresis 214 +#define KSYM_Udiaeresis 220 +#define KSYM_adiaeresis 228 +#define KSYM_odiaeresis 246 +#define KSYM_udiaeresis 252 +#define KSYM_ssharp 223 +#else +#define KSYM_degree SDLK_WORLD_16 #define KSYM_Adiaeresis SDLK_WORLD_36 #define KSYM_Odiaeresis SDLK_WORLD_54 #define KSYM_Udiaeresis SDLK_WORLD_60 @@ -162,6 +270,7 @@ typedef int Colormap; #define KSYM_odiaeresis SDLK_WORLD_86 #define KSYM_udiaeresis SDLK_WORLD_92 #define KSYM_ssharp SDLK_WORLD_63 +#endif #ifndef SDLK_A #define SDLK_A 65 @@ -257,6 +366,18 @@ typedef int Colormap; #define KSYM_8 SDLK_8 #define KSYM_9 SDLK_9 +#if defined(TARGET_SDL2) +#define KSYM_KP_0 SDLK_KP_0 +#define KSYM_KP_1 SDLK_KP_1 +#define KSYM_KP_2 SDLK_KP_2 +#define KSYM_KP_3 SDLK_KP_3 +#define KSYM_KP_4 SDLK_KP_4 +#define KSYM_KP_5 SDLK_KP_5 +#define KSYM_KP_6 SDLK_KP_6 +#define KSYM_KP_7 SDLK_KP_7 +#define KSYM_KP_8 SDLK_KP_8 +#define KSYM_KP_9 SDLK_KP_9 +#else #define KSYM_KP_0 SDLK_KP0 #define KSYM_KP_1 SDLK_KP1 #define KSYM_KP_2 SDLK_KP2 @@ -267,6 +388,7 @@ typedef int Colormap; #define KSYM_KP_7 SDLK_KP7 #define KSYM_KP_8 SDLK_KP8 #define KSYM_KP_9 SDLK_KP9 +#endif #define KSYM_F1 SDLK_F1 #define KSYM_F2 SDLK_F2 @@ -280,30 +402,95 @@ typedef int Colormap; #define KSYM_F10 SDLK_F10 #define KSYM_F11 SDLK_F11 #define KSYM_F12 SDLK_F12 -#define KSYM_F13 SDLK_F13 -#define KSYM_F14 SDLK_F14 -#define KSYM_F15 SDLK_F15 -#define KSYM_F16 KSYM_UNDEFINED -#define KSYM_F17 KSYM_UNDEFINED -#define KSYM_F18 KSYM_UNDEFINED -#define KSYM_F19 KSYM_UNDEFINED -#define KSYM_F20 KSYM_UNDEFINED -#define KSYM_F21 KSYM_UNDEFINED -#define KSYM_F22 KSYM_UNDEFINED -#define KSYM_F23 KSYM_UNDEFINED -#define KSYM_F24 KSYM_UNDEFINED +#define KSYM_FKEY_FIRST KSYM_F1 +#define KSYM_FKEY_LAST KSYM_F12 +#define KSYM_NUM_FKEYS (KSYM_FKEY_LAST - KSYM_FKEY_FIRST + 1) + +#define KMOD_None KMOD_NONE +#define KMOD_Shift_L KMOD_LSHIFT +#define KMOD_Shift_R KMOD_RSHIFT +#define KMOD_Control_L KMOD_LCTRL +#define KMOD_Control_R KMOD_RCTRL + +#if defined(TARGET_SDL2) +#define KMOD_Meta_L KMOD_LGUI +#define KMOD_Meta_R KMOD_RGUI +#else +#define KMOD_Meta_L KMOD_LMETA +#define KMOD_Meta_R KMOD_RMETA +#endif + +#define KMOD_Alt_L KMOD_LALT +#define KMOD_Alt_R KMOD_RALT + +#define KMOD_Shift (KMOD_Shift_L | KMOD_Shift_R) +#define KMOD_Control (KMOD_Control_L | KMOD_Control_R) +#define KMOD_Meta (KMOD_Meta_L | KMOD_Meta_R) +#define KMOD_Alt (KMOD_Alt_L | KMOD_Alt_R) + +#if defined(TARGET_SDL2) +#define KMOD_TextInput (KMOD_Shift | KMOD_Alt_R) +#endif /* SDL function definitions */ -inline void SDLInitBufferedDisplay(DrawBuffer *, DrawWindow *); -inline boolean SDLSetVideoMode(DrawBuffer *, boolean); -inline void SDLCopyArea(SDL_Surface *, SDL_Surface *, - int, int, int, int, int, int); -inline void SDLFillRectangle(SDL_Surface *, int, int, int, int, unsigned int); -inline void SDLDrawSimpleLine(SDL_Surface *, int, int, int, int, unsigned int); +boolean SDLSetNativeSurface(SDL_Surface **); +SDL_Surface *SDLGetNativeSurface(SDL_Surface *); +void SDLCreateBitmapTextures(Bitmap *); +void SDLFreeBitmapTextures(Bitmap *); + +#if defined(TARGET_SDL2) +SDL_Surface *SDL_DisplayFormat(SDL_Surface *); +void SDLSetWindowScaling(int); +void SDLSetWindowScalingQuality(char *); +void SDLSetWindowFullscreen(boolean); +void SDLSetDisplaySize(void); +void SDLSetScreenSizeAndOffsets(int, int); +void SDLSetScreenSizeForRenderer(int, int); +void SDLSetScreenProperties(void); +#endif + +void SDLSetScreenRenderingMode(char *); +void SDLRedrawWindow(); +void SDLSetWindowTitle(void); + +void SDLLimitScreenUpdates(boolean); +void SDLInitVideoDisplay(void); +void SDLInitVideoBuffer(boolean); +boolean SDLSetVideoMode(boolean); +void SDLCreateBitmapContent(Bitmap *, int, int, int); +void SDLFreeBitmapPointers(Bitmap *); +void SDLCopyArea(Bitmap *, Bitmap *, int, int, int, int, int, int, int); +void SDLBlitTexture(Bitmap *, int, int, int, int, int, int, int); +void SDLFillRectangle(Bitmap *, int, int, int, int, Uint32); +void SDLFadeRectangle(int, int, int, int, int, int, int, + void (*draw_border_function)(void)); +void SDLDrawSimpleLine(Bitmap *, int, int, int, int, Uint32); +void SDLDrawLine(Bitmap *, int, int, int, int, Uint32); +Pixel SDLGetPixel(Bitmap *, int, int); +void SDLPutPixel(Bitmap *, int, int, Pixel); + +void SDLInvertArea(Bitmap *, int, int, int, int, Uint32); +void SDLCopyInverseMasked(Bitmap *, Bitmap *, int, int, int, int, int, int); + +Bitmap *SDLZoomBitmap(Bitmap *, int, int); + +Bitmap *SDLLoadImage(char *); + +void SDLSetMouseCursor(struct MouseCursorInfo *); + +void SDLOpenAudio(void); +void SDLCloseAudio(void); + +void SDLNextEvent(Event *); +void SDLHandleWindowManagerEvent(Event *); + +void HandleJoystickEvent(Event *); +void SDLInitJoysticks(void); +boolean SDLReadJoystick(int, int *, int *, boolean *, boolean *); +boolean SDLCheckJoystickOpened(int); -inline boolean SDLOpenAudio(void); -inline void SDLCloseAudio(void); +void PrepareFadeBitmap(int); #endif /* SDL_H */