SDL_Surface *new_surface = NULL;
static boolean fullscreen_enabled = FALSE;
- int surface_flags_window = SURFACE_FLAGS;
#if defined(TARGET_SDL2)
-
+ int surface_flags_window = SURFACE_FLAGS | SDL_WINDOW_RESIZABLE;
#if USE_DESKTOP_FULLSCREEN
int surface_flags_fullscreen = SURFACE_FLAGS | SDL_WINDOW_FULLSCREEN_DESKTOP;
#else
#endif
#else
+ int surface_flags_window = SURFACE_FLAGS;
int surface_flags_fullscreen = SURFACE_FLAGS | SDL_FULLSCREEN;
#endif
int surface_flags = (fullscreen ? surface_flags_fullscreen :
surface_flags_window);
+ // default window size is unscaled
+ video.window_width = video.width;
+ video.window_height = video.height;
+
#if defined(TARGET_SDL2)
+ // store if initial screen mode on game start is fullscreen mode
+ if (sdl_window == NULL)
+ {
+#if 0
+ printf("::: GAME STARTS WITH FULLSCREEN %d\n", fullscreen);
+#endif
+
+ video.fullscreen_initial = fullscreen;
+ }
+
#if USE_RENDERER
float window_scaling_factor = (float)setup.window_scaling_percent / 100;
+#if !USE_DESKTOP_FULLSCREEN
float screen_scaling_factor = (fullscreen ? 1 : window_scaling_factor);
+#endif
-#if 1
+ video.window_width = window_scaling_factor * width;
+ video.window_height = window_scaling_factor * height;
+
+#if 0
printf("::: use window scaling factor %f\n", screen_scaling_factor);
#endif
}
}
+#if 0
Error(ERR_INFO, "::: checking 'sdl_window' ...");
if (sdl_window == NULL)
Error(ERR_INFO, "::: calling SDL_CreateWindow() [%d, %d, %d] ...",
setup.fullscreen, fullscreen, fullscreen_enabled);
+#endif
if (sdl_window == NULL)
sdl_window = SDL_CreateWindow(program.window_title,
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
+#if USE_DESKTOP_FULLSCREEN
+ video.window_width,
+ video.window_height,
+#else
(int)(screen_scaling_factor * width),
(int)(screen_scaling_factor * height),
+#endif
surface_flags);
if (sdl_window != NULL)
}
#if defined(TARGET_SDL2)
- UpdateScreen(NULL); // map window
+ SDLRedrawWindow(); // map window
+ // UpdateScreen(NULL); // map window
#endif
#if 1
return success;
}
+#if defined(TARGET_SDL2)
+void SDLSetWindowScaling(int window_scaling_percent)
+{
+ if (sdl_window == NULL)
+ return;
+
+ float window_scaling_factor = (float)window_scaling_percent / 100;
+ int new_window_width = (int)(window_scaling_factor * video.width);
+ int new_window_height = (int)(window_scaling_factor * video.height);
+
+#if 0
+ Error(ERR_DEBUG, "::: SDLSetWindowScaling(%d) ...", window_scaling_percent);
+#endif
+
+ SDL_SetWindowSize(sdl_window, new_window_width, new_window_height);
+
+ video.window_scaling_percent = window_scaling_percent;
+ video.window_width = new_window_width;
+ video.window_height = new_window_height;
+}
+
+void SDLSetWindowFullscreen(boolean fullscreen)
+{
+ if (sdl_window == NULL)
+ return;
+
+#if USE_DESKTOP_FULLSCREEN
+ int flags = (fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
+#else
+ int flags = (fullscreen ? SDL_WINDOW_FULLSCREEN : 0);
+#endif
+
+#if 0
+ Error(ERR_DEBUG, "::: SDL_SetWindowFullscreen(%d) ...", fullscreen);
+#endif
+
+ if (SDL_SetWindowFullscreen(sdl_window, flags) == 0)
+ video.fullscreen_enabled = fullscreen;
+
+#if 0
+ printf("::: SDLSetWindowFullscreen: %d, %d\n",
+ fullscreen, video.fullscreen_initial);
+#endif
+
+#if 1
+ // if game started in fullscreen mode, window will also get fullscreen size
+ if (!fullscreen && video.fullscreen_initial)
+ {
+ SDLSetWindowScaling(setup.window_scaling_percent);
+ SDL_SetWindowPosition(sdl_window,
+ SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
+
+ video.fullscreen_initial = FALSE;
+ }
+#endif
+}
+
+void SDLRedrawWindow()
+{
+ UpdateScreen(NULL);
+}
+#endif
+
void SDLCreateBitmapContent(Bitmap *new_bitmap, int width, int height,
int depth)
{