From eb4af059cb588ef8fc403134c90477cdad91ec74 Mon Sep 17 00:00:00 2001 From: Spoike Date: Mon, 21 Jun 2021 13:44:28 +0000 Subject: [PATCH] Make the presets menu behave better. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5895 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/m_items.c | 4 ++- engine/client/m_options.c | 51 ++++++++++++++++++++++++--------------- engine/client/menu.c | 6 +++++ 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/engine/client/m_items.c b/engine/client/m_items.c index 0226be0b6..843c0fc07 100644 --- a/engine/client/m_items.c +++ b/engine/client/m_items.c @@ -2602,8 +2602,10 @@ int MC_AddBulk(struct emenu_s *menu, menuresel_t *resel, menubulk_t *bulk, int x if (bulk->ret) *bulk->ret = control; if (control) + { control->common.grav_y = y-last_y; - last_y = y; + last_y = y; + } if (control && MI_Selectable(control) && !selected) selected = control; if (control && bulk->tooltip) diff --git a/engine/client/m_options.c b/engine/client/m_options.c index 9704c23ae..57de8223a 100644 --- a/engine/client/m_options.c +++ b/engine/client/m_options.c @@ -1201,14 +1201,30 @@ static int M_Menu_Preset_GetActive(void) return 0; //simple } +static int M_Menu_ApplyGravity(menuoption_t *op) +{ //menu is bottom-up, so we return the y pos of its parent... + if (!op) + return 0; + + if (op->common.ishidden) + return M_Menu_ApplyGravity(op->common.next); + + if (op->common.grav_y) + op->common.posy = M_Menu_ApplyGravity(op->common.next)+op->common.grav_y; + else //not moving this one, but make sure others move properly. + M_Menu_ApplyGravity(op->common.next); + + return op->common.posy; +} static void M_Menu_Preset_Predraw(emenu_t *menu) { extern cvar_t m_preset_chosen; - int last_y; - menuoption_t *op, *prev; + menuoption_t *op; int preset = M_Menu_Preset_GetActive(); int i; qboolean forcereload = false; + qboolean filtering = false; + extern cvar_t cfg_save_auto; #ifdef RTLIGHTS preset = 6-preset; @@ -1218,12 +1234,6 @@ static void M_Menu_Preset_Predraw(emenu_t *menu) for (op = menu->options; op; op = op->common.next) { - prev = op->common.next; - while (prev && prev->common.ishidden) - { //this uglyness is because the menu items are added bottom-up. - prev = prev->common.next; //erk... - } - last_y = prev?prev->common.posy:0; if (op->common.type == mt_button) { if (!strcmp(op->button.command, "menupop\n")) @@ -1237,6 +1247,11 @@ static void M_Menu_Preset_Predraw(emenu_t *menu) preset--; } } + else if (!filtering) + { + if (op->check.var == &cfg_save_auto) + filtering = true; + } else if(op->common.type == mt_checkbox|| op->common.type == mt_slider|| op->common.type == mt_combo) op->common.ishidden = preset!=0; @@ -1258,10 +1273,9 @@ static void M_Menu_Preset_Predraw(emenu_t *menu) if (op->combo.cvar->latched_string && (op->combo.cvar->flags&CVAR_LATCHMASK) == CVAR_RENDERERLATCH) forcereload = true; } - - if (op->common.grav_y) - op->common.posy = last_y+op->common.grav_y; } + M_Menu_ApplyGravity(menu->options); + menu->cursoritem->common.posy = menu->selecteditem->common.posy; //make sure it shows the right place still if (forcereload) Cbuf_InsertText("\nfs_restart\nvid_reload\n", RESTRICT_LOCAL, true); @@ -1307,8 +1321,11 @@ void M_Menu_Preset_f (void) #endif MB_SPACING(16), MB_CHECKBOXCVARTIP("Auto-save Settings", cfg_save_auto, 1, "If this is disabled, you will need to explicitly save your settings."), +#if defined(WEBCLIENT) && defined(PACKAGEMANAGER) + MB_CONSOLECMD("Updates", "menu_download\n", "Configure sources and packages."), +#endif MB_SPACING(16), - MB_CONSOLECMD("Accept", "menupop\n", NULL), + MB_CONSOLECMD("Accept", "menupop\n", "Continue with selected settings."), MB_END() }; static menuresel_t resel; @@ -1580,7 +1597,7 @@ void M_Menu_Render_f (void) MB_CHECKBOXCVAR("Bloom", r_bloom, 0), #endif MB_CHECKBOXCVARTIP("HDR", r_hdr_irisadaptation, 0, "Adjust scene brightness to compensate for lighting levels."), - MB_CHECKBOXCVARTIP("Temporal Scene Cache", r_temporalscenecache, 0, "Cache scene data to optimise complex scenes or unvised maps."), + MB_CHECKBOXCVARTIP("Temporal Scene Cache", r_temporalscenecache, 0, "Cache scene data to significantly optimise highly complex scenes or unvised maps.\n"CON_WARNING"Unfortunately this is incompatible with certain techniques, so may need to be disabled for compat with legacy content."), MB_END() }; menu = M_Options_Title(&y, 0); @@ -1745,9 +1762,6 @@ qboolean M_VideoApplyShadowLighting (union menuoption_s *op,struct emenu_s *menu cvarsrds = "1"; break; case 4: - cvard = "-1"; - break; - case 5: cvard = "1"; cvarvd = "1"; break; @@ -1811,7 +1825,6 @@ void M_Menu_Lighting_f (void) #ifdef RTLIGHTS "Realtime", "RT+Shadows", - "Threaded Lightmaps", #ifndef MINIMAL "Vertex", #endif @@ -1937,11 +1950,9 @@ void M_Menu_Lighting_f (void) else dlightselect = 2; } - else if (r_dynamic.ival < 0) - dlightselect = 4; #ifndef MINIMAL else if (r_vertexdlights.ival) - dlightselect = 5; + dlightselect = 4; #endif else #endif diff --git a/engine/client/menu.c b/engine/client/menu.c index f480a5428..0bace0c60 100644 --- a/engine/client/menu.c +++ b/engine/client/menu.c @@ -454,9 +454,12 @@ static qboolean Prompt_MenuKeyEvent(struct menu_s *gm, qboolean isdown, unsigned action = PROMPT_YES; else if (key==K_RIGHTARROW || key==K_GP_DPAD_RIGHT || key==K_DOWNARROW || key==K_GP_DPAD_DOWN || (key == K_TAB && !keydown[K_LSHIFT] && !keydown[K_RSHIFT])) { + int start = m->kbutton; for(;;) { m->kbutton++; + if (start == m->kbutton) + break; if (m->kbutton >= 3) m->kbutton -= 3; if (m->buttons[m->kbutton]) @@ -466,9 +469,12 @@ static qboolean Prompt_MenuKeyEvent(struct menu_s *gm, qboolean isdown, unsigned } else if (key == K_LEFTARROW || key == K_GP_DPAD_LEFT || key==K_UPARROW || key==K_GP_DPAD_UP || key==K_TAB) { + int start = m->kbutton; for(;;) { m->kbutton--; + if (start == m->kbutton) + break; if (m->kbutton < 0) m->kbutton += 3; if (m->buttons[m->kbutton])