1 /*
2 Copyright (C) 1997-2001 Id Software, Inc.
3 
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 
13 See the GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 */
19 
20 //
21 // m_vid_settings.c
22 //
23 
24 #include "m_local.h"
25 
26 #define REF_OPENGL	0
27 #define REF_3DFX	1
28 #define REF_POWERVR	2
29 #define REF_VERITE	3
30 
31 /*
32 ====================================================================
33 
34 	VIDEO SETTINGS MENU
35 
36 ====================================================================
37 */
38 
39 typedef struct m_vidSettingsMenu_s {
40 	// Menu items
41 	uiFrameWork_t		frameWork;
42 
43 	uiImage_t			banner;
44 	uiAction_t			header;
45 
46 	uiList_t			ref_list;
47 	uiList_t			mode_list;
48 
49 	uiList_t			tm_list;
50 	uiList_t			bitd_list;
51 	uiList_t			stencilbuf_list;
52 	uiList_t			dispfreq_list;
53 
54 	uiList_t			fullscreen_toggle;
55 	uiSlider_t			screensize_slider;
56 	uiAction_t			screensize_amount;
57 	uiSlider_t			brightness_slider;
58 	uiAction_t			brightness_amount;
59 	uiList_t			gammapics_toggle;
60 
61 	uiSlider_t			texqual_slider;
62 	uiAction_t			texqual_amount;
63 
64 	uiList_t			finish_toggle;
65 
66 	uiAction_t			apply_action;
67 	uiAction_t			reset_action;
68 	uiAction_t			cancel_action;
69 } m_vidSettingsMenu_t;
70 
71 static m_vidSettingsMenu_t	m_vidSettingsMenu;
72 
73 static void VIDSettingsMenu_Init (void);
ResetDefaults(void * unused)74 static void ResetDefaults (void *unused) {
75 	VIDSettingsMenu_Init ();
76 }
77 
CancelChanges(void * unused)78 static void CancelChanges (void *unused) {
79 	M_PopMenu ();
80 }
81 
82 
83 /*
84 ================
85 VIDSettingsMenu_ApplyValues
86 ================
87 */
VIDSettingsMenu_ApplyValues(void * unused)88 static void VIDSettingsMenu_ApplyValues (void *unused)
89 {
90 	float	gamma;
91 
92 	switch (m_vidSettingsMenu.ref_list.curValue) {
93 	case REF_OPENGL:		cgi.Cvar_Set ("gl_driver", GL_DRIVERNAME, qTrue);	break;
94 	case REF_3DFX:			cgi.Cvar_Set ("gl_driver", "3dfxgl", qTrue);		break;
95 	case REF_POWERVR:		cgi.Cvar_Set ("gl_driver", "pvrgl", qTrue);			break;
96 	case REF_VERITE:		cgi.Cvar_Set ("gl_driver", "veritegl", qTrue);		break;
97 	}
98 
99 	if (m_vidSettingsMenu.mode_list.curValue != 0) {
100 		cgi.Cvar_SetValue ("gl_mode",			m_vidSettingsMenu.mode_list.curValue-1, qTrue);
101 		cgi.Cvar_SetValue ("vid_width",			0, qTrue);
102 		cgi.Cvar_SetValue ("vid_height",		0, qTrue);
103 	}
104 
105 	if (m_vidSettingsMenu.tm_list.curValue == 1)		cgi.Cvar_Set ("gl_texturemode", "GL_LINEAR_MIPMAP_LINEAR", qTrue);
106 	else if (m_vidSettingsMenu.tm_list.curValue == 0)	cgi.Cvar_Set ("gl_texturemode", "GL_LINEAR_MIPMAP_NEAREST", qTrue);
107 
108 	if (m_vidSettingsMenu.bitd_list.curValue == 0)		cgi.Cvar_Set ("gl_bitdepth", "0", qTrue);
109 	else if (m_vidSettingsMenu.bitd_list.curValue == 1)	cgi.Cvar_Set ("gl_bitdepth", "16", qTrue);
110 	else if (m_vidSettingsMenu.bitd_list.curValue == 2)	cgi.Cvar_Set ("gl_bitdepth", "32", qTrue);
111 
112 	cgi.Cvar_SetValue ("gl_stencilbuffer",		m_vidSettingsMenu.stencilbuf_list.curValue, qTrue);
113 
114 	if (m_vidSettingsMenu.dispfreq_list.curValue == 1)			cgi.Cvar_Set ("r_displayFreq", "60", qTrue);
115 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 2)		cgi.Cvar_Set ("r_displayFreq", "65", qTrue);
116 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 3)		cgi.Cvar_Set ("r_displayFreq", "70", qTrue);
117 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 4)		cgi.Cvar_Set ("r_displayFreq", "75", qTrue);
118 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 5)		cgi.Cvar_Set ("r_displayFreq", "80", qTrue);
119 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 6)		cgi.Cvar_Set ("r_displayFreq", "85", qTrue);
120 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 7)		cgi.Cvar_Set ("r_displayFreq", "90", qTrue);
121 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 8)		cgi.Cvar_Set ("r_displayFreq", "95", qTrue);
122 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 9)		cgi.Cvar_Set ("r_displayFreq", "100", qTrue);
123 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 10)	cgi.Cvar_Set ("r_displayFreq", "105", qTrue);
124 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 11)	cgi.Cvar_Set ("r_displayFreq", "110", qTrue);
125 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 12)	cgi.Cvar_Set ("r_displayFreq", "115", qTrue);
126 	else if (m_vidSettingsMenu.dispfreq_list.curValue == 13)	cgi.Cvar_Set ("r_displayFreq", "120", qTrue);
127 	else														cgi.Cvar_Set ("r_displayFreq", "0", qTrue);
128 
129 	cgi.Cvar_SetValue ("vid_fullscreen",	m_vidSettingsMenu.fullscreen_toggle.curValue, qTrue);
130 	cgi.Cvar_SetValue ("viewsize",			m_vidSettingsMenu.screensize_slider.curValue * 10, qTrue);
131 
132 	/*
133 	** invert sense so greater = brighter, and scale to a range of 0.5 to 1.3
134 	*/
135 	gamma = (0.8 - ((m_vidSettingsMenu.brightness_slider.curValue * 0.1) - 0.5)) + 0.5;
136 	cgi.Cvar_SetValue ("vid_gamma",		gamma, qTrue);
137 
138 	cgi.Cvar_SetValue ("vid_gammapics",	m_vidSettingsMenu.gammapics_toggle.curValue, qTrue);
139 
140 	cgi.Cvar_SetValue ("gl_picmip",		3 - m_vidSettingsMenu.texqual_slider.curValue, qTrue);
141 	cgi.Cvar_SetValue ("gl_finish",		m_vidSettingsMenu.finish_toggle.curValue, qTrue);
142 
143 	cgi.Cbuf_AddText ("vid_restart\n");
144 }
145 
146 
147 /*
148 ================
149 VIDSettingsMenu_SetValues
150 ================
151 */
VIDSettingsMenu_SetValues(void)152 static void VIDSettingsMenu_SetValues (void)
153 {
154 	if (Q_stricmp (cgi.Cvar_GetStringValue ("gl_driver"), "3dfxgl") == 0)		m_vidSettingsMenu.ref_list.curValue = REF_3DFX;
155 	else if (Q_stricmp (cgi.Cvar_GetStringValue ("gl_driver"), "pvrgl") == 0)	m_vidSettingsMenu.ref_list.curValue = REF_POWERVR;
156 	else																		m_vidSettingsMenu.ref_list.curValue = REF_OPENGL;
157 
158 	cgi.Cvar_SetValue ("gl_mode",		clamp (cgi.Cvar_GetIntegerValue ("gl_mode"), 0, 12), qTrue);
159 	if (cgi.Cvar_GetIntegerValue ("vid_width") && cgi.Cvar_GetIntegerValue ("vid_height"))
160 		m_vidSettingsMenu.mode_list.curValue	= 0;
161 	else
162 		m_vidSettingsMenu.mode_list.curValue	= cgi.Cvar_GetIntegerValue ("gl_mode")+1;
163 
164 	if (!Q_stricmp (cgi.Cvar_GetStringValue ("gl_texturemode"), "GL_LINEAR_MIPMAP_LINEAR"))			m_vidSettingsMenu.tm_list.curValue = 1;
165 	else if (!Q_stricmp (cgi.Cvar_GetStringValue ("gl_texturemode"), "GL_LINEAR_MIPMAP_NEAREST"))	m_vidSettingsMenu.tm_list.curValue = 0;
166 	else																							m_vidSettingsMenu.tm_list.curValue = 2;
167 
168 	if (cgi.Cvar_GetFloatValue ("gl_bitdepth") == 0)		m_vidSettingsMenu.bitd_list.curValue = 0;
169 	else if (cgi.Cvar_GetFloatValue ("gl_bitdepth") == 16)	m_vidSettingsMenu.bitd_list.curValue = 1;
170 	else if (cgi.Cvar_GetFloatValue ("gl_bitdepth") == 32)	m_vidSettingsMenu.bitd_list.curValue = 2;
171 
172 	cgi.Cvar_SetValue ("gl_stencilbuffer",		clamp (cgi.Cvar_GetIntegerValue ("gl_stencilbuffer"), 0, 1), qTrue);
173 	m_vidSettingsMenu.stencilbuf_list.curValue	= cgi.Cvar_GetIntegerValue ("gl_stencilbuffer");
174 
175 	if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 60)			m_vidSettingsMenu.dispfreq_list.curValue = 1;
176 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 65)	m_vidSettingsMenu.dispfreq_list.curValue = 2;
177 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 70)	m_vidSettingsMenu.dispfreq_list.curValue = 3;
178 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 75)	m_vidSettingsMenu.dispfreq_list.curValue = 4;
179 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 80)	m_vidSettingsMenu.dispfreq_list.curValue = 5;
180 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 85)	m_vidSettingsMenu.dispfreq_list.curValue = 6;
181 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 90)	m_vidSettingsMenu.dispfreq_list.curValue = 7;
182 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 95)	m_vidSettingsMenu.dispfreq_list.curValue = 8;
183 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 100)	m_vidSettingsMenu.dispfreq_list.curValue = 9;
184 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 105)	m_vidSettingsMenu.dispfreq_list.curValue = 10;
185 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 110)	m_vidSettingsMenu.dispfreq_list.curValue = 11;
186 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 115)	m_vidSettingsMenu.dispfreq_list.curValue = 12;
187 	else if (cgi.Cvar_GetFloatValue ("r_displayFreq") == 120)	m_vidSettingsMenu.dispfreq_list.curValue = 13;
188 	else														m_vidSettingsMenu.dispfreq_list.curValue = 0;
189 
190 	cgi.Cvar_SetValue ("vid_fullscreen",			clamp (cgi.Cvar_GetIntegerValue ("vid_fullscreen"), 0, 1), qTrue);
191 	m_vidSettingsMenu.fullscreen_toggle.curValue	= cgi.Cvar_GetIntegerValue ("vid_fullscreen");
192 
193 	cgi.Cvar_SetValue ("viewsize",					clamp (cgi.Cvar_GetIntegerValue ("viewsize"), 40, 100), qTrue);
194 	m_vidSettingsMenu.screensize_slider.curValue	= cgi.Cvar_GetIntegerValue ("viewsize") * 0.1; // kthx view menu?
195 
196 	cgi.Cvar_SetValue ("vid_gamma",					clamp (cgi.Cvar_GetFloatValue ("vid_gamma"), 0.5, 1.3), qTrue);
197 	m_vidSettingsMenu.brightness_slider.curValue	= (1.3 - cgi.Cvar_GetFloatValue ("vid_gamma") + 0.5) * 10;
198 
199 	cgi.Cvar_SetValue ("vid_gammapics",			clamp (cgi.Cvar_GetIntegerValue ("vid_gammapics"), 0, 1), qTrue);
200 	m_vidSettingsMenu.gammapics_toggle.curValue	= cgi.Cvar_GetIntegerValue ("vid_gammapics");
201 
202 	m_vidSettingsMenu.texqual_slider.curValue		= 3 - cgi.Cvar_GetIntegerValue ("gl_picmip");
203 
204 	cgi.Cvar_SetValue ("gl_finish",				clamp (cgi.Cvar_GetIntegerValue ("gl_finish"), 0, 1), qTrue);
205 	m_vidSettingsMenu.finish_toggle.curValue	= cgi.Cvar_GetIntegerValue ("gl_finish");
206 }
207 
208 
209 /*
210 ================
211 VIDSettingsMenu_Init
212 ================
213 */
VIDSettingsMenu_Init(void)214 static void VIDSettingsMenu_Init (void)
215 {
216 	static char *resolutions[] = {
217 		// 4:3
218 		"[CUSTOM    ]",
219 		"[320 240   ]",
220 		"[400 300   ]",
221 		"[512 384   ]",
222 		"[640 480   ]",
223 		"[800 600   ]",
224 		"[960 720   ]",
225 		"[1024 768  ]",
226 		"[1152 864  ]",
227 		"[1280 960  ]",
228 		"[1600 1200 ]",
229 		"[1920 1440 ]",
230 		"[2048 1536 ]",
231 
232 		// widescreen
233 		"[1280 800 (ws)]",
234 		"[1440 900 (ws)]",
235 		0
236 	};
237 
238 	static char *refs[] = {
239 		"[default OpenGL]",
240 		"[3Dfx OpenGL   ]",
241 		"[PowerVR OpenGL]",
242 		0
243 	};
244 
245 	static char *yesno_names[] = {
246 		"no",
247 		"yes",
248 		0
249 	};
250 
251 	static char *tm_names[] = {
252 		"bilinear (fast)",
253 		"trilinear (best)",
254 		"other",
255 		0
256 	};
257 
258 	static char *bitd_names[] = {
259 		"default",
260 		"16 bit",
261 		"32 bit",
262 		"other",
263 		0
264 	};
265 
266 	static char *dispfreq_names[] = {
267 		"desktop",
268 		"60",
269 		"65",
270 		"70",
271 		"75",
272 		"80",
273 		"85",
274 		"90",
275 		"95",
276 		"100",
277 		"105",
278 		"110",
279 		"115",
280 		"120",
281 		"other",
282 		0
283 	};
284 
285 	UI_StartFramework (&m_vidSettingsMenu.frameWork, FWF_CENTERHEIGHT);
286 
287 	m_vidSettingsMenu.banner.generic.type		= UITYPE_IMAGE;
288 	m_vidSettingsMenu.banner.generic.flags		= UIF_NOSELECT|UIF_CENTERED;
289 	m_vidSettingsMenu.banner.generic.name		= NULL;
290 	m_vidSettingsMenu.banner.shader				= uiMedia.banners.video;
291 
292 	m_vidSettingsMenu.header.generic.type		= UITYPE_ACTION;
293 	m_vidSettingsMenu.header.generic.flags		= UIF_NOSELECT|UIF_CENTERED|UIF_MEDIUM|UIF_SHADOW;
294 	m_vidSettingsMenu.header.generic.name		= "Video Settings";
295 
296 	m_vidSettingsMenu.ref_list.generic.type			= UITYPE_SPINCONTROL;
297 	m_vidSettingsMenu.ref_list.generic.name			= "Mini-Driver";
298 	m_vidSettingsMenu.ref_list.itemNames			= refs;
299 	m_vidSettingsMenu.ref_list.generic.statusBar	= "Renderer-Specific MiniDriver";
300 
301 	m_vidSettingsMenu.mode_list.generic.type		= UITYPE_SPINCONTROL;
302 	m_vidSettingsMenu.mode_list.generic.name		= "Resolution";
303 	m_vidSettingsMenu.mode_list.itemNames			= resolutions;
304 	m_vidSettingsMenu.mode_list.generic.statusBar	= "Resolution Selection";
305 
306 	m_vidSettingsMenu.tm_list.generic.type		= UITYPE_SPINCONTROL;
307 	m_vidSettingsMenu.tm_list.generic.name		= "Texture Mode";
308 	m_vidSettingsMenu.tm_list.itemNames			= tm_names;
309 	m_vidSettingsMenu.tm_list.generic.statusBar	= "Texture mode";
310 
311 	m_vidSettingsMenu.bitd_list.generic.type		= UITYPE_SPINCONTROL;
312 	m_vidSettingsMenu.bitd_list.generic.name		= "Bit Depth";
313 	m_vidSettingsMenu.bitd_list.itemNames			= bitd_names;
314 	m_vidSettingsMenu.bitd_list.generic.statusBar	= "Display bit depth";
315 
316 	m_vidSettingsMenu.stencilbuf_list.generic.type		= UITYPE_SPINCONTROL;
317 	m_vidSettingsMenu.stencilbuf_list.generic.name		= "Stencil Buffer";
318 	m_vidSettingsMenu.stencilbuf_list.itemNames			= yesno_names;
319 	m_vidSettingsMenu.stencilbuf_list.generic.statusBar	= "Stencil buffer";
320 
321 	m_vidSettingsMenu.dispfreq_list.generic.type		= UITYPE_SPINCONTROL;
322 	m_vidSettingsMenu.dispfreq_list.generic.name		= "Display Freq";
323 	m_vidSettingsMenu.dispfreq_list.itemNames			= dispfreq_names;
324 	m_vidSettingsMenu.dispfreq_list.generic.statusBar	= "Display frequency";
325 
326 	m_vidSettingsMenu.fullscreen_toggle.generic.type		= UITYPE_SPINCONTROL;
327 	m_vidSettingsMenu.fullscreen_toggle.generic.name		= "Fullscreen";
328 	m_vidSettingsMenu.fullscreen_toggle.itemNames			= yesno_names;
329 	m_vidSettingsMenu.fullscreen_toggle.generic.statusBar	= "Fullscreen or Window";
330 
331 	m_vidSettingsMenu.screensize_slider.generic.type		= UITYPE_SLIDER;
332 	m_vidSettingsMenu.screensize_slider.generic.name		= "Screen Size";
333 	m_vidSettingsMenu.screensize_slider.minValue			= 4;
334 	m_vidSettingsMenu.screensize_slider.maxValue			= 10;
335 	m_vidSettingsMenu.screensize_slider.generic.statusBar	= "Screen Size";
336 
337 	m_vidSettingsMenu.brightness_slider.generic.type		= UITYPE_SLIDER;
338 	m_vidSettingsMenu.brightness_slider.generic.name		= "Brightness";
339 	m_vidSettingsMenu.brightness_slider.minValue			= 5;
340 	m_vidSettingsMenu.brightness_slider.maxValue			= 13;
341 	m_vidSettingsMenu.brightness_slider.generic.statusBar	= "Brightness";
342 
343 	m_vidSettingsMenu.gammapics_toggle.generic.type			= UITYPE_SPINCONTROL;
344 	m_vidSettingsMenu.gammapics_toggle.generic.name			= "Pic Gamma";
345 	m_vidSettingsMenu.gammapics_toggle.itemNames			= yesno_names;
346 	m_vidSettingsMenu.gammapics_toggle.generic.statusBar	= "Apply Gamma to Pics";
347 
348 	m_vidSettingsMenu.texqual_slider.generic.type		= UITYPE_SLIDER;
349 	m_vidSettingsMenu.texqual_slider.generic.name		= "Texture Quality";
350 	m_vidSettingsMenu.texqual_slider.minValue			= 0;
351 	m_vidSettingsMenu.texqual_slider.maxValue			= 3;
352 	m_vidSettingsMenu.texqual_slider.generic.statusBar	= "Texture upload quality";
353 
354 	m_vidSettingsMenu.finish_toggle.generic.type		= UITYPE_SPINCONTROL;
355 	m_vidSettingsMenu.finish_toggle.generic.name		= "Frame Sync";
356 	m_vidSettingsMenu.finish_toggle.itemNames			= yesno_names;
357 	m_vidSettingsMenu.finish_toggle.generic.statusBar	= "Framerate sync (waits on gl/buf/net commands to complete after each frame)";
358 
359 	m_vidSettingsMenu.apply_action.generic.type			= UITYPE_ACTION;
360 	m_vidSettingsMenu.apply_action.generic.flags		= UIF_CENTERED|UIF_MEDIUM|UIF_SHADOW;
361 	m_vidSettingsMenu.apply_action.generic.name			= "Apply";
362 	m_vidSettingsMenu.apply_action.generic.callBack		= VIDSettingsMenu_ApplyValues;
363 	m_vidSettingsMenu.apply_action.generic.statusBar	= "Apply Changes";
364 
365 	m_vidSettingsMenu.reset_action.generic.type			= UITYPE_ACTION;
366 	m_vidSettingsMenu.reset_action.generic.flags		= UIF_CENTERED|UIF_MEDIUM|UIF_SHADOW;
367 	m_vidSettingsMenu.reset_action.generic.name			= "Reset";
368 	m_vidSettingsMenu.reset_action.generic.callBack		= ResetDefaults;
369 	m_vidSettingsMenu.reset_action.generic.statusBar	= "Reset Changes";
370 
371 	m_vidSettingsMenu.cancel_action.generic.type		= UITYPE_ACTION;
372 	m_vidSettingsMenu.cancel_action.generic.flags		= UIF_CENTERED|UIF_MEDIUM|UIF_SHADOW;
373 	m_vidSettingsMenu.cancel_action.generic.name		= "Cancel";
374 	m_vidSettingsMenu.cancel_action.generic.callBack	= CancelChanges;
375 	m_vidSettingsMenu.cancel_action.generic.statusBar	= "Closes the Menu";
376 
377 	VIDSettingsMenu_SetValues ();
378 
379 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.banner);
380 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.header);
381 
382 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.ref_list);
383 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.mode_list);
384 
385 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.tm_list);
386 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.bitd_list);
387 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.stencilbuf_list);
388 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.dispfreq_list);
389 
390 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.fullscreen_toggle);
391 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.screensize_slider);
392 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.brightness_slider);
393 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.gammapics_toggle);
394 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.texqual_slider);
395 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.finish_toggle);
396 
397 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.apply_action);
398 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.reset_action);
399 	UI_AddItem (&m_vidSettingsMenu.frameWork,		&m_vidSettingsMenu.cancel_action);
400 
401 	UI_FinishFramework (&m_vidSettingsMenu.frameWork, qTrue);
402 }
403 
404 
405 /*
406 =============
407 VIDSettingsMenu_Close
408 =============
409 */
VIDSettingsMenu_Close(void)410 static struct sfx_s *VIDSettingsMenu_Close (void)
411 {
412 	return uiMedia.sounds.menuOut;
413 }
414 
415 
416 /*
417 ================
418 VIDSettingsMenu_Draw
419 ================
420 */
VIDSettingsMenu_Draw(void)421 static void VIDSettingsMenu_Draw (void)
422 {
423 	float	y;
424 
425 	// Initialize if necessary
426 	if (!m_vidSettingsMenu.frameWork.initialized)
427 		VIDSettingsMenu_Init ();
428 
429 	// Dynamically position
430 	m_vidSettingsMenu.frameWork.x			= cg.refConfig.vidWidth * 0.5f;
431 	m_vidSettingsMenu.frameWork.y			= 0;
432 
433 	m_vidSettingsMenu.banner.generic.x			= 0;
434 	m_vidSettingsMenu.banner.generic.y			= 0;
435 
436 	y = m_vidSettingsMenu.banner.height * UI_SCALE;
437 
438 	m_vidSettingsMenu.header.generic.x				= 0;
439 	m_vidSettingsMenu.header.generic.y				= y += UIFT_SIZEINC;
440 	m_vidSettingsMenu.ref_list.generic.x			= 0;
441 	m_vidSettingsMenu.ref_list.generic.y			= y += UIFT_SIZEINC + UIFT_SIZEINCMED;
442 	m_vidSettingsMenu.mode_list.generic.x			= 0;
443 	m_vidSettingsMenu.mode_list.generic.y			= y += UIFT_SIZEINC;
444 	m_vidSettingsMenu.tm_list.generic.x				= 0;
445 	m_vidSettingsMenu.tm_list.generic.y				= y += UIFT_SIZEINC*2;
446 	m_vidSettingsMenu.bitd_list.generic.x			= 0;
447 	m_vidSettingsMenu.bitd_list.generic.y			= y += UIFT_SIZEINC;
448 	m_vidSettingsMenu.stencilbuf_list.generic.x		= 0;
449 	m_vidSettingsMenu.stencilbuf_list.generic.y		= y += UIFT_SIZEINC;
450 	m_vidSettingsMenu.dispfreq_list.generic.x		= 0;
451 	m_vidSettingsMenu.dispfreq_list.generic.y		= y += UIFT_SIZEINC;
452 	m_vidSettingsMenu.fullscreen_toggle.generic.x	= 0;
453 	m_vidSettingsMenu.fullscreen_toggle.generic.y	= y += (UIFT_SIZEINC * 2);
454 	m_vidSettingsMenu.screensize_slider.generic.x	= 0;
455 	m_vidSettingsMenu.screensize_slider.generic.y	= y += UIFT_SIZEINC;
456 	m_vidSettingsMenu.brightness_slider.generic.x	= 0;
457 	m_vidSettingsMenu.brightness_slider.generic.y	= y += UIFT_SIZEINC;
458 	m_vidSettingsMenu.gammapics_toggle.generic.x	= 0;
459 	m_vidSettingsMenu.gammapics_toggle.generic.y	= y += UIFT_SIZEINC;
460 	m_vidSettingsMenu.texqual_slider.generic.x		= 0;
461 	m_vidSettingsMenu.texqual_slider.generic.y		= y += (UIFT_SIZEINC*2);
462 	m_vidSettingsMenu.finish_toggle.generic.x		= 0;
463 	m_vidSettingsMenu.finish_toggle.generic.y		= y += (UIFT_SIZEINC*2);
464 	m_vidSettingsMenu.apply_action.generic.x		= 0;
465 	m_vidSettingsMenu.apply_action.generic.y		= y += UIFT_SIZEINCMED*2;
466 	m_vidSettingsMenu.reset_action.generic.x		= 0;
467 	m_vidSettingsMenu.reset_action.generic.y		= y += UIFT_SIZEINCMED;
468 	m_vidSettingsMenu.cancel_action.generic.x		= 0;
469 	m_vidSettingsMenu.cancel_action.generic.y		= y += UIFT_SIZEINCMED;
470 
471 	// Render
472 	UI_DrawInterface (&m_vidSettingsMenu.frameWork);
473 }
474 
475 
476 /*
477 =============
478 UI_VIDSettingsMenu_f
479 =============
480 */
UI_VIDSettingsMenu_f(void)481 void UI_VIDSettingsMenu_f (void)
482 {
483 	VIDSettingsMenu_Init ();
484 	M_PushMenu (&m_vidSettingsMenu.frameWork, VIDSettingsMenu_Draw, VIDSettingsMenu_Close, M_KeyHandler);
485 }
486