rnd-20131202-1-src
authorHolger Schemel <info@artsoft.org>
Mon, 2 Dec 2013 01:04:19 +0000 (02:04 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 09:00:10 +0000 (11:00 +0200)
* version number set to 3.3.1.3

17 files changed:
ChangeLog
Makefile
src/Makefile
src/conftime.h
src/engines.h
src/events.c
src/events.h
src/init.c
src/libgame/joystick.h
src/libgame/misc.c
src/libgame/pcx.c
src/libgame/platform.h
src/libgame/sdl.c
src/libgame/sdl.h
src/libgame/system.c
src/libgame/system.h
src/main.h

index 2469c878cf229ac1e4e1ef9df49af90d5bbb3ed7..6a38b40d01a696ac4e4b51081d0f6afc66cdc744 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2013-12-01
+       * version number set to 3.3.1.3
+
 2013-11-24
        * version 3.3.1.2 released
 
index 8a51c93a811025640d07da5f7ae7622a3483046f..173f5cd510e71c5928357790de047b50d3132bb8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -75,6 +75,9 @@ x11:
 sdl:
        @$(MAKE_CMD) TARGET=sdl
 
+sdl2:
+       @$(MAKE_CMD) TARGET=sdl2
+
 solaris:
        @$(MAKE_CMD) PLATFORM=solaris TARGET=x11
 
index b8c53054d0ff4e4378443e1ad877ffa39c9eb3a6..018be6a502fd61653da5628014e69533bf27633b 100644 (file)
@@ -98,18 +98,24 @@ endif
 # -----------------------------------------------------------------------------
 
 ifeq ($(TARGET),x11)                   # compiling for X11 target
-SYS_CFLAGS  = -DTARGET_X11 $(X11_INCL)
+SYS_CFLAGS = -DTARGET_X11 $(X11_INCL)
 SYS_LDFLAGS = $(X11_LIBS)
 endif
 
 ifeq ($(TARGET),sdl)                   # compiling for SDL target
-SYS_CFLAGS  = -DTARGET_SDL $(shell sdl-config --cflags)
+SYS_CFLAGS = -DTARGET_SDL $(shell sdl-config --cflags)
 SDL_LIBS = -lSDL_image -lSDL_mixer -lSDL_net -lsmpeg
 SYS_LDFLAGS = $(SDL_LIBS) $(shell sdl-config --libs)
 endif
 
+ifeq ($(TARGET),sdl2)                  # compiling for SDL2 target
+SYS_CFLAGS = -DTARGET_SDL2 $(shell sdl2-config --cflags)
+SDL_LIBS = -lSDL2_image -lSDL2_mixer -lSDL2_net -lsmpeg2
+SYS_LDFLAGS = $(SDL_LIBS) $(shell sdl2-config --libs)
+endif
+
 ifeq ($(TARGET),sdl-static)            # compiling for SDL target (static)
-SYS_CFLAGS  = -DTARGET_SDL $(shell sdl-config --cflags)
+SYS_CFLAGS = -DTARGET_SDL $(shell sdl-config --cflags)
 SDL_LIBS = -lSDL_image -lSDL_mixer -lSDL_net -lsmpeg -lmikmod
 SYS_LDFLAGS = $(SDL_LIBS) $(shell sdl-config --static-libs)
 endif
index 156ff86f78aa911ea580e89092b73907f1c80be8..c416a512c80096e4c4988a87b2c8c949cff2c6ab 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2013-11-26 09:27"
+#define COMPILE_DATE_STRING "2013-12-01 16:17"
index ca773262967861dab619b46a9a3e94e610baf8e9..307ef0b9f813f0c6373f3b1bdc7232d3a5273c76 100644 (file)
@@ -15,6 +15,7 @@
 #define ENGINES_H
 
 #include "libgame/libgame.h"
+
 #include "game_em/export.h"
 #include "game_sp/export.h"
 
index d583d87305b3165cbc6663963f273d43391c79ae..122311d1a527345b924ce8bca12673dca7d216e8 100644 (file)
@@ -36,10 +36,21 @@ static unsigned int playfield_cursor_delay = 0;
    delay problems with lots of mouse motion events when mouse button
    not pressed (X11 can handle this with 'PointerMotionHintMask') */
 
-int FilterMouseMotionEvents(const Event *event)
+/* event filter addition for SDL2: as SDL2 does not have a function to enable
+   or disable keyboard auto-repeat, filter repeated keyboard events instead */
+
+int FilterEvents(const Event *event)
 {
   MotionEvent *motion;
 
+#if defined(TARGET_SDL2)
+  /* skip repeated key press events if keyboard auto-repeat is disabled */
+  if (event->type == EVENT_KEYPRESS &&
+      event->key.repeat &&
+      !keyrepeat_status)
+    return 0;
+#endif
+
   /* non-motion events are directly passed to event handler functions */
   if (event->type != EVENT_MOTIONNOTIFY)
     return 1;
@@ -59,8 +70,8 @@ int FilterMouseMotionEvents(const Event *event)
   if (button_status == MB_RELEASED &&
       game_status != GAME_MODE_EDITOR && game_status != GAME_MODE_PLAYING)
     return 0;
-  else
-    return 1;
+
+  return 1;
 }
 
 /* to prevent delay problems, skip mouse motion events if the very next
@@ -318,7 +329,7 @@ void SleepWhileUnmapped()
 
 void HandleExposeEvent(ExposeEvent *event)
 {
-#ifndef TARGET_SDL
+#if !defined(TARGET_SDL)
   RedrawPlayfield(FALSE, event->x, event->y, event->width, event->height);
   FlushDisplay();
 #endif
index 7cde0e00f57ff12dd946995e06c50ef96f584d46..c66145c6c632137b50e93da099b0853f1db86b3e 100644 (file)
@@ -16,7 +16,7 @@
 
 #include "main.h"
 
-int FilterMouseMotionEvents(const Event *);
+int FilterEvents(const Event *);
 void EventLoop(void);
 void HandleOtherEvents(Event *);
 void ClearEventQueue(void);
index a7ad871bdd019d4735d66077a01e15b24fbebabd..423ad314cacd7b259459f2bc08a3ebedf8817a33 100644 (file)
@@ -6389,7 +6389,7 @@ void OpenAll()
   InitVideoDisplay();
   InitVideoBuffer(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH, setup.fullscreen);
 
-  InitEventFilter(FilterMouseMotionEvents);
+  InitEventFilter(FilterEvents);
 
   print_timestamp_time("[init video stuff]");
 
index dfc3089b8851cd0402f7a2fb8f037bd071ee6849..d778c88c178cc9abaaa22fbc307e4481735184e0 100644 (file)
@@ -36,7 +36,7 @@
 /* get these values from the program 'js' from the joystick package, */
 /* set JOYSTICK_PERCENT to a threshold appropriate for your joystick */
 
-#ifdef TARGET_SDL
+#if defined(TARGET_SDL)
 #define JOYSTICK_XLEFT         -32767
 #define JOYSTICK_XMIDDLE       0
 #define JOYSTICK_XRIGHT                32767
index c196fe81d67703ca76620463d06a9ead7eff20df..2bff745d64eff0d29dae8f48eea174b28e855de7 100644 (file)
@@ -184,7 +184,7 @@ END_OF_FUNCTION(increment_counter);
 
 #if 1
 
-#ifdef TARGET_SDL
+#if defined(TARGET_SDL)
 static unsigned int getCurrentMS()
 {
   return SDL_GetTicks();
@@ -222,7 +222,7 @@ static unsigned int mainCounter(int mode)
 
 #else
 
-#ifdef TARGET_SDL
+#if defined(TARGET_SDL)
 static unsigned int mainCounter(int mode)
 {
   static unsigned int base_ms = 0;
@@ -1390,8 +1390,10 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
     { KSYM_Meta_R,     "XK_Meta_R",            "right meta" },
     { KSYM_Alt_L,      "XK_Alt_L",             "left alt" },
     { KSYM_Alt_R,      "XK_Alt_R",             "right alt" },
+#if !defined(TARGET_SDL2)
     { KSYM_Super_L,    "XK_Super_L",           "left super" },  /* Win-L */
     { KSYM_Super_R,    "XK_Super_R",           "right super" }, /* Win-R */
+#endif
     { KSYM_Mode_switch,        "XK_Mode_switch",       "mode switch" }, /* Alt-R */
     { KSYM_Multi_key,  "XK_Multi_key",         "multi key" },   /* Ctrl-R */
 
@@ -1444,6 +1446,7 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
     { KSYM_braceright, "XK_braceright",        "brace right" },
     { KSYM_asciitilde, "XK_asciitilde",        "~" },
 
+#if !defined(TARGET_SDL2)
     /* special (non-ASCII) keys */
     { KSYM_degree,     "XK_degree",            "°" },
     { KSYM_Adiaeresis, "XK_Adiaeresis",        "Ä" },
@@ -1453,6 +1456,7 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
     { KSYM_odiaeresis, "XK_odiaeresis",        "ö" },
     { KSYM_udiaeresis, "XK_udiaeresis",        "ü" },
     { KSYM_ssharp,     "XK_ssharp",            "sharp s" },
+#endif
 
     /* end-of-array identifier */
     { 0,                NULL,                  NULL }
index 4c93e39cc9a803701106fad69d97c33bb70ac8d5..908def5c1aa4f438e0d23e47fd5d3bbc1183b26f 100644 (file)
 * pcx.c                                                    *
 ***********************************************************/
 
-#ifndef TARGET_SDL
-
-#include <stdio.h>
-
 #include "pcx.h"
 #include "misc.h"
 
 
+#if !defined(TARGET_SDL)
+
 #define PCX_DEBUG              0
 
 #define PCX_MAGIC              0x0a    /* first byte in a PCX image file    */
index 1e6d1c0f013f66cb87e8ec4e2fa7f2bdac523795..d5d939a6d1c75d70933ea208ff159927394293a7 100644 (file)
 #define TARGET_X11_NATIVE
 #endif
 
+#if defined(TARGET_SDL2)
+#ifndef TARGET_SDL
+#define TARGET_SDL
+#endif
+#endif
+
 
 /* ========================================================================= */
 /* this should better go into "system.h" or "features.h" (yet to be created) */
index 3774b320549be56bdb546a15776c135a6a61427e..b9309408a4d1966ea687f6fa0db5b7d04fb64aa4 100644 (file)
@@ -85,7 +85,7 @@ static void SDLSetWindowIcon(char *basename)
   }
 
   /* set transparent color */
-  SDL_SetColorKey(surface, SDL_SRCCOLORKEY,
+  SDL_SetColorKey(surface, SET_TRANSPARENT_PIXEL,
                  SDL_MapRGB(surface->format, 0x00, 0x00, 0x00));
 
   SDL_WM_SetIcon(surface, NULL);
@@ -1706,7 +1706,7 @@ Bitmap *SDLLoadImage(char *filename)
   UPDATE_BUSY_STATE();
 
   /* create native transparent surface for current image */
-  SDL_SetColorKey(sdl_image_tmp, SDL_SRCCOLORKEY,
+  SDL_SetColorKey(sdl_image_tmp, SET_TRANSPARENT_PIXEL,
                  SDL_MapRGB(sdl_image_tmp->format, 0x00, 0x00, 0x00));
   if ((new_bitmap->surface_masked = SDL_DisplayFormat(sdl_image_tmp)) == NULL)
   {
index 62196e1aadff8bc25ca1b67a080eb4b4bd35c0b2..c99539b6c3bdcc6615f0195f3c6d0f4137967c3d 100644 (file)
 
 #define SURFACE_FLAGS          (SDL_SWSURFACE)
 
+#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
+
+#if defined(TARGET_SDL2)
+#define SDL_DisplayFormat(s)   (s)
+#endif
+
 /* system dependent definitions */
 
 #define TARGET_STRING          "SDL"
@@ -44,7 +56,11 @@ 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;
@@ -132,12 +148,19 @@ struct MouseCursorInfo
 #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
 
@@ -189,6 +212,7 @@ struct MouseCursorInfo
 #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
@@ -197,6 +221,7 @@ struct MouseCursorInfo
 #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
@@ -292,6 +317,18 @@ struct MouseCursorInfo
 #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
@@ -302,6 +339,7 @@ struct MouseCursorInfo
 #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
@@ -337,8 +375,13 @@ struct MouseCursorInfo
 #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
 
index 6d99c7c8cd11f346fb9bbe63f92cb735b114c958..e3f5847d4ba45a2469318668e59b4dcaa8eee0d3 100644 (file)
@@ -59,6 +59,9 @@ DrawBuffer           *drawto = NULL;
 
 int                    button_status = MB_NOT_PRESSED;
 boolean                        motion_status = FALSE;
+#if defined(TARGET_SDL2)
+boolean                        keyrepeat_status = TRUE;
+#endif
 
 int                    redraw_mask = REDRAW_NONE;
 int                    redraw_tiles = 0;
@@ -143,7 +146,13 @@ void InitPlatformDependentStuff(void)
 #endif
 
 #if defined(TARGET_SDL)
-  if (SDL_Init(SDL_INIT_EVENTTHREAD | SDL_INIT_NOPARACHUTE) < 0)
+#if defined(TARGET_SDL2)
+  int sdl_init_flags = SDL_INIT_EVENTS      | SDL_INIT_NOPARACHUTE;
+#else
+  int sdl_init_flags = SDL_INIT_EVENTTHREAD | SDL_INIT_NOPARACHUTE;
+#endif
+
+  if (SDL_Init(sdl_init_flags) < 0)
     Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError());
 
   SDLNet_Init();
@@ -1006,7 +1015,7 @@ Pixel GetPixelFromRGBcompact(Bitmap *bitmap, unsigned int color)
 /* execute all pending screen drawing operations */
 void FlushDisplay(void)
 {
-#ifndef TARGET_SDL
+#if !defined(TARGET_SDL)
   XFlush(display);
 #endif
 }
@@ -1014,7 +1023,7 @@ void FlushDisplay(void)
 /* execute and wait for all pending screen drawing operations */
 void SyncDisplay(void)
 {
-#ifndef TARGET_SDL
+#if !defined(TARGET_SDL)
   XSync(display, FALSE);
 #endif
 }
@@ -1022,9 +1031,13 @@ void SyncDisplay(void)
 void KeyboardAutoRepeatOn(void)
 {
 #if defined(TARGET_SDL)
+#if defined(TARGET_SDL2)
+  keyrepeat_status = TRUE;
+#else
   SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY / 2,
                      SDL_DEFAULT_REPEAT_INTERVAL / 2);
   SDL_EnableUNICODE(1);
+#endif
 #else
   if (display)
     XAutoRepeatOn(display);
@@ -1034,8 +1047,12 @@ void KeyboardAutoRepeatOn(void)
 void KeyboardAutoRepeatOff(void)
 {
 #if defined(TARGET_SDL)
+#if defined(TARGET_SDL2)
+  keyrepeat_status = FALSE;
+#else
   SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
   SDL_EnableUNICODE(0);
+#endif
 #else
   if (display)
     XAutoRepeatOff(display);
@@ -1288,11 +1305,11 @@ static void CreateScaledBitmaps(Bitmap *old_bitmap, int zoom_factor,
     if (old_bitmap->surface_masked)
       SDL_FreeSurface(old_bitmap->surface_masked);
 
-    SDL_SetColorKey(tmp_surface_1, SDL_SRCCOLORKEY,
+    SDL_SetColorKey(tmp_surface_1, SET_TRANSPARENT_PIXEL,
                    SDL_MapRGB(tmp_surface_1->format, 0x00, 0x00, 0x00));
     if ((old_bitmap->surface_masked = SDL_DisplayFormat(tmp_surface_1)) ==NULL)
       Error(ERR_EXIT, "SDL_DisplayFormat() failed");
-    SDL_SetColorKey(tmp_surface_1, 0, 0);      /* reset transparent pixel */
+    SDL_SetColorKey(tmp_surface_1, UNSET_TRANSPARENT_PIXEL, 0);
 #endif
   }
 #endif
@@ -1379,11 +1396,11 @@ static void CreateScaledBitmaps(Bitmap *old_bitmap, int zoom_factor,
     if (old_bitmap->surface_masked)
       SDL_FreeSurface(old_bitmap->surface_masked);
 
-    SDL_SetColorKey(old_surface, SDL_SRCCOLORKEY,
+    SDL_SetColorKey(old_surface, SET_TRANSPARENT_PIXEL,
                    SDL_MapRGB(old_surface->format, 0x00, 0x00, 0x00));
     if ((old_bitmap->surface_masked = SDL_DisplayFormat(old_surface)) ==NULL)
       Error(ERR_EXIT, "SDL_DisplayFormat() failed");
-    SDL_SetColorKey(old_surface, 0, 0);                /* reset transparent pixel */
+    SDL_SetColorKey(old_surface, UNSET_TRANSPARENT_PIXEL, 0);
 #endif
   }
 #endif
@@ -1621,10 +1638,14 @@ void SetAudioMode(boolean enabled)
 
 void InitEventFilter(EventFilter filter_function)
 {
-#if defined(TARGET_SDL)
   /* set event filter to filter out certain events */
+#if defined(TARGET_SDL)
+#if defined(TARGET_SDL2)
+  SDL_SetEventFilter(filter_function, NULL);
+#else
   SDL_SetEventFilter(filter_function);
 #endif
+#endif
 }
 
 boolean PendingEvent(void)
@@ -1648,7 +1669,11 @@ void NextEvent(Event *event)
 void PeekEvent(Event *event)
 {
 #if defined(TARGET_SDL)
+#if defined(TARGET_SDL2)
+  SDL_PeepEvents(event, 1, SDL_PEEKEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT);
+#else
   SDL_PeepEvents(event, 1, SDL_PEEKEVENT, SDL_ALLEVENTS);
+#endif
 #else
   XPeekEvent(display, event);
 #endif
@@ -1657,6 +1682,10 @@ void PeekEvent(Event *event)
 Key GetEventKey(KeyEvent *event, boolean with_modifiers)
 {
 #if defined(TARGET_SDL)
+#if defined(TARGET_SDL2)
+  /* key up/down events in SDL2 do not return text characters anymore */
+  return event->keysym.sym;
+#else
 
 #if 0
   printf("unicode == '%d', sym == '%d', mod == '0x%04x'\n",
@@ -1672,6 +1701,7 @@ Key GetEventKey(KeyEvent *event, boolean with_modifiers)
   else
     return event->keysym.sym;
 
+#endif
 #else
 
 #if 0
index 5c1976917b04dd8c44d6790ec709fbddd1884645..e3454997cc1d83afa841c2a9ca48045845a720d3 100644 (file)
 
 
 /* type definitions */
+#if defined(TARGET_SDL2)
+typedef int (*EventFilter)(void *, Event *);
+#else
 typedef int (*EventFilter)(const Event *);
+#endif
 
 
 /* structure definitions */
@@ -1219,6 +1223,9 @@ extern DrawBuffer        *drawto;
 
 extern int                     button_status;
 extern boolean                 motion_status;
+#if defined(TARGET_SDL2)
+extern boolean                 keyrepeat_status;
+#endif
 
 extern int                     redraw_mask;
 extern int                     redraw_tiles;
index a35337cf185d04b1d05ee347b26a99938e36c461..5031d845f57d0f2e997b1d1e5d0ef882158c1fe9 100644 (file)
 #define PROGRAM_VERSION_MAJOR          3
 #define PROGRAM_VERSION_MINOR          3
 #define PROGRAM_VERSION_PATCH          1
-#define PROGRAM_VERSION_BUILD          2
+#define PROGRAM_VERSION_BUILD          3
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"