From cb9ee858bfa53ac79c3f9debc2a095a78cec648a Mon Sep 17 00:00:00 2001 From: pogokeen Date: Mon, 26 Feb 2018 02:48:09 +0000 Subject: [PATCH] menus.cpp: Make windowed-only resolutions clear in both their name and by disabling the fullscreen menu option Additionally, increase MAXRESOLUTIONSTRINGLENGTH to accomodate new resolution name suffix git-svn-id: https://svn.eduke32.com/eduke32@6697 1a8010ca-5511-0410-912e-c29ae57300e0 --- source/duke3d/src/menus.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/source/duke3d/src/menus.cpp b/source/duke3d/src/menus.cpp index f965f496a..5c3d5afa9 100644 --- a/source/duke3d/src/menus.cpp +++ b/source/duke3d/src/menus.cpp @@ -484,7 +484,7 @@ enum resflags_t { RES_WIN = 0x2, }; -#define MAXRESOLUTIONSTRINGLENGTH 16 +#define MAXRESOLUTIONSTRINGLENGTH 19 typedef struct resolution_t { int32_t xdim, ydim; @@ -1750,28 +1750,28 @@ void Menu_Init(void) // prepare video setup for (i = 0; i < validmodecnt; ++i) { - int32_t *const r = &MEOS_VIDEOSETUP_RESOLUTION.numOptions; - - for (j = 0; j < *r; ++j) + for (j = 0; j < MEOS_VIDEOSETUP_RESOLUTION.numOptions; ++j) { if (validmode[i].xdim == resolution[j].xdim && validmode[i].ydim == resolution[j].ydim) { resolution[j].flags |= validmode[i].fs ? RES_FS : RES_WIN; + Bsnprintf(resolution[j].name, MAXRESOLUTIONSTRINGLENGTH, "%d x %d%s", resolution[j].xdim, resolution[j].ydim, resolution[j].flags & RES_FS ? "" : "Win"); + MEOSN_VIDEOSETUP_RESOLUTION[j] = resolution[j].name; if (validmode[i].bpp > resolution[j].bppmax) resolution[j].bppmax = validmode[i].bpp; break; } } - if (j == *r) // no match found + if (j == MEOS_VIDEOSETUP_RESOLUTION.numOptions) // no match found { resolution[j].xdim = validmode[i].xdim; resolution[j].ydim = validmode[i].ydim; resolution[j].bppmax = validmode[i].bpp; resolution[j].flags = validmode[i].fs ? RES_FS : RES_WIN; - Bsnprintf(resolution[j].name, MAXRESOLUTIONSTRINGLENGTH, "%d x %d", resolution[j].xdim, resolution[j].ydim); + Bsnprintf(resolution[j].name, MAXRESOLUTIONSTRINGLENGTH, "%d x %d%s", resolution[j].xdim, resolution[j].ydim, resolution[j].flags & RES_FS ? "" : "Win"); MEOSN_VIDEOSETUP_RESOLUTION[j] = resolution[j].name; - ++*r; + ++MEOS_VIDEOSETUP_RESOLUTION.numOptions; } } @@ -1932,12 +1932,14 @@ static void Menu_Pre(MenuID_t cm) { const int32_t nr = newresolution; + // don't allow setting fullscreen mode if it's not supported by the resolution + MenuEntry_DisableOnCondition(&ME_VIDEOSETUP_FULLSCREEN, !(resolution[nr].flags & RES_FS)); + MenuEntry_DisableOnCondition(&ME_VIDEOSETUP_APPLY, (xdim == resolution[nr].xdim && ydim == resolution[nr].ydim && getrendermode() == newrendermode && fullscreen == newfullscreen && vsync == newvsync ) - || (newfullscreen ? !(resolution[nr].flags & RES_FS) : !(resolution[nr].flags & RES_WIN)) || (newrendermode != REND_CLASSIC && resolution[nr].bppmax <= 8)); break; } @@ -2903,7 +2905,8 @@ static void Menu_EntryLinkActivate(MenuEntry_t *entry) int32_t prend = getrendermode(); int32_t pvsync = vsync; - resolution_t n = { resolution[newresolution].xdim, resolution[newresolution].ydim, newfullscreen, + resolution_t n = { resolution[newresolution].xdim, resolution[newresolution].ydim, + (resolution[newresolution].flags & RES_FS) ? newfullscreen : 0, (newrendermode == REND_CLASSIC) ? 8 : resolution[newresolution].bppmax, 0 }; int32_t nrend = newrendermode; int32_t nvsync = newvsync;