summaryrefslogtreecommitdiff
path: root/src/cl_ref.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cl_ref.c')
-rw-r--r--src/cl_ref.c76
1 files changed, 47 insertions, 29 deletions
diff --git a/src/cl_ref.c b/src/cl_ref.c
index d84817a..74f0597 100644
--- a/src/cl_ref.c
+++ b/src/cl_ref.c
@@ -52,61 +52,76 @@ HELPER FUNCTIONS
// 640x480@75
// 640x480@75:32
// 640x480:32@75
-void VID_GetModeFS( vrect_t *rc, int *freq, int *depth ) {
- char *s = vid_modelist->string;
- int mode = 1;
- int w = 640, h = 480, hz = 0, bpp = 0;
+qboolean VID_GetFullscreen( vrect_t *rc, int *freq_p, int *depth_p ) {
+ unsigned long w, h, freq, depth;
+ char *s;
+ int mode;
+
+ // fill in default parameters
+ rc->x = 0;
+ rc->y = 0;
+ rc->width = 640;
+ rc->height = 480;
+
+ if( freq_p )
+ *freq_p = 0;
+ if( depth_p )
+ *depth_p = 0;
+
+ if( !vid_modelist || !vid_fullscreen )
+ return qfalse;
+
+ s = vid_modelist->string;
+ if( !*s )
+ return qfalse;
- while( *s ) {
+ mode = 1;
+ while( 1 ) {
w = strtoul( s, &s, 10 );
- if( *s != 'x' ) {
+ if( *s != 'x' && *s != 'X' ) {
Com_DPrintf( "Mode %d is malformed\n", mode );
- goto malformed;
+ return qfalse;
}
h = strtoul( s + 1, &s, 10 );
+ freq = depth = 0;
if( *s == '@' ) {
- hz = strtoul( s + 1, &s, 10 );
+ freq = strtoul( s + 1, &s, 10 );
if( *s == ':' ) {
- bpp = strtoul( s + 1, &s, 10 );
+ depth = strtoul( s + 1, &s, 10 );
}
} else if( *s == ':' ) {
- bpp = strtoul( s + 1, &s, 10 );
+ depth = strtoul( s + 1, &s, 10 );
if( *s == '@' ) {
- hz = strtoul( s + 1, &s, 10 );
+ freq = strtoul( s + 1, &s, 10 );
}
}
if( mode == vid_fullscreen->integer ) {
break;
}
+ while( Q_isspace( *s ) )
+ s++;
if( *s == 0 ) {
Com_DPrintf( "Mode %d not found\n", vid_fullscreen->integer );
- break;
+ return qfalse;
}
- s++;
mode++;
}
// sanity check
- if( w < 64 || w > 8192 || h < 64 || h > 8192 ) {
- Com_DPrintf( "Mode %dx%d doesn't look sane\n", w, h );
-malformed:
- w = 640;
- h = 480;
- hz = 0;
- bpp = 0;
+ if( w < 64 || w > 8192 || h < 64 || h > 8192 || freq > 1000 || depth > 32 ) {
+ Com_DPrintf( "Mode %lux%lu@%lu:%lu doesn't look sane\n", w, h, freq, depth );
+ return qfalse;
}
- rc->x = 0;
- rc->y = 0;
rc->width = w;
rc->height = h;
- if( freq ) {
- *freq = hz;
- }
- if( depth ) {
- *depth = bpp;
- }
+ if( freq_p )
+ *freq_p = freq;
+ if( depth_p )
+ *depth_p = depth;
+
+ return qtrue;
}
// 640x480
@@ -171,6 +186,9 @@ void VID_SetGeometry( vrect_t *rc ) {
}
void VID_ToggleFullscreen( void ) {
+ if( !vid_fullscreen || !_vid_fullscreen )
+ return;
+
if( !vid_fullscreen->integer ) {
if( !_vid_fullscreen->integer ) {
Cvar_Set( "_vid_fullscreen", "1" );
@@ -203,10 +221,10 @@ void CL_RunRefresh( void ) {
if( mode_changed ) {
if( mode_changed & MODE_FULLSCREEN ) {
+ VID_SetMode();
if( vid_fullscreen->integer ) {
Cvar_Set( "_vid_fullscreen", vid_fullscreen->string );
}
- VID_SetMode();
} else {
if( vid_fullscreen->integer ) {
if( mode_changed & MODE_MODELIST ) {