diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c index 8c84186efc0dfb1e8fea1df9afa66e66904793ea..412f31f88b69e32563f0063f9c13f7ebfa4a85d2 100644 --- a/src/conio/sdl_con.c +++ b/src/conio/sdl_con.c @@ -663,8 +663,25 @@ static void sdl_add_key(unsigned int keyval, struct video_stats *vs) if(keyval==0xa600 && vs != NULL) { fullscreen=!fullscreen; cio_api.mode=fullscreen?CIOLIB_MODE_SDL_FULLSCREEN:CIOLIB_MODE_SDL; - sdl.SetWindowFullscreen(win, fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); update_cvstat(vs); + sdl.SetWindowFullscreen(win, fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); + if (!fullscreen) { + int w, h; + + // Get current window size + sdl.GetWindowSize(win, &w, &h); + // Limit to max window size if available + SDL_Rect r; + if (sdl.GetDisplayUsableBounds(0, &r) == 0) { + if (w > r.w) + w = r.w; + if (h > r.h) + h = r.h; + } + // Set size based on current max + vs->scaling = bitmap_double_mult_inside(w, h); + bitmap_get_scaled_win_size(vs->scaling, &vs->winwidth, &vs->winheight, w, h); + } setup_surfaces(vs); return; }