From 3ae70b9d27b4b2c038f35b0aa5985c368542a486 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 2 Dec 2013 02:04:19 +0100 Subject: [PATCH] rnd-20131202-1-src * version number set to 3.3.1.3 --- ChangeLog | 3 +++ Makefile | 3 +++ src/Makefile | 12 ++++++++--- src/conftime.h | 2 +- src/engines.h | 1 + src/events.c | 19 +++++++++++++---- src/events.h | 2 +- src/init.c | 2 +- src/libgame/joystick.h | 2 +- src/libgame/misc.c | 8 ++++++-- src/libgame/pcx.c | 6 ++---- src/libgame/platform.h | 6 ++++++ src/libgame/sdl.c | 4 ++-- src/libgame/sdl.h | 43 +++++++++++++++++++++++++++++++++++++++ src/libgame/system.c | 46 ++++++++++++++++++++++++++++++++++-------- src/libgame/system.h | 7 +++++++ src/main.h | 2 +- 17 files changed, 140 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2469c878..6a38b40d 100644 --- 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 diff --git a/Makefile b/Makefile index 8a51c93a..173f5cd5 100644 --- 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 diff --git a/src/Makefile b/src/Makefile index b8c53054..018be6a5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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 diff --git a/src/conftime.h b/src/conftime.h index 156ff86f..c416a512 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2013-11-26 09:27" +#define COMPILE_DATE_STRING "2013-12-01 16:17" diff --git a/src/engines.h b/src/engines.h index ca773262..307ef0b9 100644 --- a/src/engines.h +++ b/src/engines.h @@ -15,6 +15,7 @@ #define ENGINES_H #include "libgame/libgame.h" + #include "game_em/export.h" #include "game_sp/export.h" diff --git a/src/events.c b/src/events.c index d583d873..122311d1 100644 --- a/src/events.c +++ b/src/events.c @@ -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 diff --git a/src/events.h b/src/events.h index 7cde0e00..c66145c6 100644 --- a/src/events.h +++ b/src/events.h @@ -16,7 +16,7 @@ #include "main.h" -int FilterMouseMotionEvents(const Event *); +int FilterEvents(const Event *); void EventLoop(void); void HandleOtherEvents(Event *); void ClearEventQueue(void); diff --git a/src/init.c b/src/init.c index a7ad871b..423ad314 100644 --- a/src/init.c +++ b/src/init.c @@ -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]"); diff --git a/src/libgame/joystick.h b/src/libgame/joystick.h index dfc3089b..d778c88c 100644 --- a/src/libgame/joystick.h +++ b/src/libgame/joystick.h @@ -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 diff --git a/src/libgame/misc.c b/src/libgame/misc.c index c196fe81..2bff745d 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -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 } diff --git a/src/libgame/pcx.c b/src/libgame/pcx.c index 4c93e39c..908def5c 100644 --- a/src/libgame/pcx.c +++ b/src/libgame/pcx.c @@ -11,14 +11,12 @@ * pcx.c * ***********************************************************/ -#ifndef TARGET_SDL - -#include - #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 */ diff --git a/src/libgame/platform.h b/src/libgame/platform.h index 1e6d1c0f..d5d939a6 100644 --- a/src/libgame/platform.h +++ b/src/libgame/platform.h @@ -170,6 +170,12 @@ #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) */ diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 3774b320..b9309408 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -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) { diff --git a/src/libgame/sdl.h b/src/libgame/sdl.h index 62196e1a..c99539b6 100644 --- a/src/libgame/sdl.h +++ b/src/libgame/sdl.h @@ -27,6 +27,18 @@ #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 diff --git a/src/libgame/system.c b/src/libgame/system.c index 6d99c7c8..e3f5847d 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -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 diff --git a/src/libgame/system.h b/src/libgame/system.h index 5c197691..e3454997 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -644,7 +644,11 @@ /* 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; diff --git a/src/main.h b/src/main.h index a35337cf..5031d845 100644 --- a/src/main.h +++ b/src/main.h @@ -2066,7 +2066,7 @@ #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" -- 2.34.1