From: kub Date: Sat, 15 Feb 2025 16:24:00 +0000 (+0100) Subject: add forced window resizing X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=023d7e890f1c4386ff3bc095efd96eb65fafe389;p=libpicofe.git add forced window resizing --- diff --git a/plat_sdl.c b/plat_sdl.c index 2c983d7..49191e9 100644 --- a/plat_sdl.c +++ b/plat_sdl.c @@ -78,6 +78,40 @@ int plat_sdl_change_video_mode(int w, int h, int force) plat_sdl_gl_active = 0; } + if (plat_target.vout_method == 0 || + (force && window_w != w && window_h != h)) { + Uint32 flags; + int win_w = w; + int win_h = h; + +#if defined SDL_SURFACE_SW + flags = SDL_SWSURFACE; +#elif defined(SDL_TRIPLEBUF) && defined(SDL_BUFFER_3X) + flags = SDL_HWSURFACE | SDL_TRIPLEBUF; +#else + flags = SDL_HWSURFACE | SDL_DOUBLEBUF; +#endif + if (plat_target.vout_fullscreen && fs_w && fs_h) { + flags |= SDL_FULLSCREEN; + win_w = fs_w; + win_h = fs_h; + } else if (window_b) + flags |= SDL_RESIZABLE; + + SDL_PumpEvents(); + + if (!plat_sdl_screen || screen_flags != flags || + plat_sdl_screen->w != win_w || plat_sdl_screen->h != win_h) + plat_sdl_screen = SDL_SetVideoMode(win_w, win_h, 16, flags); + screen_flags = flags; + window_w = win_w; + window_h = win_h; + if (plat_sdl_screen == NULL) { + fprintf(stderr, "SDL_SetVideoMode failed: %s\n", SDL_GetError()); + return -1; + } + } + if (plat_target.vout_method != 0) { Uint32 flags = SDL_RESIZABLE | SDL_SWSURFACE; int win_w = window_w; @@ -129,39 +163,6 @@ int plat_sdl_change_video_mode(int w, int h, int force) } } - if (plat_target.vout_method == 0) { - Uint32 flags; - int win_w = w; - int win_h = h; - -#if defined SDL_SURFACE_SW - flags = SDL_SWSURFACE; -#elif defined(SDL_TRIPLEBUF) && defined(SDL_BUFFER_3X) - flags = SDL_HWSURFACE | SDL_TRIPLEBUF; -#else - flags = SDL_HWSURFACE | SDL_DOUBLEBUF; -#endif - if (plat_target.vout_fullscreen && fs_w && fs_h) { - flags |= SDL_FULLSCREEN; - win_w = fs_w; - win_h = fs_h; - } else if (window_b) - flags |= SDL_RESIZABLE; - - SDL_PumpEvents(); - - if (!plat_sdl_screen || screen_flags != flags || - plat_sdl_screen->w != win_w || plat_sdl_screen->h != win_h) - plat_sdl_screen = SDL_SetVideoMode(win_w, win_h, 16, flags); - screen_flags = flags; - window_w = win_w; - window_h = win_h; - if (plat_sdl_screen == NULL) { - fprintf(stderr, "SDL_SetVideoMode failed: %s\n", SDL_GetError()); - return -1; - } - } - old_fullscreen = plat_target.vout_fullscreen; if (plat_sdl_resize_cb != NULL) plat_sdl_resize_cb(plat_sdl_screen->w, plat_sdl_screen->h);