// new proc by S.A., called by alt-return key binding. void VID_Toggle (void) { static qboolean vid_toggle_works = true; S_ClearBuffer (); if (!vid_toggle_works) goto vrestart; if (SDL_WM_ToggleFullScreen(draw_context) == 1) { Sbar_Changed (); // Sbar seems to need refreshing modestate = draw_context->flags & SDL_FULLSCREEN ? MS_FULLSCREEN : MS_WINDOWED; VID_SyncCvars(); // update mouse grab if (key_dest == key_console || key_dest == key_menu) { if (modestate == MS_WINDOWED) IN_Deactivate(true); else if (modestate == MS_FULLSCREEN) IN_Activate(); } } else { vid_toggle_works = false; Con_DPrintf ("SDL_WM_ToggleFullScreen failed, attempting VID_Restart\n"); vrestart: Cvar_SetQuick (&vid_fullscreen, draw_context-> flags & SDL_FULLSCREEN ? "0" : "1"); Cbuf_AddText ("vid_restart\n"); } }
/* ================ VID_Menu_f ================ */ static void VID_Menu_f (void) { IN_Deactivate(modestate == MS_WINDOWED); key_dest = key_menu; m_state = m_video; m_entersound = true; //set all the cvars to match the current mode when entering the menu VID_SyncCvars (); //set up bpp and rate lists based on current cvars VID_Menu_RebuildBppList (); }
/* =============== Host_WriteConfiguration Writes key bindings and archived cvars to config.cfg =============== */ void Host_WriteConfiguration (void) { FILE *f; // dedicated servers initialize the host but don't parse and set the // config.cfg cvars if (host_initialized & !isDedicated) { f = fopen (va("%s/config.cfg", com_gamedir), "w"); if (!f) { Con_Printf ("Couldn't write config.cfg.\n"); return; } VID_SyncCvars (); //johnfitz -- write actual current mode to config file, in case cvars were messed with Key_WriteBindings (f); Cvar_WriteVariables (f); //johnfitz -- extra commands to preserve state fprintf (f, "vid_restart\n"); if (in_mlook.state & 1) fprintf (f, "+mlook\n"); //johnfitz fclose (f); //johnfitz -- also save fitzquake.rc #if 0 f = fopen (va("%s/fitzquake.rc", GAMENAME), "w"); //always save in id1 if (!f) { Con_Printf ("Couldn't write fitzquake.rc.\n"); return; } Cvar_WriteVariables (f); fprintf (f, "vid_restart\n"); if (in_mlook.state & 1) fprintf (f, "+mlook\n"); fclose (f); #endif //johnfitz } }
static void VR_MenuKey(int key) { switch ( key ) { case K_ESCAPE: VID_SyncCvars(); // sync cvars before leaving menu. FIXME: there are other ways to leave menu S_LocalSound( "misc/menu1.wav" ); M_Menu_Options_f(); break; case K_UPARROW: S_LocalSound( "misc/menu1.wav" ); vr_options_cursor--; if ( vr_options_cursor < 0 ) { vr_options_cursor = VR_OPTION_MAX - 1; } break; case K_DOWNARROW: S_LocalSound( "misc/menu1.wav" ); vr_options_cursor++; if ( vr_options_cursor >= VR_OPTION_MAX ) { vr_options_cursor = 0; } break; case K_LEFTARROW: S_LocalSound ("misc/menu3.wav"); VR_MenuKeyOption( key, vr_options_cursor ); break; case K_RIGHTARROW: S_LocalSound ("misc/menu3.wav"); VR_MenuKeyOption( key, vr_options_cursor ); break; case K_ENTER: m_entersound = true; VR_MenuKeyOption( key, vr_options_cursor ); break; default: break; } }
/* ================ VID_Unlock -- johnfitz ================ */ static void VID_Unlock (void) { vid_locked = false; VID_SyncCvars(); }
/* =================== VID_Restart -- johnfitz -- change video modes on the fly =================== */ static void VID_Restart (void) { int width, height, bpp; qboolean fullscreen; if (vid_locked || !vid_changed) return; if (r_oculusrift.value) { // phoboslab R_ReleaseHMDRenderer(); } width = (int)vid_width.value; height = (int)vid_height.value; bpp = (int)vid_bpp.value; fullscreen = vid_fullscreen.value ? true : false; // // validate new mode // if (!VID_ValidMode (width, height, bpp, fullscreen)) { Con_Printf ("%dx%dx%d %s is not a valid mode\n", width, height, bpp, fullscreen? "fullscreen" : "windowed"); return; } // // set new mode // VID_SetMode (width, height, bpp, fullscreen); GL_Init (); TexMgr_ReloadImages (); GL_SetupState (); //warpimages needs to be recalculated TexMgr_RecalcWarpImageSize (); //conwidth and conheight need to be recalculated vid.conwidth = (scr_conwidth.value > 0) ? (int)scr_conwidth.value : (scr_conscale.value > 0) ? (int)(vid.width/scr_conscale.value) : vid.width; vid.conwidth = CLAMP (320, vid.conwidth, vid.width); vid.conwidth &= 0xFFFFFFF8; vid.conheight = vid.conwidth * vid.height / vid.width; // // keep cvars in line with actual mode // VID_SyncCvars(); // // update mouse grab // if (key_dest == key_console || key_dest == key_menu) { if (modestate == MS_WINDOWED) IN_Deactivate(true); else if (modestate == MS_FULLSCREEN) IN_Activate(); } if (r_oculusrift.value) { // phoboslab R_InitHMDRenderer(); } }
/* ================ VID_MenuKey ================ */ static void VID_MenuKey (int key) { switch (key) { case K_ESCAPE: VID_SyncCvars (); //sync cvars before leaving menu. FIXME: there are other ways to leave menu S_LocalSound ("misc/menu1.wav"); M_Menu_Options_f (); break; case K_UPARROW: S_LocalSound ("misc/menu1.wav"); video_options_cursor--; if (video_options_cursor < 0) video_options_cursor = VIDEO_OPTIONS_ITEMS-1; break; case K_DOWNARROW: S_LocalSound ("misc/menu1.wav"); video_options_cursor++; if (video_options_cursor >= VIDEO_OPTIONS_ITEMS) video_options_cursor = 0; break; case K_LEFTARROW: S_LocalSound ("misc/menu3.wav"); switch (video_options_cursor) { case VID_OPT_MODE: VID_Menu_ChooseNextMode (1); break; case VID_OPT_BPP: VID_Menu_ChooseNextBpp (1); break; case VID_OPT_FULLSCREEN: Cbuf_AddText ("toggle vid_fullscreen\n"); break; case VID_OPT_VSYNC: Cbuf_AddText ("toggle vid_vsync\n"); // kristian break; default: break; } break; case K_RIGHTARROW: S_LocalSound ("misc/menu3.wav"); switch (video_options_cursor) { case VID_OPT_MODE: VID_Menu_ChooseNextMode (-1); break; case VID_OPT_BPP: VID_Menu_ChooseNextBpp (-1); break; case VID_OPT_FULLSCREEN: Cbuf_AddText ("toggle vid_fullscreen\n"); break; case VID_OPT_VSYNC: Cbuf_AddText ("toggle vid_vsync\n"); break; default: break; } break; case K_ENTER: m_entersound = true; switch (video_options_cursor) { case VID_OPT_MODE: VID_Menu_ChooseNextMode (1); break; case VID_OPT_BPP: VID_Menu_ChooseNextBpp (1); break; case VID_OPT_FULLSCREEN: Cbuf_AddText ("toggle vid_fullscreen\n"); break; case VID_OPT_VSYNC: Cbuf_AddText ("toggle vid_vsync\n"); break; case VID_OPT_TEST: Cbuf_AddText ("vid_test\n"); break; case VID_OPT_APPLY: Cbuf_AddText ("vid_restart\n"); key_dest = key_game; m_state = m_none; IN_Activate(); break; default: break; } break; default: break; } }