From dffb12efb0d26fe694dc1b75fda5a76c1df9ef84 Mon Sep 17 00:00:00 2001 From: SNMetamorph <25657591+SNMetamorph@users.noreply.github.com> Date: Mon, 1 Feb 2021 02:37:06 +0400 Subject: [PATCH] VideoModes: fixed bug with selection of screen resolution & windowed mode --- .gitignore | 1 + menus/VideoModes.cpp | 26 ++++++++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 7bcf9a63..f745dc97 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ ipch/ __pycache__ temp.txt nonfree_translations +/.vs diff --git a/menus/VideoModes.cpp b/menus/VideoModes.cpp index e496c093..d82acfc1 100644 --- a/menus/VideoModes.cpp +++ b/menus/VideoModes.cpp @@ -211,19 +211,29 @@ UI_VidModes_SetConfig void CMenuVidModes::SetConfig( ) { bool testMode = false; - if( prevMode != vidList.GetCurrentIndex() - VID_MODES_POS ) + int currentModeIndex = vidList.GetCurrentIndex() - VID_MODES_POS; + bool isVidModeChanged = prevMode != currentModeIndex; + bool isWindowedModeChanged = prevFullscreen != !windowed.bChecked; + + /* + checking windowed mode first because it'll be checked next in + screen resolution changing code, otherwise when user try to + change screen resolution and windowed flag at same time, + only resolution will be changed. + */ + if( isWindowedModeChanged ) { - SetMode( vidList.GetCurrentIndex( ) - VID_MODES_POS ); - - // have changed resolution, but enable test mode only in fullscreen + EngFuncs::CvarSetValue( "fullscreen", !windowed.bChecked ); + // moved to fullscreen, enable test mode testMode |= !windowed.bChecked; } - if( prevFullscreen == windowed.bChecked ) + if( isVidModeChanged ) { - EngFuncs::CvarSetValue( "fullscreen", !windowed.bChecked ); - - // moved to fullscreen, enable test mode + SetMode( currentModeIndex ); + EngFuncs::CvarSetValue( "vid_mode", currentModeIndex ); + vidList.SetCurrentIndex( currentModeIndex + VID_MODES_POS ); + // have changed resolution, but enable test mode only in fullscreen testMode |= !windowed.bChecked; }