From 0cfc75070d92fa9e636a0e970c813d7d25bf1e11 Mon Sep 17 00:00:00 2001 From: spherallic Date: Fri, 4 Feb 2022 14:42:10 +0100 Subject: [PATCH] Improved support for separate resolutions: - Windowed mode resolution can now be changed via the resolutions menu. - F11 can also be used while in this menu. - Removed usewindowedres cvar for ease of use. - When starting in windowed mode, use the correct resolution. --- src/d_netcmd.c | 2 -- src/m_menu.c | 16 ++++++++++++---- src/screen.c | 35 +++++++++++++++++++++++------------ src/screen.h | 4 ++-- 4 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 4ad6c8c51..eda70a170 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -871,8 +871,6 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_scr_depth); CV_RegisterVar(&cv_scr_width); CV_RegisterVar(&cv_scr_height); - - CV_RegisterVar(&cv_usewindowedres); CV_RegisterVar(&cv_scr_width_w); CV_RegisterVar(&cv_scr_height_w); diff --git a/src/m_menu.c b/src/m_menu.c index 7d4e4b8ae..f07dffe5c 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1337,13 +1337,13 @@ static menuitem_t OP_VideoOptionsMenu[] = {IT_STRING | IT_CALL, NULL, "Set Resolution...", M_VideoModeMenu, 6}, #if defined (__unix__) || defined (UNIXCOMMON) || defined (HAVE_SDL) - {IT_STRING|IT_CVAR, NULL, "Fullscreen", &cv_fullscreen, 11}, + {IT_STRING|IT_CVAR, NULL, "Fullscreen (F11)", &cv_fullscreen, 11}, #endif {IT_STRING | IT_CVAR, NULL, "Vertical Sync", &cv_vidwait, 16}, #ifdef HWRENDER {IT_STRING | IT_CVAR, NULL, "Renderer", &cv_renderer, 21}, #else - {IT_TRANSTEXT | IT_PAIR, "Renderer", "Software", &cv_renderer, 21}, + {IT_TRANSTEXT | IT_PAIR, "Renderer", "Software", &cv_renderer, 21}, #endif {IT_HEADER, NULL, "Color Profile", NULL, 30}, @@ -13217,14 +13217,18 @@ static void M_DrawVideoMode(void) } else { - M_CentreText(OP_VideoModeDef.y + 116, + M_CentreText(OP_VideoModeDef.y + 100, va("Current mode is %c%dx%d", (SCR_IsAspectCorrect(vid.width, vid.height)) ? 0x83 : 0x80, vid.width, vid.height)); - M_CentreText(OP_VideoModeDef.y + 124, + M_CentreText(OP_VideoModeDef.y + 116, va("Default mode is %c%dx%d", (SCR_IsAspectCorrect(cv_scr_width.value, cv_scr_height.value)) ? 0x83 : 0x80, cv_scr_width.value, cv_scr_height.value)); + M_CentreText(OP_VideoModeDef.y + 124, + va("Windowed mode is %c%dx%d", + (SCR_IsAspectCorrect(cv_scr_width_w.value, cv_scr_height_w.value)) ? 0x83 : 0x80, + cv_scr_width_w.value, cv_scr_height_w.value)); V_DrawCenteredString(BASEVIDWIDTH/2, OP_VideoModeDef.y + 138, V_GREENMAP, "Green modes are recommended."); @@ -13438,6 +13442,10 @@ static void M_HandleVideoMode(INT32 ch) M_ClearMenus(true); break; + case KEY_F11: + CV_SetValue(&cv_fullscreen, !cv_fullscreen.value); + break; + default: break; } diff --git a/src/screen.c b/src/screen.c index 19e6bf1bd..96e436193 100644 --- a/src/screen.c +++ b/src/screen.c @@ -66,12 +66,10 @@ static CV_PossibleValue_t scr_depth_cons_t[] = {{8, "8 bits"}, {16, "16 bits"}, //added : 03-02-98: default screen mode, as loaded/saved in config consvar_t cv_scr_width = CVAR_INIT ("scr_width", "1280", CV_SAVE, CV_Unsigned, NULL); consvar_t cv_scr_height = CVAR_INIT ("scr_height", "800", CV_SAVE, CV_Unsigned, NULL); -consvar_t cv_scr_depth = CVAR_INIT ("scr_depth", "16 bits", CV_SAVE, scr_depth_cons_t, NULL); -consvar_t cv_renderview = CVAR_INIT ("renderview", "On", 0, CV_OnOff, NULL); - -consvar_t cv_usewindowedres = CVAR_INIT ("usewindowedres", "No", CV_SAVE, CV_YesNo, NULL); consvar_t cv_scr_width_w = CVAR_INIT ("scr_width_w", "640", CV_SAVE, CV_Unsigned, NULL); consvar_t cv_scr_height_w = CVAR_INIT ("scr_height_w", "400", CV_SAVE, CV_Unsigned, NULL); +consvar_t cv_scr_depth = CVAR_INIT ("scr_depth", "16 bits", CV_SAVE, scr_depth_cons_t, NULL); +consvar_t cv_renderview = CVAR_INIT ("renderview", "On", 0, CV_OnOff, NULL); CV_PossibleValue_t cv_renderer_t[] = { {1, "Software"}, @@ -370,10 +368,16 @@ void SCR_CheckDefaultMode(void) } else { - CONS_Printf(M_GetText("Default resolution: %d x %d (%d bits)\n"), cv_scr_width.value, - cv_scr_height.value, cv_scr_depth.value); - // see note above - setmodeneeded = VID_GetModeForSize(cv_scr_width.value, cv_scr_height.value) + 1; + if (cv_fullscreen.value == 0) + { + CONS_Printf(M_GetText("Default windowed resolution: %d x %d (%d bits)\n"), cv_scr_width_w.value, cv_scr_height_w.value, cv_scr_depth.value); + setmodeneeded = VID_GetModeForSize(cv_scr_width_w.value, cv_scr_height_w.value) + 1; // see note above + } + else + { + CONS_Printf(M_GetText("Default resolution: %d x %d (%d bits)\n"), cv_scr_width.value, cv_scr_height.value, cv_scr_depth.value); + setmodeneeded = VID_GetModeForSize(cv_scr_width.value, cv_scr_height.value) + 1; // see note above + } } if (cv_renderer.value != (signed)rendermode) @@ -392,9 +396,16 @@ void SCR_CheckDefaultMode(void) void SCR_SetDefaultMode(void) { // remember the default screen size - CV_SetValue(&cv_scr_width, vid.width); - CV_SetValue(&cv_scr_height, vid.height); - CV_SetValue(&cv_scr_depth, vid.bpp*8); + if (cv_fullscreen.value == 0) + { + CV_SetValue(&cv_scr_width_w, vid.width); + CV_SetValue(&cv_scr_height_w, vid.height); + } + else + { + CV_SetValue(&cv_scr_width, vid.width); + CV_SetValue(&cv_scr_height, vid.height); + } } // Change fullscreen on/off according to cv_fullscreen @@ -409,7 +420,7 @@ void SCR_ChangeFullscreen(void) if (graphics_started) { VID_PrepareModeList(); - if (cv_usewindowedres.value == 1 && cv_fullscreen.value == 0) + if (cv_fullscreen.value == 0) setmodeneeded = VID_GetModeForSize(cv_scr_width_w.value, cv_scr_height_w.value) + 1; else setmodeneeded = VID_GetModeForSize(cv_scr_width.value, cv_scr_height.value) + 1; diff --git a/src/screen.h b/src/screen.h index 3077973d2..30582793f 100644 --- a/src/screen.h +++ b/src/screen.h @@ -189,8 +189,8 @@ extern CV_PossibleValue_t cv_renderer_t[]; extern INT32 scr_bpp; extern UINT8 *scr_borderpatch; // patch used to fill the view borders -extern consvar_t cv_scr_width, cv_scr_height, cv_scr_depth, cv_renderview, cv_renderer, cv_fullscreen; -extern consvar_t cv_scr_width_w, cv_scr_height_w, cv_usewindowedres; +extern consvar_t cv_scr_width, cv_scr_height, cv_scr_width_w, cv_scr_height_w, cv_scr_depth, cv_fullscreen; +extern consvar_t cv_renderview, cv_renderer; // wait for page flipping to end or not extern consvar_t cv_vidwait;