added support for special media buttons on Amazon Fire TV remote control
[rocksndiamonds.git] / src / libgame / sdl.h
index 8f36722b86789d93c2db10bee532f5aacd660df1..838be3ad467ca6e96cbd5293fbb8e3428b740fe8 100644 (file)
@@ -1,35 +1,63 @@
-/***********************************************************
-* Artsoft Retro-Game Library                               *
-*----------------------------------------------------------*
-* (c) 1994-2000 Artsoft Entertainment                      *
-*               Holger Schemel                             *
-*               Detmolder Strasse 189                      *
-*               33604 Bielefeld                            *
-*               Germany                                    *
-*               e-mail: info@artsoft.org                   *
-*----------------------------------------------------------*
-* 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 <SDL.h>
+#include <SDL_image.h>
+#include <SDL_mixer.h>
+#include <SDL_net.h>
+#include <SDL_thread.h>
+#if defined(PLATFORM_WIN32)
+#include <SDL_syswm.h>
+#endif
 
 /* definitions needed for "system.c" */
 
+#if defined(TARGET_SDL2)
+#define SURFACE_FLAGS          (0)
+#else
 #define SURFACE_FLAGS          (SDL_SWSURFACE)
+#endif
 
-#define SDLCOPYAREA_OPAQUE     0
-#define SDLCOPYAREA_MASKED     1
+#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 */
@@ -38,37 +66,54 @@ 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;
-  GC gc;
-  GC stored_clip_gc;
+#if defined(TARGET_SDL2)
+  SDL_Texture *texture;
+  SDL_Texture *texture_masked;
+#endif
 };
 
-struct XY
+struct MouseCursorInfo
 {
-  short x, y;
+  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];
 };
 
 
@@ -76,9 +121,19 @@ struct XY
 
 #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
@@ -116,12 +171,21 @@ struct XY
 #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
 
@@ -133,14 +197,29 @@ struct XY
 #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
@@ -173,6 +252,17 @@ struct XY
 #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
@@ -180,6 +270,7 @@ struct XY
 #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
@@ -275,6 +366,18 @@ struct XY
 #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
@@ -285,6 +388,7 @@ struct XY
 #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
@@ -298,33 +402,95 @@ struct XY
 #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 SDLInitVideoDisplay(void);
-inline void SDLInitVideoBuffer(DrawBuffer **, DrawWindow **, boolean);
-inline boolean SDLSetVideoMode(DrawBuffer **, boolean);
-inline void SDLCopyArea(Bitmap *, Bitmap *, int, int, int, int, int, int, int);
-inline void SDLFillRectangle(Bitmap *, int, int, int, int, unsigned int);
-inline void SDLDrawSimpleLine(SDL_Surface *, int, int, int, int, unsigned int);
-inline void SDLDrawLine(SDL_Surface *, int, int, int, int, Uint32);
-/* functions from SGE library */
-void sge_Line(SDL_Surface *, Sint16, Sint16, Sint16, Sint16, Uint32);
-
-inline boolean SDLOpenAudio(void);
-inline void SDLCloseAudio(void);
+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);
+
+void PrepareFadeBitmap(int);
 
 #endif /* SDL_H */