From b06464b4dc26c0e31ef0bca48b31a4dfbdd549e6 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 6 Jan 2014 01:37:59 +0100 Subject: [PATCH] rnd-20140106-1-src * fixed using fullscreen mode on Android instead of pseudo-window mode * fixed keeping desktop fullscreen mode when changing viewport size --- ChangeLog | 4 ++++ src/conftime.h | 2 +- src/events.c | 2 +- src/files.c | 4 ++++ src/init.c | 8 +++++++ src/libgame/misc.c | 2 +- src/libgame/sdl.c | 50 ++++++++++++++++++++++++++++++++++---------- src/libgame/sdl.h | 3 ++- src/libgame/system.c | 15 +++++++++++++ src/screens.c | 4 ++++ 10 files changed, 79 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 73069a15..16157737 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-01-05 + * fixed using fullscreen mode on Android instead of pseudo-window mode + * fixed keeping desktop fullscreen mode when changing viewport size + 2014-01-04 * fixed remaining text input problems for non-ASCII keys with modifier * added window scaling options to graphics setup menu diff --git a/src/conftime.h b/src/conftime.h index 8ccd1865..4a66c390 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2014-01-04 22:53" +#define COMPILE_DATE_STRING "2014-01-05 22:41" diff --git a/src/events.c b/src/events.c index 6fc55ea5..ed910e64 100644 --- a/src/events.c +++ b/src/events.c @@ -24,7 +24,7 @@ #include "network.h" -#define DEBUG_EVENTS 1 +#define DEBUG_EVENTS 0 static boolean cursor_inside_playfield = FALSE; diff --git a/src/files.c b/src/files.c index 64e204c2..80105139 100644 --- a/src/files.c +++ b/src/files.c @@ -11765,6 +11765,10 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->override_level_sounds = AUTO; si->override_level_music = AUTO; #endif + +#if defined(PLATFORM_ANDROID) + si->fullscreen = TRUE; +#endif } static void setSetupInfoToDefaults_EditorCascade(struct SetupInfo *si) diff --git a/src/init.c b/src/init.c index 723f8af0..ae154457 100644 --- a/src/init.c +++ b/src/init.c @@ -6316,6 +6316,10 @@ void OpenAll() InitSetup(); +#if 1 + Error(ERR_INFO, "::: MARK 1: setup.fullscreen == %d", setup.fullscreen); +#endif + print_timestamp_time("[init setup/config stuff (1)]"); InitGameInfo(); @@ -6340,6 +6344,10 @@ void OpenAll() print_timestamp_time("[init setup/config stuff]"); +#if 1 + Error(ERR_INFO, "::: MARK 2: setup.fullscreen == %d", setup.fullscreen); +#endif + InitVideoDisplay(); InitVideoBuffer(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH, setup.fullscreen); diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 36bf1ce9..8114d79e 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -3767,7 +3767,7 @@ void NotifyUserAboutErrorFile() #if DEBUG -#define DEBUG_PRINT_INIT_TIMESTAMPS TRUE +#define DEBUG_PRINT_INIT_TIMESTAMPS FALSE #define DEBUG_PRINT_INIT_TIMESTAMPS_DEPTH 10 #define DEBUG_NUM_TIMESTAMPS 10 diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index cdb367fe..fbac7501 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -391,6 +391,7 @@ static SDL_Surface *SDLCreateScreen(DrawBuffer **backbuffer, boolean fullscreen) { SDL_Surface *new_surface = NULL; + static boolean fullscreen_enabled = FALSE; int surface_flags_window = SURFACE_FLAGS; #if defined(TARGET_SDL2) @@ -421,27 +422,50 @@ static SDL_Surface *SDLCreateScreen(DrawBuffer **backbuffer, #endif if ((*backbuffer)->surface) + { SDL_FreeSurface((*backbuffer)->surface); + (*backbuffer)->surface = NULL; + } if (sdl_texture) + { SDL_DestroyTexture(sdl_texture); + sdl_texture = NULL; + } - if (sdl_renderer) - SDL_DestroyRenderer(sdl_renderer); + if (!(fullscreen && fullscreen_enabled)) + { + if (sdl_renderer) + { + SDL_DestroyRenderer(sdl_renderer); + sdl_renderer = NULL; + } - if (sdl_window) - SDL_DestroyWindow(sdl_window); + if (sdl_window) + { + SDL_DestroyWindow(sdl_window); + sdl_window = NULL; + } + } - sdl_window = SDL_CreateWindow(program.window_title, - SDL_WINDOWPOS_CENTERED, - SDL_WINDOWPOS_CENTERED, - (int)(screen_scaling_factor * width), - (int)(screen_scaling_factor * height), - surface_flags); + Error(ERR_INFO, "::: checking 'sdl_window' ..."); + + if (sdl_window == NULL) + Error(ERR_INFO, "::: calling SDL_CreateWindow() [%d, %d, %d] ...", + setup.fullscreen, fullscreen, fullscreen_enabled); + + if (sdl_window == NULL) + sdl_window = SDL_CreateWindow(program.window_title, + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, + (int)(screen_scaling_factor * width), + (int)(screen_scaling_factor * height), + surface_flags); if (sdl_window != NULL) { - sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0); + if (sdl_renderer == NULL) + sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0); if (sdl_renderer != NULL) { @@ -509,6 +533,10 @@ static SDL_Surface *SDLCreateScreen(DrawBuffer **backbuffer, new_surface = SDL_SetVideoMode(width, height, video.depth, surface_flags); #endif + // store fullscreen state ("video.fullscreen_enabled" may not reflect this!) + if (new_surface != NULL) + fullscreen_enabled = fullscreen; + return new_surface; } diff --git a/src/libgame/sdl.h b/src/libgame/sdl.h index 5652613a..244544d8 100644 --- a/src/libgame/sdl.h +++ b/src/libgame/sdl.h @@ -49,7 +49,8 @@ #if defined(PLATFORM_ANDROID) #define WINDOW_SCALING_STATUS WINDOW_SCALING_NOT_AVAILABLE -#define FULLSCREEN_STATUS FULLSCREEN_NOT_AVAILABLE +#define FULLSCREEN_STATUS FULLSCREEN_AVAILABLE +#define USE_DESKTOP_FULLSCREEN TRUE #elif defined(TARGET_SDL2) #define WINDOW_SCALING_STATUS WINDOW_SCALING_AVAILABLE #define FULLSCREEN_STATUS FULLSCREEN_AVAILABLE diff --git a/src/libgame/system.c b/src/libgame/system.c index 39c78b3f..59e5fd61 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -438,6 +438,10 @@ void CloseVideoDisplay(void) void InitVideoBuffer(int width, int height, int depth, boolean fullscreen) { +#if 0 + static boolean initialized = FALSE; +#endif + video.width = width; video.height = height; video.depth = GetRealDepth(depth); @@ -451,6 +455,13 @@ void InitVideoBuffer(int width, int height, int depth, boolean fullscreen) video.window_scaling_available = WINDOW_SCALING_STATUS; +#if 0 +#if defined(PLATFORM_ANDROID) + if (!initialized) + video.fullscreen_enabled = TRUE; +#endif +#endif + #if defined(TARGET_SDL) SDLInitVideoBuffer(&backbuffer, &window, fullscreen); #else @@ -458,6 +469,10 @@ void InitVideoBuffer(int width, int height, int depth, boolean fullscreen) #endif drawto = backbuffer; + +#if 0 + initialized = TRUE; +#endif } inline static void FreeBitmapPointers(Bitmap *bitmap) diff --git a/src/screens.c b/src/screens.c index 720f1574..3c9d2386 100644 --- a/src/screens.c +++ b/src/screens.c @@ -4322,6 +4322,7 @@ static void execSetupGraphics() DrawSetupScreen(); } +#if !defined(PLATFORM_ANDROID) #if defined(TARGET_SDL2) static void execSetupChooseWindowSize() { @@ -4345,6 +4346,7 @@ static void execSetupChooseScreenMode() DrawSetupScreen(); } #endif +#endif static void execSetupChooseScrollDelay() { @@ -4694,6 +4696,7 @@ static struct TokenInfo setup_info_editor[] = static struct TokenInfo setup_info_graphics[] = { +#if !defined(PLATFORM_ANDROID) { TYPE_SWITCH, &setup.fullscreen, "Fullscreen:" }, #if defined(TARGET_SDL2) { TYPE_ENTER_LIST, execSetupChooseWindowSize, "Window Scaling:" }, @@ -4702,6 +4705,7 @@ static struct TokenInfo setup_info_graphics[] = { TYPE_ENTER_LIST, execSetupChooseScreenMode, "Fullscreen Mode:" }, { TYPE_STRING, &screen_mode_text, "" }, #endif +#endif #if 0 { TYPE_SWITCH, &setup.scroll_delay, "Scroll Delay:" }, #endif -- 2.34.1