rnd-20131212-1-src
[rocksndiamonds.git] / src / libgame / sdl.h
index cc60462b05e52fd8b926f03b51a77e2173dbd6a5..5cc375c8e134aa3ca48ea6a434b43cf9818a8213 100644 (file)
@@ -1,58 +1,79 @@
 /***********************************************************
-*  Rocks'n'Diamonds -- McDuffin Strikes Back!              *
+* Artsoft Retro-Game Library                               *
 *----------------------------------------------------------*
-*  ©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             *
+* (c) 1994-2006 Artsoft Entertainment                      *
+*               Holger Schemel                             *
+*               Detmolder Strasse 189                      *
+*               33604 Bielefeld                            *
+*               Germany                                    *
+*               e-mail: info@artsoft.org                   *
 *----------------------------------------------------------*
-*  sdl.h                                                   *
+* 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"
-#define FULLSCREEN_STATUS      FULLSCREEN_AVAILABLE
-
+#endif
 
-/* structure definitions */
+#define FULLSCREEN_STATUS      FULLSCREEN_AVAILABLE
 
-struct SDLSurfaceInfo
-{
-  SDL_Surface *surface;
-  SDL_Surface *surface_masked;
-};
+#define CURSOR_MAX_WIDTH       32
+#define CURSOR_MAX_HEIGHT      32
 
 
 /* SDL type definitions */
 
-typedef struct SDLSurfaceInfo  *Bitmap;
-typedef struct SDLSurfaceInfo  *DrawBuffer;
-typedef struct SDLSurfaceInfo  *DrawWindow;
+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;
+#else
 typedef SDLKey                 Key;
+#endif
+typedef unsigned int           KeyMod;
 
 typedef SDL_Event              Event;
 typedef SDL_MouseButtonEvent   ButtonEvent;
 typedef SDL_MouseMotionEvent   MotionEvent;
+#if defined(TARGET_SDL2)
+typedef SDL_TouchFingerEvent   FingerEvent;
+#endif
 typedef SDL_KeyboardEvent      KeyEvent;
 typedef SDL_Event              ExposeEvent;
 typedef SDL_Event              FocusChangeEvent;
@@ -65,13 +86,44 @@ 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;
+};
+
+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_FINGERPRESS       SDL_FINGERDOWN
+#define EVENT_FINGERRELEASE    SDL_FINGERUP
+#define EVENT_FINGERMOTION     SDL_FINGERMOTION
+#endif
 #define EVENT_KEYPRESS         SDL_KEYDOWN
 #define EVENT_KEYRELEASE       SDL_KEYUP
 #define EVENT_EXPOSE           SDL_USEREVENT + 0
@@ -109,12 +161,19 @@ 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
 
@@ -166,6 +225,8 @@ typedef int                 Colormap;
 #define KSYM_braceright                KSYM_UNDEFINED          /* undefined */
 #define KSYM_asciitilde                KSYM_UNDEFINED          /* undefined */
 
+#if !defined(TARGET_SDL2)
+#define KSYM_degree            SDLK_WORLD_16
 #define KSYM_Adiaeresis                SDLK_WORLD_36
 #define KSYM_Odiaeresis                SDLK_WORLD_54
 #define KSYM_Udiaeresis                SDLK_WORLD_60
@@ -173,6 +234,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
@@ -268,6 +330,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
@@ -278,6 +352,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
@@ -304,17 +379,68 @@ typedef int                       Colormap;
 #define KSYM_F23               KSYM_UNDEFINED
 #define KSYM_F24               KSYM_UNDEFINED
 
+#define KSYM_FKEY_FIRST                KSYM_F1
+#define KSYM_FKEY_LAST         KSYM_F15
+#define KSYM_NUM_FKEYS         (KSYM_FKEY_LAST - KSYM_FKEY_FIRST + 1)
+
+#define KMOD_None              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)
+
 
 /* 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);
+#if defined(TARGET_SDL2)
+SDL_Surface *SDL_DisplayFormat(SDL_Surface *);
+#endif
+
+void SDLInitVideoDisplay(void);
+void SDLInitVideoBuffer(DrawBuffer **, DrawWindow **, boolean);
+boolean SDLSetVideoMode(DrawBuffer **, boolean);
+void SDLCreateBitmapContent(Bitmap *, int, int, int);
+void SDLFreeBitmapPointers(Bitmap *);
+void SDLCopyArea(Bitmap *, Bitmap *, int, int, int, int, int, int, int);
+void SDLFillRectangle(Bitmap *, int, int, int, int, Uint32);
+void SDLFadeRectangle(Bitmap *, 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);
+
+void SDLZoomBitmap(Bitmap *, Bitmap *);
+
+Bitmap *SDLLoadImage(char *);
+
+void SDLSetMouseCursor(struct MouseCursorInfo *);
+
+void SDLOpenAudio(void);
+void SDLCloseAudio(void);
+
+void SDLNextEvent(Event *);
+void SDLHandleWindowManagerEvent(Event *);
 
-inline boolean SDLOpenAudio(void);
-inline void SDLCloseAudio(void);
+void HandleJoystickEvent(Event *);
+void SDLInitJoysticks(void);
+boolean SDLReadJoystick(int, int *, int *, boolean *, boolean *);
 
 #endif /* SDL_H */