rpgxef/code/ui/ui_video.c
Walter Julius Hennecke a39565b783 Integrated RPG-X2 rpgxEF edition into the rpgxEF repo
... not quite content with where the project files lie but it is ok for
now.
... compiling works fine so far (only tested mingw32 right now)
2012-08-04 12:54:37 +02:00

2333 lines
66 KiB
C

// Copyright (C) 1999-2000 Id Software, Inc.
//
#include "ui_local.h"
void UI_VideoDriverMenu( void );
void VideoDriver_Lines(int increment);
void UI_VideoData2SettingsMenu( void );
extern void *holdControlPtr;
extern int holdControlEvent;
static void Video_MenuEvent (void* ptr, int event);
#define PIC_MONBAR2 "menu/common/monbar_2.tga"
#define PIC_SLIDER "menu/common/slider.tga"
// Video Data
typedef struct
{
menuframework_s menu;
qhandle_t swooshTop;
qhandle_t swooshBottom;
qhandle_t swooshTopSmall;
qhandle_t swooshBottomSmall;
} videoddata_t;
static videoddata_t s_videodata;
// Video Drivers
typedef struct
{
menuframework_s menu;
qhandle_t swooshTopSmall;
qhandle_t swooshBottomSmall;
} videodriver_t;
// Video Data 2
typedef struct
{
menuframework_s menu;
menuslider_s gamma_slider;
menuslider_s screensize_slider;
menulist_s anisotropicfiltering;
menuaction_s apply_action2;
qhandle_t gamma;
qhandle_t top;
} videodata2_t;
typedef struct
{
int width;
int height;
} videoResolutions_t;
static videodata2_t s_videodata2;
static int s_graphics_options_Names[] =
{
MNT_VIDEO_HIGH_QUALITY,
MNT_VIDEO_NORMAL,
MNT_VIDEO_FAST,
MNT_VIDEO_FASTEST,
MNT_VIDEO_CUSTOM,
MNT_NONE
};
/*static int s_driver_Names[] =
{
MNT_VIDEO_DRIVER_DEFAULT,
MNT_VIDEO_DRIVER_VOODOO,
MNT_NONE
};*/
extern int s_OffOnNone_Names[];
static int s_resolutions[] =
{
// MNT_320X200,
// MNT_400X300,
MNT_512X384,
MNT_640X480,
MNT_800X600,
MNT_960X720,
MNT_1024X768,
MNT_1152X864,
MNT_1280X960,
MNT_1600X1200,
MNT_2048X1536,
//MNT_856x480WIDE, //this is dumb :P
MNT_NONE
};
static int s_aspectRatios[] =
{
MNT_4X3,
MNT_16X9,
MNT_16X10,
0
};
static char *s_wideResolutions16x9[] =
{
"854x480",
"1280x720",
"1920x1080",
0
};
static videoResolutions_t videoResolutions16x9[] =
{
{ 854, 480 },
{ 1280, 720 },
{ 1920, 1080 }
};
static char *s_wideResolutions16x10[] =
{
"1280x800",
"1440x900",
"1680x1050",
"1920x1200",
"2560x1600",
0
};
static videoResolutions_t videoResolutions16x10[] =
{
{ 1280, 800 },
{ 1440, 900 },
{ 1680, 1050 },
{ 1920, 1200 },
{ 2560, 1600 }
};
static void *s_widescreenResolutions[] =
{
&videoResolutions16x9,
&videoResolutions16x10,
NULL
};
static void *s_widescreenResStrings[] =
{
&s_wideResolutions16x9,
&s_wideResolutions16x10,
NULL
};
//store the number of widescreen arrays
static int s_wideScreenSets = 2;
//store the number of resolutions in each array.
//This will be necessary when we change the lists over
static int s_resolutionNums[] = {9,3,5};
//finally for reference sake, use an enum
typedef enum
{
ASPECTRATIO_4X3,
ASPECTRATIO_16X9,
ASPECTRATIO_16X10,
ASPECTRATIO_MAX
} AspectRatios_e;
static int s_colordepth_Names[] =
{
MNT_DEFAULT,
MNT_16BIT,
MNT_32BIT,
MNT_NONE
};
/*static int s_lighting_Names[] =
{
MNT_LIGHTMAP,
MNT_VERTEX,
MNT_NONE
};*/
static int s_quality_Names[] =
{
MNT_LOW,
MNT_MEDIUM,
MNT_HIGH,
MNT_NONE
};
static int s_4quality_Names[] =
{
MNT_LOW,
MNT_MEDIUM,
MNT_HIGH,
MNT_VERY_HIGH,
MNT_NONE
};
static int s_tqbits_Names[] =
{
MNT_DEFAULT,
MNT_16BIT,
MNT_32BIT,
MNT_NONE
};
static int s_filter_Names[] =
{
MNT_BILINEAR,
MNT_TRILINEAR,
MNT_NONE
};
static menubitmap_s s_video_drivers;
static menubitmap_s s_video_data;
static menubitmap_s s_video_data2;
#define ID_MAINMENU 100
#define ID_CONTROLS 101
#define ID_VIDEO 102
#define ID_SOUND 103
#define ID_GAMEOPTIONS 104
#define ID_CDKEY 105
#define ID_VIDEODATA 110
#define ID_VIDEODATA2 111
#define ID_VIDEODRIVERS 112
#define ID_ARROWDWN 113
#define ID_ARROWUP 114
#define ID_INGAMEMENU 115
// Precache stuff for Video Driver
#define MAX_VID_DRIVERS 128
static struct
{
menuframework_s menu;
char *drivers[MAX_VID_DRIVERS];
char extensionsString[2*MAX_STRING_CHARS];
menutext_s line1;
menutext_s line2;
menutext_s line3;
menutext_s line4;
menutext_s line5;
menutext_s line6;
menutext_s line7;
menutext_s line8;
menutext_s line9;
menutext_s line10;
menutext_s line11;
menutext_s line12;
menutext_s line13;
menutext_s line14;
menutext_s line15;
menutext_s line16;
menutext_s line17;
menutext_s line18;
menutext_s line19;
menutext_s line20;
menutext_s line21;
menutext_s line22;
menutext_s line23;
menutext_s line24;
qhandle_t corner_ll_8_16;
qhandle_t corner_ll_16_16;
qhandle_t arrow_dn;
menubitmap_s arrowdwn;
menubitmap_s arrowup;
int currentDriverLine;
int driverCnt;
int activeArrowDwn;
int activeArrowUp;
} s_videodriver;
static void* g_videolines[] =
{
&s_videodriver.line1,
&s_videodriver.line2,
&s_videodriver.line3,
&s_videodriver.line4,
&s_videodriver.line5,
&s_videodriver.line6,
&s_videodriver.line7,
&s_videodriver.line8,
&s_videodriver.line9,
&s_videodriver.line10,
&s_videodriver.line11,
&s_videodriver.line12,
&s_videodriver.line13,
&s_videodriver.line14,
&s_videodriver.line15,
&s_videodriver.line16,
&s_videodriver.line17,
&s_videodriver.line18,
&s_videodriver.line19,
&s_videodriver.line20,
&s_videodriver.line21,
&s_videodriver.line22,
&s_videodriver.line23,
&s_videodriver.line24,
NULL,
};
int video_sidebuttons[3][2] =
{
{ 30, 250 }, // Video Data Button
{ 30, 250 + 6 + (MENU_BUTTON_MED_HEIGHT * 1.5) }, // Video Drivers Button
{ 30, 250 + (2 * (6 + (MENU_BUTTON_MED_HEIGHT * 1.5))) }, // Video Drivers Button
};
void Video_SideButtons(menuframework_s *menu,int menuType);
static void GraphicsOptions_ApplyChanges( void *unused, int notification );
/*
=======================================================================
DRIVER INFORMATION MENU
=======================================================================
*/
#define ID_DRIVERINFOBACK 100
typedef struct
{
menuframework_s menu;
menutext_s banner;
menubitmap_s back;
menubitmap_s framel;
menubitmap_s framer;
char stringbuff[2*MAX_STRING_CHARS];
char* strings[64];
int numstrings;
} driverinfo_t;
static driverinfo_t s_driverinfo;
/*
=================
DriverInfo_MenuDraw
=================
*/
static void DriverInfo_MenuDraw( void )
{
int i;
int y;
Menu_Draw( &s_driverinfo.menu );
UI_DrawString( 320, 80, "VENDOR", UI_CENTER|UI_SMALLFONT, color_red, qtrue );
UI_DrawString( 320, 152, "PIXELFORMAT", UI_CENTER|UI_SMALLFONT, color_red, qtrue );
UI_DrawString( 320, 192, "EXTENSIONS", UI_CENTER|UI_SMALLFONT, color_red, qtrue );
UI_DrawString( 320, 80+16, uis.glconfig.vendor_string, UI_CENTER|UI_SMALLFONT, text_color_normal, qtrue );
UI_DrawString( 320, 96+16, uis.glconfig.version_string, UI_CENTER|UI_SMALLFONT, text_color_normal, qtrue );
UI_DrawString( 320, 112+16, uis.glconfig.renderer_string, UI_CENTER|UI_SMALLFONT, text_color_normal, qtrue );
UI_DrawString( 320, 152+16, va ("color(%d-bits) Z(%d-bits) stencil(%d-bits)", uis.glconfig.colorBits, uis.glconfig.depthBits, uis.glconfig.stencilBits), UI_CENTER|UI_SMALLFONT, text_color_normal, qtrue );
// double column
y = 192+16;
for (i=0; i<s_driverinfo.numstrings/2; i++) {
UI_DrawString( 320-4, y, s_driverinfo.strings[i*2], UI_RIGHT|UI_SMALLFONT, text_color_normal, qtrue );
UI_DrawString( 320+4, y, s_driverinfo.strings[i*2+1], UI_LEFT|UI_SMALLFONT, text_color_normal, qtrue );
y += SMALLCHAR_HEIGHT;
}
if (s_driverinfo.numstrings & 1)
UI_DrawString( 320, y, s_driverinfo.strings[s_driverinfo.numstrings-1], UI_CENTER|UI_SMALLFONT, text_color_normal, qtrue );
}
/*
=================
DriverInfo_Cache
=================
*/
void DriverInfo_Cache( void )
{
}
/*
=================
UI_DriverInfo_Menu
=================
*/
static void UI_DriverInfo_Menu( void )
{
char* eptr;
int i;
int len;
// zero set all our globals
memset( &s_driverinfo, 0 ,sizeof(driverinfo_t) );
DriverInfo_Cache();
s_driverinfo.menu.fullscreen = qtrue;
s_driverinfo.menu.draw = DriverInfo_MenuDraw;
/*
s_driverinfo.banner.generic.type = MTYPE_BTEXT;
s_driverinfo.banner.generic.x = 320;
s_driverinfo.banner.generic.y = 16;
s_driverinfo.banner.string = "DRIVER INFO";
s_driverinfo.banner.color = color_white;
s_driverinfo.banner.style = UI_CENTER;
s_driverinfo.framel.generic.type = MTYPE_BITMAP;
s_driverinfo.framel.generic.name = DRIVERINFO_FRAMEL;
s_driverinfo.framel.generic.flags = QMF_INACTIVE;
s_driverinfo.framel.generic.x = 0;
s_driverinfo.framel.generic.y = 78;
s_driverinfo.framel.width = 256;
s_driverinfo.framel.height = 329;
s_driverinfo.framer.generic.type = MTYPE_BITMAP;
s_driverinfo.framer.generic.name = DRIVERINFO_FRAMER;
s_driverinfo.framer.generic.flags = QMF_INACTIVE;
s_driverinfo.framer.generic.x = 376;
s_driverinfo.framer.generic.y = 76;
s_driverinfo.framer.width = 256;
s_driverinfo.framer.height = 334;
s_driverinfo.back.generic.type = MTYPE_BITMAP;
s_driverinfo.back.generic.name = DRIVERINFO_BACK0;
s_driverinfo.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
s_driverinfo.back.generic.callback = DriverInfo_Event;
s_driverinfo.back.generic.id = ID_DRIVERINFOBACK;
s_driverinfo.back.generic.x = 0;
s_driverinfo.back.generic.y = 480-64;
s_driverinfo.back.width = 128;
s_driverinfo.back.height = 64;
s_driverinfo.back.focuspic = DRIVERINFO_BACK1;
*/
strcpy( s_driverinfo.stringbuff, uis.glconfig.extensions_string );
// build null terminated extension strings
eptr = s_driverinfo.stringbuff;
while ( s_driverinfo.numstrings<40 && *eptr )
{
while ( *eptr && *eptr == ' ' )
*eptr++ = '\0';
// track start of valid string
if (*eptr && *eptr != ' ')
s_driverinfo.strings[s_driverinfo.numstrings++] = eptr;
while ( *eptr && *eptr != ' ' )
eptr++;
}
// safety length strings for display
for (i=0; i<s_driverinfo.numstrings; i++) {
len = strlen(s_driverinfo.strings[i]);
if (len > 32) {
s_driverinfo.strings[i][len-1] = '>';
s_driverinfo.strings[i][len] = '\0';
}
}
Menu_AddItem( &s_driverinfo.menu, &s_driverinfo.banner );
Menu_AddItem( &s_driverinfo.menu, &s_driverinfo.framel );
Menu_AddItem( &s_driverinfo.menu, &s_driverinfo.framer );
Menu_AddItem( &s_driverinfo.menu, &s_driverinfo.back );
UI_PushMenu( &s_driverinfo.menu );
}
/*
=======================================================================
GRAPHICS OPTIONS MENU
=======================================================================
*/
/*static const char *s_drivers[] =
{
OPENGL_DRIVER_NAME,
_3DFX_DRIVER_NAME,
0
};*/
#define ID_BACK2 101
#define ID_FULLSCREEN 102
#define ID_LIST 103
#define ID_MODE 104
#define ID_DRIVERINFO 105
#define ID_GRAPHICS 106
#define ID_DISPLAY 107
//#define ID_SOUND 108
#define ID_NETWORK 109
typedef struct {
menuframework_s menu;
menutext_s banner;
menubitmap_s framel;
menubitmap_s framer;
menutext_s graphics;
menutext_s display;
menutext_s sound;
menutext_s network;
menulist_s aspectRatio;
menulist_s list;
menulist_s mode;
menulist_s tq;
menulist_s fs;
menulist_s lighting;
menulist_s allow_extensions;
menulist_s texturebits;
menulist_s colordepth;
menulist_s geometry;
menulist_s filter;
menutext_s driverinfo;
menulist_s simpleshaders;
menulist_s compresstextures;
menuaction_s apply;
menubitmap_s back;
//TiM - only update the resolution list when need be
int lastRatio;
} graphicsoptions_t;
typedef struct
{
int mode;
qboolean fullscreen;
int aspectRatio;
int tq;
int lighting;
int colordepth;
int texturebits;
int geometry;
int filter;
qboolean extensions;
int simpleshaders;
int compresstextures;
} InitialVideoOptions_s;
static InitialVideoOptions_s s_ivo;
static graphicsoptions_t s_graphicsoptions;
static InitialVideoOptions_s s_ivo_templates[] =
{
{
2, qtrue, 0, 0, 2, 2, 2, 1, 0, qtrue, 0, 0, // JDC: this was tq 3
},
{
1, qtrue, 0, 0, 0, 0, 2, 0, 0, qtrue, 0, 0,
},
{
0, qtrue, 0, 0, 1, 0, 0, 0, 0, qtrue, 0, 0,
},
{
0, qtrue, 0, 1, 1, 0, 0, 0, 0, qtrue, 1, 0,
},
{
1, qtrue, 0, 0, 0, 0, 1, 0, 0, qtrue, 0, 0,
}
};
#define NUM_IVO_TEMPLATES ( sizeof( s_ivo_templates ) / sizeof( s_ivo_templates[0] ) )
/*
=================
GraphicsOptions_GetInitialVideo
=================
*/
static void GraphicsOptions_GetInitialVideo( void )
{
s_ivo.colordepth = s_graphicsoptions.colordepth.curvalue;
s_ivo.mode = s_graphicsoptions.mode.curvalue;
s_ivo.aspectRatio = s_graphicsoptions.aspectRatio.curvalue;
s_ivo.fullscreen = s_graphicsoptions.fs.curvalue;
s_ivo.extensions = s_graphicsoptions.allow_extensions.curvalue;
s_ivo.tq = s_graphicsoptions.tq.curvalue;
// s_ivo.lighting = s_graphicsoptions.lighting.curvalue;
s_ivo.geometry = s_graphicsoptions.geometry.curvalue;
s_ivo.filter = s_graphicsoptions.filter.curvalue;
s_ivo.texturebits = s_graphicsoptions.texturebits.curvalue;
s_ivo.simpleshaders = s_graphicsoptions.simpleshaders.curvalue;
s_ivo.compresstextures = s_graphicsoptions.compresstextures.curvalue;
}
/*
=================
GraphicsOptions_CheckConfig
=================
*/
static void GraphicsOptions_CheckConfig( void )
{
int i;
for ( i = 0; i < NUM_IVO_TEMPLATES; i++ )
{
if ( s_ivo_templates[i].colordepth != s_graphicsoptions.colordepth.curvalue )
continue;
if ( s_ivo_templates[i].mode != s_graphicsoptions.mode.curvalue )
continue;
if ( s_ivo_templates[i].aspectRatio != s_graphicsoptions.aspectRatio.curvalue )
continue;
if ( s_ivo_templates[i].fullscreen != s_graphicsoptions.fs.curvalue )
continue;
if ( s_ivo_templates[i].tq != s_graphicsoptions.tq.curvalue )
continue;
// if ( s_ivo_templates[i].lighting != s_graphicsoptions.lighting.curvalue )
// continue;
if ( s_ivo_templates[i].geometry != s_graphicsoptions.geometry.curvalue )
continue;
if ( s_ivo_templates[i].filter != s_graphicsoptions.filter.curvalue )
continue;
if ( s_ivo_templates[i].simpleshaders != s_graphicsoptions.simpleshaders.curvalue )
continue;
// if ( s_ivo_templates[i].compresstextures != s_graphicsoptions.compresstextures.curvalue )
// continue;
// if ( s_ivo_templates[i].texturebits != s_graphicsoptions.texturebits.curvalue )
// continue;
s_graphicsoptions.list.curvalue = i;
return;
}
s_graphicsoptions.list.curvalue = 4;
}
/*
=================
GraphicsOptions_UpdateMenuItems
=================
*/
static void GraphicsOptions_UpdateMenuItems( void )
{
if ( s_graphicsoptions.fs.curvalue == 0 )
{
s_graphicsoptions.colordepth.curvalue = 0;
s_graphicsoptions.colordepth.generic.flags |= QMF_GRAYED;
}
else
{
s_graphicsoptions.colordepth.generic.flags &= ~QMF_GRAYED;
}
if ( s_graphicsoptions.allow_extensions.curvalue == 0 )
{
if ( s_graphicsoptions.texturebits.curvalue == 0 )
{
s_graphicsoptions.texturebits.curvalue = 1;
}
}
s_graphicsoptions.apply.generic.flags |= QMF_GRAYED;
s_graphicsoptions.apply.generic.flags&= ~ QMF_BLINK;
if ( s_ivo.mode != s_graphicsoptions.mode.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
if ( s_ivo.aspectRatio != s_graphicsoptions.aspectRatio.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
if ( s_ivo.fullscreen != s_graphicsoptions.fs.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
if ( s_ivo.extensions != s_graphicsoptions.allow_extensions.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
if ( s_ivo.tq != s_graphicsoptions.tq.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
/* if ( s_ivo.lighting != s_graphicsoptions.lighting.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
*/
if ( s_ivo.colordepth != s_graphicsoptions.colordepth.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
if ( s_ivo.texturebits != s_graphicsoptions.texturebits.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
if ( s_ivo.simpleshaders != s_graphicsoptions.simpleshaders.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
if ( s_ivo.compresstextures != s_graphicsoptions.compresstextures.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
if ( s_ivo.geometry != s_graphicsoptions.geometry.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
if ( s_ivo.filter != s_graphicsoptions.filter.curvalue )
{
s_graphicsoptions.apply.generic.flags &= ~QMF_GRAYED;
s_graphicsoptions.apply.generic.flags |= QMF_BLINK;
}
//TiM - check for widescreen
if ( s_graphicsoptions.aspectRatio.curvalue != s_graphicsoptions.lastRatio )
{
if ( s_graphicsoptions.aspectRatio.curvalue == ASPECTRATIO_4X3 )
{
s_graphicsoptions.mode.itemnames = NULL;
s_graphicsoptions.mode.listnames = NULL;
s_graphicsoptions.mode.listnames = s_resolutions;
s_graphicsoptions.mode.numitems = s_resolutionNums[ASPECTRATIO_4X3];
s_graphicsoptions.mode.curvalue = 1;
}
else
{
s_graphicsoptions.mode.listnames = NULL;
s_graphicsoptions.mode.itemnames = NULL;
s_graphicsoptions.mode.itemnames = (const char **)s_widescreenResStrings[s_graphicsoptions.aspectRatio.curvalue-1];
s_graphicsoptions.mode.numitems = s_resolutionNums[s_graphicsoptions.aspectRatio.curvalue];
s_graphicsoptions.mode.curvalue = 0;
}
s_graphicsoptions.lastRatio = s_graphicsoptions.aspectRatio.curvalue;
}
GraphicsOptions_CheckConfig();
}
/*
=================
ApplyChanges - Apply the changes from the video data screen
=================
*/
static void ApplyChanges2( void *unused, int notification )
{
if (notification != QM_ACTIVATED)
return;
trap_Cmd_ExecuteText( EXEC_APPEND, "vid_restart\n" );
}
/*
=================
GraphicsOptions_ApplyChanges
=================
*/
static void GraphicsOptions_ApplyChanges( void *unused, int notification )
{
if (notification != QM_ACTIVATED)
return;
switch ( s_graphicsoptions.texturebits.curvalue )
{
case 0:
trap_Cvar_SetValue( "r_texturebits", 0 );
break;
case 1:
trap_Cvar_SetValue( "r_texturebits", 16 );
break;
case 2:
trap_Cvar_SetValue( "r_texturebits", 32 );
break;
}
trap_Cvar_SetValue( "r_picmip", 3 - s_graphicsoptions.tq.curvalue );
trap_Cvar_SetValue( "r_allowExtensions", s_graphicsoptions.allow_extensions.curvalue );
trap_Cvar_SetValue( "r_fullscreen", s_graphicsoptions.fs.curvalue );
//trap_Cvar_Set( "r_glDriver", ( char * ) s_drivers[s_graphicsoptions.driver.curvalue] );
//TiM - handle the mode coupled with highscreen
if ( s_graphicsoptions.aspectRatio.curvalue == ASPECTRATIO_4X3 )
trap_Cvar_SetValue( "r_mode", (s_graphicsoptions.mode.curvalue + 2) );
else
{
//GSIO - TiM you actually forget that there is r_customPixelAspect/r_customaspect as well
if(s_graphicsoptions.aspectRatio.curvalue == ASPECTRATIO_16X9) {
trap_Cvar_SetValue("r_customPixelAspect", 1.7); //vEF
trap_Cvar_SetValue("r_customaspect", 1.7); //ioEF
} else {
trap_Cvar_SetValue("r_customPixelAspect", 1.6);
trap_Cvar_SetValue("r_customaspect", 1.6);
}
trap_Cvar_SetValue( "r_mode", -1 );
trap_Cvar_SetValue( "r_customWidth", (((videoResolutions_t *)s_widescreenResolutions[s_graphicsoptions.aspectRatio.curvalue-1])[s_graphicsoptions.mode.curvalue]).width );
trap_Cvar_SetValue( "r_customHeight", (((videoResolutions_t *)s_widescreenResolutions[s_graphicsoptions.aspectRatio.curvalue-1])[s_graphicsoptions.mode.curvalue]).height );
}
trap_Cvar_SetValue( "r_lowEndVideo", s_graphicsoptions.simpleshaders.curvalue );
trap_Cvar_SetValue( "r_ext_compress_textures", s_graphicsoptions.compresstextures.curvalue );
switch ( s_graphicsoptions.colordepth.curvalue )
{
case 0:
trap_Cvar_SetValue( "r_colorbits", 0 );
trap_Cvar_SetValue( "r_depthbits", 0 );
trap_Cvar_SetValue( "r_stencilbits", 0 );
break;
case 1:
trap_Cvar_SetValue( "r_colorbits", 16 );
trap_Cvar_SetValue( "r_depthbits", 16 );
trap_Cvar_SetValue( "r_stencilbits", 0 );
break;
case 2:
trap_Cvar_SetValue( "r_colorbits", 32 );
trap_Cvar_SetValue( "r_depthbits", 24 );
break;
}
// trap_Cvar_SetValue( "r_vertexLight", s_graphicsoptions.lighting.curvalue );
if ( s_graphicsoptions.geometry.curvalue == 2 )
{
trap_Cvar_SetValue( "r_lodBias", 0 );
trap_Cvar_SetValue( "r_subdivisions", 4 );
}
else if ( s_graphicsoptions.geometry.curvalue == 1 )
{
trap_Cvar_SetValue( "r_lodBias", 1 );
trap_Cvar_SetValue( "r_subdivisions", 12 );
}
else
{
trap_Cvar_SetValue( "r_lodBias", 1 );
trap_Cvar_SetValue( "r_subdivisions", 20 );
}
if ( s_graphicsoptions.filter.curvalue )
{
trap_Cvar_Set( "r_textureMode", "GL_LINEAR_MIPMAP_LINEAR" );
}
else
{
trap_Cvar_Set( "r_textureMode", "GL_LINEAR_MIPMAP_NEAREST" );
}
trap_Cmd_ExecuteText( EXEC_APPEND, "vid_restart\n" );
}
/*
=================
GraphicsOptions_Event
=================
*/
static void GraphicsOptions_Event( void* ptr, int event )
{
InitialVideoOptions_s *ivo;
if( event != QM_ACTIVATED ) {
return;
}
switch( ((menucommon_s*)ptr)->id ) {
case ID_LIST:
ivo = &s_ivo_templates[s_graphicsoptions.list.curvalue];
s_graphicsoptions.tq.curvalue = ivo->tq;
// s_graphicsoptions.lighting.curvalue = ivo->lighting;
s_graphicsoptions.colordepth.curvalue = ivo->colordepth;
s_graphicsoptions.texturebits.curvalue = ivo->texturebits;
s_graphicsoptions.geometry.curvalue = ivo->geometry;
s_graphicsoptions.filter.curvalue = ivo->filter;
s_graphicsoptions.fs.curvalue = ivo->fullscreen;
s_graphicsoptions.simpleshaders.curvalue = ivo->simpleshaders;
s_graphicsoptions.compresstextures.curvalue = ivo->compresstextures;
//TiM - revert the widescreen settings
if ( s_graphicsoptions.aspectRatio.curvalue != ASPECTRATIO_4X3 )
{
s_graphicsoptions.aspectRatio.curvalue = s_graphicsoptions.lastRatio = ASPECTRATIO_4X3;
s_graphicsoptions.mode.itemnames = NULL;
s_graphicsoptions.mode.listnames = s_resolutions;
s_graphicsoptions.mode.numitems = s_resolutionNums[ASPECTRATIO_4X3];
}
s_graphicsoptions.mode.curvalue = ivo->mode;
break;
case ID_DRIVERINFO:
UI_DriverInfo_Menu();
break;
case ID_BACK2:
UI_PopMenu();
break;
case ID_GRAPHICS:
break;
case ID_DISPLAY:
UI_PopMenu();
UI_VideoDataMenu(); // Move to the Video Menu
// UI_DisplayOptionsMenu();
break;
// case ID_SOUND:
// UI_PopMenu();
// UI_SoundOptionsMenu();
// break;
case ID_NETWORK:
UI_PopMenu();
UI_NetworkOptionsMenu();
break;
}
}
/*
================
GraphicsOptions_MenuDraw
================
*/
void GraphicsOptions_MenuDraw (void)
{
//APSFIX - rework this
GraphicsOptions_UpdateMenuItems();
Menu_Draw( &s_graphicsoptions.menu );
}
static qboolean GraphicsOptions_CheckWidescreen( void )
{
int j, i;
int customWidth = trap_Cvar_VariableValue( "r_customWidth" );
int customHeight = trap_Cvar_VariableValue( "r_customHeight" );
videoResolutions_t *v;
//double check
if ( s_graphicsoptions.mode.curvalue >= 0 )
return qfalse;
for ( j=0; j < s_wideScreenSets; j++ )
{
v = (videoResolutions_t *)s_widescreenResolutions[j];
//check if it matches the resolution
for ( i = 0; i < s_resolutionNums[j+1]; i++) //offset by 1 to avoid the 4X3 option
{
if ( v[i].width == customWidth && v[i].height == customHeight )
{
s_graphicsoptions.aspectRatio.curvalue = s_graphicsoptions.lastRatio = j+1;
//configure the mode list accordingly
s_graphicsoptions.mode.listnames = 0;
s_graphicsoptions.mode.itemnames = 0;
s_graphicsoptions.mode.itemnames = (const char **)s_widescreenResStrings[s_graphicsoptions.aspectRatio.curvalue-1];
s_graphicsoptions.mode.numitems = s_resolutionNums[s_graphicsoptions.aspectRatio.curvalue];
s_graphicsoptions.mode.curvalue = i;
return qtrue;
}
}
}
//ffs... no luck
return qfalse;
}
/*
=================
GraphicsOptions_SetMenuItems
=================
*/
static void GraphicsOptions_SetMenuItems( void )
{
s_graphicsoptions.aspectRatio.curvalue = ASPECTRATIO_4X3; //set aspect to 'Normal' for now
s_graphicsoptions.mode.curvalue = (trap_Cvar_VariableValue( "r_mode" ) - 2);
//TiM - adjust for widescreen
if ( s_graphicsoptions.mode.curvalue < 0 && !GraphicsOptions_CheckWidescreen() ) //less than 0 means custom resolution now
s_graphicsoptions.mode.curvalue = 1;
s_graphicsoptions.fs.curvalue = trap_Cvar_VariableValue("r_fullscreen");
s_graphicsoptions.allow_extensions.curvalue = trap_Cvar_VariableValue("r_allowExtensions");
s_graphicsoptions.simpleshaders.curvalue = trap_Cvar_VariableValue("r_lowEndVideo");
s_graphicsoptions.compresstextures.curvalue = trap_Cvar_VariableValue("r_ext_compress_textures");
s_graphicsoptions.tq.curvalue = 3-trap_Cvar_VariableValue( "r_picmip");
if ( s_graphicsoptions.tq.curvalue < 0 )
{
s_graphicsoptions.tq.curvalue = 0;
}
else if ( s_graphicsoptions.tq.curvalue > 3 )
{
s_graphicsoptions.tq.curvalue = 3;
}
// s_graphicsoptions.lighting.curvalue = trap_Cvar_VariableValue( "r_vertexLight" ) != 0;
switch ( ( int ) trap_Cvar_VariableValue( "r_texturebits" ) )
{
default:
case 0:
s_graphicsoptions.texturebits.curvalue = 0;
break;
case 16:
s_graphicsoptions.texturebits.curvalue = 1;
break;
case 32:
s_graphicsoptions.texturebits.curvalue = 2;
break;
}
if ( !Q_stricmp( UI_Cvar_VariableString( "r_textureMode" ), "GL_LINEAR_MIPMAP_NEAREST" ) )
{
s_graphicsoptions.filter.curvalue = 0;
}
else
{
s_graphicsoptions.filter.curvalue = 1;
}
if ( trap_Cvar_VariableValue( "r_lodBias" ) > 0 )
{
if ( trap_Cvar_VariableValue( "r_subdivisions" ) >= 20 )
{
s_graphicsoptions.geometry.curvalue = 0;
}
else
{
s_graphicsoptions.geometry.curvalue = 1;
}
}
else
{
s_graphicsoptions.geometry.curvalue = 2;
}
switch ( ( int ) trap_Cvar_VariableValue( "r_colorbits" ) )
{
default:
case 0:
s_graphicsoptions.colordepth.curvalue = 0;
break;
case 16:
s_graphicsoptions.colordepth.curvalue = 1;
break;
case 32:
s_graphicsoptions.colordepth.curvalue = 2;
break;
}
if ( s_graphicsoptions.fs.curvalue == 0 )
{
s_graphicsoptions.colordepth.curvalue = 0;
}
}
void VideoSideButtonsAction( qboolean result )
{
if ( result ) // Yes - do it
{
Video_MenuEvent(holdControlPtr, holdControlEvent);
}
}
/*
=================
VideoSideButtons_MenuEvent
=================
*/
static void VideoSideButtons_MenuEvent (void* ptr, int event)
{
if (event != QM_ACTIVATED)
return;
holdControlPtr = ptr;
holdControlEvent = event;
if (s_graphicsoptions.apply.generic.flags & QMF_BLINK) // Video apply changes button is flashing
{
UI_ConfirmMenu(menu_normal_text[MNT_LOOSEVIDSETTINGS], 0, VideoSideButtonsAction);
}
else // Go ahead, act normal
{
Video_MenuEvent (holdControlPtr, holdControlEvent);
}
}
/*
=================
Video_MenuEvent
=================
*/
static void Video_MenuEvent (void* ptr, int event)
{
menuframework_s* m;
if (event != QM_ACTIVATED)
return;
m = ((menucommon_s*)ptr)->parent;
switch (((menucommon_s*)ptr)->id)
{
case ID_VIDEO: // You're already in video menus, doofus
break;
case ID_ARROWDWN:
VideoDriver_Lines(1);
break;
case ID_ARROWUP:
VideoDriver_Lines(-1);
break;
case ID_VIDEODRIVERS:
if (m != &s_videodriver.menu) // Not already in menu?
{
UI_PopMenu(); // Get rid of whatever is ontop
UI_VideoDriverMenu(); // Move to the Controls Menu
}
break;
case ID_VIDEODATA:
if (m != &s_videodata.menu) // Not already in menu?
{
UI_PopMenu(); // Get rid of whatever is ontop
UI_VideoDataMenu(); // Move to the Controls Menu
}
break;
case ID_VIDEODATA2:
if (m != &s_videodata2.menu) // Not already in menu?
{
UI_PopMenu(); // Get rid of whatever is ontop
UI_VideoData2SettingsMenu(); // Move to the Controls Menu
}
break;
case ID_CONTROLS:
UI_PopMenu(); // Get rid of whatever is ontop
// UI_SetupWeaponsMenu(); // Move to the Controls Menu
break;
case ID_SOUND:
UI_PopMenu(); // Get rid of whatever is ontop
UI_SoundMenu(); // Move to the Sound Menu
break;
case ID_GAMEOPTIONS:
UI_PopMenu(); // Get rid of whatever is ontop
UI_GameOptionsMenu(); // Move to the Game Options Menu
break;
case ID_CDKEY:
UI_PopMenu(); // Get rid of whatever is ontop
UI_CDKeyMenu(); // Move to the CD Key Menu
break;
case ID_MAINMENU:
UI_PopMenu();
break;
case ID_INGAMEMENU :
UI_PopMenu();
break;
}
}
/*
=================
M_VideoDataMenu_Graphics
=================
*/
void M_VideoDataMenu_Graphics (void)
{
UI_MenuFrame(&s_videodata.menu);
UI_DrawProportionalString( 74, 66, "207",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "44909",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "357",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "250624",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "456730-1",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_Setup_MenuButtons();
// Rest of Bottom1_Graphics
// trap_R_SetColor( colorTable[CT_LTORANGE]);
// UI_DrawHandlePic( 30, 203, 47, 69, uis.whiteShader); // Top Left column above two buttons
// UI_DrawHandlePic( 30, 344, 47, 45, uis.whiteShader); // Top Left column below two buttons
// Brackets around Video Data
trap_R_SetColor( colorTable[CT_LTPURPLE1]);
UI_DrawHandlePic(158,163, 16, 16, uis.graphicBracket1CornerLU);
UI_DrawHandlePic(158,179, 8, 233, uis.whiteShader);
UI_DrawHandlePic(158,412, 16, -16, uis.graphicBracket1CornerLU); //LD
UI_DrawHandlePic(174,163, 320, 8, uis.whiteShader); // Top line
UI_DrawHandlePic(494,163, 128, 128, s_videodata.swooshTop); // Top swoosh
UI_DrawHandlePic(501,188, 110, 54, uis.whiteShader); // Top right column
UI_DrawHandlePic(501,348, 110, 55, uis.whiteShader); // Bottom right column
UI_DrawHandlePic(494,406, 128, 128, s_videodata.swooshBottom); // Bottom swoosh
UI_DrawHandlePic(174,420, 320, 8, uis.whiteShader); // Bottom line
}
/*
=================
VideoData_MenuDraw
=================
*/
static void VideoData_MenuDraw (void)
{
GraphicsOptions_UpdateMenuItems();
M_VideoDataMenu_Graphics();
Menu_Draw( &s_videodata.menu );
}
/*
=================
UI_VideoDataMenu_Cache
=================
*/
void UI_VideoDataMenu_Cache(void)
{
s_videodata.swooshTop = trap_R_RegisterShaderNoMip("menu/common/swoosh_top.tga");
s_videodata.swooshBottom= trap_R_RegisterShaderNoMip("menu/common/swoosh_bottom.tga");
s_videodata.swooshTopSmall= trap_R_RegisterShaderNoMip("menu/common/swoosh_topsmall.tga");
s_videodata.swooshBottomSmall= trap_R_RegisterShaderNoMip("menu/common/swoosh_bottomsmall.tga");
}
/*
=================
VideoData_MenuInit
=================
*/
static void VideoData_MenuInit( void )
{
int x,y,width,inc;
UI_VideoDataMenu_Cache();
// Menu Data
s_videodata.menu.nitems = 0;
s_videodata.menu.wrapAround = qtrue;
s_videodata.menu.draw = VideoData_MenuDraw;
s_videodata.menu.fullscreen = qtrue;
s_videodata.menu.descX = MENU_DESC_X;
s_videodata.menu.descY = MENU_DESC_Y;
s_videodata.menu.listX = 230;
s_videodata.menu.listY = 188;
s_videodata.menu.titleX = MENU_TITLE_X;
s_videodata.menu.titleY = MENU_TITLE_Y;
s_videodata.menu.titleI = MNT_CONTROLSMENU_TITLE;
s_videodata.menu.footNoteEnum = MNT_VIDEOSETUP;
x = 170;
y = 178;
width = 145;
s_graphicsoptions.list.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.list.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.list.generic.x = x;
s_graphicsoptions.list.generic.y = y;
s_graphicsoptions.list.generic.callback = GraphicsOptions_Event;
s_graphicsoptions.list.generic.id = ID_LIST;
s_graphicsoptions.list.textEnum = MBT_VIDEOOPTIONS;
s_graphicsoptions.list.textcolor = CT_BLACK;
s_graphicsoptions.list.textcolor2 = CT_WHITE;
s_graphicsoptions.list.color = CT_DKPURPLE1;
s_graphicsoptions.list.color2 = CT_LTPURPLE1;
s_graphicsoptions.list.textX = 5;
s_graphicsoptions.list.textY = 2;
s_graphicsoptions.list.listnames = s_graphics_options_Names;
s_graphicsoptions.list.width = width;
inc = 20;
y += inc;
s_graphicsoptions.allow_extensions.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.allow_extensions.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.allow_extensions.generic.x = x;
s_graphicsoptions.allow_extensions.generic.y = y;
s_graphicsoptions.allow_extensions.textEnum = MBT_VIDEOGLEXTENTIONS;
s_graphicsoptions.allow_extensions.textcolor = CT_BLACK;
s_graphicsoptions.allow_extensions.textcolor2 = CT_WHITE;
s_graphicsoptions.allow_extensions.color = CT_DKPURPLE1;
s_graphicsoptions.allow_extensions.color2 = CT_LTPURPLE1;
s_graphicsoptions.allow_extensions.textX = 5;
s_graphicsoptions.allow_extensions.textY = 2;
s_graphicsoptions.allow_extensions.listnames = s_OffOnNone_Names;
s_graphicsoptions.allow_extensions.width = width;
y += inc;
s_graphicsoptions.aspectRatio.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.aspectRatio.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.aspectRatio.generic.x = x;
s_graphicsoptions.aspectRatio.generic.y = y;
s_graphicsoptions.aspectRatio.textEnum = MBT_ASPECTRATIO;
s_graphicsoptions.aspectRatio.textcolor = CT_BLACK;
s_graphicsoptions.aspectRatio.textcolor2 = CT_WHITE;
s_graphicsoptions.aspectRatio.color = CT_DKPURPLE1;
s_graphicsoptions.aspectRatio.color2 = CT_LTPURPLE1;
s_graphicsoptions.aspectRatio.textX = 5;
s_graphicsoptions.aspectRatio.textY = 2;
s_graphicsoptions.aspectRatio.listnames = s_aspectRatios;
s_graphicsoptions.aspectRatio.width = width;
y += inc;
// references/modifies "r_mode"
// TiM: can now be potentially '-1',
// in which case 'r_customeheight' and 'r_customwidth'
// will be used
s_graphicsoptions.mode.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.mode.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.mode.generic.x = x;
s_graphicsoptions.mode.generic.y = y;
s_graphicsoptions.mode.generic.callback = GraphicsOptions_Event;
s_graphicsoptions.mode.textEnum = MBT_VIDEOMODE;
s_graphicsoptions.mode.textcolor = CT_BLACK;
s_graphicsoptions.mode.textcolor2 = CT_WHITE;
s_graphicsoptions.mode.color = CT_DKPURPLE1;
s_graphicsoptions.mode.color2 = CT_LTPURPLE1;
s_graphicsoptions.mode.textX = 5;
s_graphicsoptions.mode.textY = 2;
s_graphicsoptions.mode.listnames = s_resolutions;
s_graphicsoptions.mode.width = width;
y += inc;
s_graphicsoptions.colordepth.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.colordepth.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.colordepth.generic.x = x;
s_graphicsoptions.colordepth.generic.y = y;
s_graphicsoptions.colordepth.textEnum = MBT_VIDEOCOLORDEPTH;
s_graphicsoptions.colordepth.textcolor = CT_BLACK;
s_graphicsoptions.colordepth.textcolor2 = CT_WHITE;
s_graphicsoptions.colordepth.color = CT_DKPURPLE1;
s_graphicsoptions.colordepth.color2 = CT_LTPURPLE1;
s_graphicsoptions.colordepth.textX = 5;
s_graphicsoptions.colordepth.textY = 2;
s_graphicsoptions.colordepth.listnames = s_colordepth_Names;
s_graphicsoptions.colordepth.width = width;
y += inc;
s_graphicsoptions.fs.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.fs.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.fs.generic.x = x;
s_graphicsoptions.fs.generic.y = y;
s_graphicsoptions.fs.textEnum = MBT_VIDEOFULLSCREEN;
s_graphicsoptions.fs.textcolor = CT_BLACK;
s_graphicsoptions.fs.textcolor2 = CT_WHITE;
s_graphicsoptions.fs.color = CT_DKPURPLE1;
s_graphicsoptions.fs.color2 = CT_LTPURPLE1;
s_graphicsoptions.fs.textX = 5;
s_graphicsoptions.fs.textY = 2;
s_graphicsoptions.fs.listnames = s_OffOnNone_Names;
s_graphicsoptions.fs.width = width;
/*
y += inc;
s_graphicsoptions.lighting.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.lighting.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.lighting.generic.x = x;
s_graphicsoptions.lighting.generic.y = y;
s_graphicsoptions.lighting.textEnum = MBT_VIDEOLIGHTING;
s_graphicsoptions.lighting.textcolor = CT_BLACK;
s_graphicsoptions.lighting.textcolor2 = CT_WHITE;
s_graphicsoptions.lighting.color = CT_DKPURPLE1;
s_graphicsoptions.lighting.color2 = CT_LTPURPLE1;
s_graphicsoptions.lighting.textX = 5;
s_graphicsoptions.lighting.textY = 2;
s_graphicsoptions.lighting.listnames = s_lighting_Names;
s_graphicsoptions.lighting.width = width;
*/
y += inc;
// references/modifies "r_lodBias" & "subdivisions"
s_graphicsoptions.geometry.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.geometry.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.geometry.generic.x = x;
s_graphicsoptions.geometry.generic.y = y;
s_graphicsoptions.geometry.textEnum = MBT_VIDEOGEOMETRY;
s_graphicsoptions.geometry.textcolor = CT_BLACK;
s_graphicsoptions.geometry.textcolor2 = CT_WHITE;
s_graphicsoptions.geometry.color = CT_DKPURPLE1;
s_graphicsoptions.geometry.color2 = CT_LTPURPLE1;
s_graphicsoptions.geometry.textX = 5;
s_graphicsoptions.geometry.textY = 2;
s_graphicsoptions.geometry.listnames = s_quality_Names;
s_graphicsoptions.geometry.width = width;
y += inc;
s_graphicsoptions.tq.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.tq.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.tq.generic.x = x;
s_graphicsoptions.tq.generic.y = y;
s_graphicsoptions.tq.textEnum = MBT_VIDEOTEXTUREDETAIL;
s_graphicsoptions.tq.textcolor = CT_BLACK;
s_graphicsoptions.tq.textcolor2 = CT_WHITE;
s_graphicsoptions.tq.color = CT_DKPURPLE1;
s_graphicsoptions.tq.color2 = CT_LTPURPLE1;
s_graphicsoptions.tq.textX = 5;
s_graphicsoptions.tq.textY = 2;
s_graphicsoptions.tq.listnames = s_4quality_Names;
s_graphicsoptions.tq.width = width;
y += inc;
// references/modifies "r_textureBits"
s_graphicsoptions.texturebits.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.texturebits.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.texturebits.generic.x = x;
s_graphicsoptions.texturebits.generic.y = y;
s_graphicsoptions.texturebits.textEnum = MBT_VIDEOTEXTUREBITS;
s_graphicsoptions.texturebits.textcolor = CT_BLACK;
s_graphicsoptions.texturebits.textcolor2 = CT_WHITE;
s_graphicsoptions.texturebits.color = CT_DKPURPLE1;
s_graphicsoptions.texturebits.color2 = CT_LTPURPLE1;
s_graphicsoptions.texturebits.textX = 5;
s_graphicsoptions.texturebits.textY = 2;
s_graphicsoptions.texturebits.listnames = s_tqbits_Names;
s_graphicsoptions.texturebits.width = width;
y += inc;
// references/modifies "r_textureMode"
s_graphicsoptions.filter.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.filter.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.filter.generic.x = x;
s_graphicsoptions.filter.generic.y = y;
s_graphicsoptions.filter.textEnum = MBT_VIDEOTEXTUREFILTER;
s_graphicsoptions.filter.textcolor = CT_BLACK;
s_graphicsoptions.filter.textcolor2 = CT_WHITE;
s_graphicsoptions.filter.color = CT_DKPURPLE1;
s_graphicsoptions.filter.color2 = CT_LTPURPLE1;
s_graphicsoptions.filter.textX = 5;
s_graphicsoptions.filter.textY = 2;
s_graphicsoptions.filter.listnames = s_filter_Names;
s_graphicsoptions.filter.width = width;
y += inc;
// references/modifies "r_lowEndVideo"
s_graphicsoptions.simpleshaders.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.simpleshaders.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.simpleshaders.generic.x = x;
s_graphicsoptions.simpleshaders.generic.y = y;
s_graphicsoptions.simpleshaders.textEnum = MBT_SIMPLESHADER;
s_graphicsoptions.simpleshaders.textcolor = CT_BLACK;
s_graphicsoptions.simpleshaders.textcolor2 = CT_WHITE;
s_graphicsoptions.simpleshaders.color = CT_DKPURPLE1;
s_graphicsoptions.simpleshaders.color2 = CT_LTPURPLE1;
s_graphicsoptions.simpleshaders.textX = 5;
s_graphicsoptions.simpleshaders.textY = 2;
s_graphicsoptions.simpleshaders.listnames = s_OffOnNone_Names;
s_graphicsoptions.simpleshaders.width = width;
y += inc;
// references/modifies "r_ext_compress_textures"
s_graphicsoptions.compresstextures.generic.type = MTYPE_SPINCONTROL;
s_graphicsoptions.compresstextures.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_graphicsoptions.compresstextures.generic.x = x;
s_graphicsoptions.compresstextures.generic.y = y;
s_graphicsoptions.compresstextures.textEnum = MBT_COMPRESSEDTEXTURES;
s_graphicsoptions.compresstextures.textcolor = CT_BLACK;
s_graphicsoptions.compresstextures.textcolor2 = CT_WHITE;
s_graphicsoptions.compresstextures.color = CT_DKPURPLE1;
s_graphicsoptions.compresstextures.color2 = CT_LTPURPLE1;
s_graphicsoptions.compresstextures.textX = 5;
s_graphicsoptions.compresstextures.textY = 2;
s_graphicsoptions.compresstextures.listnames = s_OffOnNone_Names;
s_graphicsoptions.compresstextures.width = width;
s_graphicsoptions.apply.generic.type = MTYPE_ACTION;
s_graphicsoptions.apply.generic.flags = QMF_HIGHLIGHT_IF_FOCUS|QMF_GRAYED;
s_graphicsoptions.apply.generic.x = 501;
s_graphicsoptions.apply.generic.y = 245;
s_graphicsoptions.apply.generic.callback = GraphicsOptions_ApplyChanges;
s_graphicsoptions.apply.textEnum = MBT_VIDEOAPPLYCHANGES;
s_graphicsoptions.apply.textcolor = CT_BLACK;
s_graphicsoptions.apply.textcolor2 = CT_WHITE;
s_graphicsoptions.apply.textcolor3 = CT_LTGREY;
s_graphicsoptions.apply.color = CT_DKPURPLE1;
s_graphicsoptions.apply.color2 = CT_LTPURPLE1;
s_graphicsoptions.apply.color3 = CT_DKGREY;
s_graphicsoptions.apply.textX = 5;
s_graphicsoptions.apply.textY = 80;
s_graphicsoptions.apply.width = 110;
s_graphicsoptions.apply.height = 100;
SetupMenu_TopButtons(&s_videodata.menu,MENU_VIDEODATA,&s_graphicsoptions.apply);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.list);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.allow_extensions);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.aspectRatio);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.mode);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.colordepth);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.fs);
// Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.lighting);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.geometry);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.tq);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.texturebits);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.filter);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.simpleshaders);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.compresstextures);
Menu_AddItem( &s_videodata.menu, ( void * )&s_graphicsoptions.apply);
Video_SideButtons(&s_videodata.menu,ID_VIDEODATA);
GraphicsOptions_SetMenuItems();
GraphicsOptions_GetInitialVideo();
/*if ( uis.glconfig.driverType == GLDRV_ICD &&
uis.glconfig.hardwareType == GLHW_3DFX_2D3D )
{
s_graphicsoptions.driver.generic.flags |= QMF_HIDDEN|QMF_INACTIVE;
}*/
}
/*
=================
UI_VideoDataMenu
=================
*/
void UI_VideoDataMenu( void )
{
VideoData_MenuInit();
UI_PushMenu( &s_videodata.menu );
}
/*
=================
Video_SideButtons
=================
*/
void Video_SideButtons(menuframework_s *menu,int menuType)
{
// Button Data
s_video_data.generic.type = MTYPE_BITMAP;
s_video_data.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_video_data.generic.x = video_sidebuttons[0][0];
s_video_data.generic.y = video_sidebuttons[0][1];
s_video_data.generic.name = GRAPHIC_SQUARE;
s_video_data.generic.id = ID_VIDEODATA;
if (menuType == ID_VIDEODATA)
{
s_video_data.generic.callback = VideoSideButtons_MenuEvent;
}
else
{
s_video_data.generic.callback = Video_MenuEvent;
}
s_video_data.width = MENU_BUTTON_MED_WIDTH - 10;
s_video_data.height = MENU_BUTTON_MED_HEIGHT;
s_video_data.color = CT_DKPURPLE1;
s_video_data.color2 = CT_LTPURPLE1;
s_video_data.textX = 5;
s_video_data.textY = 2;
s_video_data.textEnum = MBT_VIDEODATA;
if (menuType == ID_VIDEODATA)
{
s_video_data.textcolor = CT_WHITE;
s_video_data.textcolor2 = CT_WHITE;
s_video_data.generic.flags = QMF_GRAYED;
}
else
{
s_video_data.textcolor = CT_BLACK;
s_video_data.textcolor2 = CT_WHITE;
}
s_video_data2.generic.type = MTYPE_BITMAP;
s_video_data2.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_video_data2.generic.x = video_sidebuttons[1][0];
s_video_data2.generic.y = video_sidebuttons[1][1];
s_video_data2.generic.name = GRAPHIC_SQUARE;
s_video_data2.generic.id = ID_VIDEODATA2;
if (menuType == ID_VIDEODATA)
{
s_video_data2.generic.callback = VideoSideButtons_MenuEvent;
}
else
{
s_video_data2.generic.callback = Video_MenuEvent;
}
s_video_data2.width = MENU_BUTTON_MED_WIDTH - 10;
s_video_data2.height = MENU_BUTTON_MED_HEIGHT;
s_video_data2.color = CT_DKPURPLE1;
s_video_data2.color2 = CT_LTPURPLE1;
s_video_data2.textX = 5;
s_video_data2.textY = 2;
s_video_data2.textEnum = MBT_VIDEODATA2;
s_video_data2.textcolor = CT_WHITE;
s_video_data2.textcolor2 = CT_WHITE;
if (menuType == ID_VIDEODATA2)
{
s_video_data2.textcolor = CT_WHITE;
s_video_data2.textcolor2 = CT_WHITE;
s_video_data2.generic.flags = QMF_GRAYED;
}
else
{
s_video_data2.textcolor = CT_BLACK;
s_video_data2.textcolor2 = CT_WHITE;
}
s_video_drivers.generic.type = MTYPE_BITMAP;
s_video_drivers.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_video_drivers.generic.x = video_sidebuttons[2][0];
s_video_drivers.generic.y = video_sidebuttons[2][1];
s_video_drivers.generic.name = GRAPHIC_SQUARE;
s_video_drivers.generic.id = ID_VIDEODRIVERS;
if (menuType == ID_VIDEODATA)
{
s_video_drivers.generic.callback = VideoSideButtons_MenuEvent;
}
else
{
s_video_drivers.generic.callback = Video_MenuEvent;
}
s_video_drivers.width = MENU_BUTTON_MED_WIDTH - 10;
s_video_drivers.height = MENU_BUTTON_MED_HEIGHT;
s_video_drivers.color = CT_DKPURPLE1;
s_video_drivers.color2 = CT_LTPURPLE1;
s_video_drivers.textX = 5;
s_video_drivers.textY = 2;
s_video_drivers.textEnum = MBT_VIDEODRIVERS;
if (menuType == ID_VIDEODRIVERS)
{
s_video_drivers.textcolor = CT_WHITE;
s_video_drivers.textcolor2 = CT_WHITE;
s_video_drivers.generic.flags = QMF_GRAYED;
}
else
{
s_video_drivers.textcolor = CT_BLACK;
s_video_drivers.textcolor2 = CT_WHITE;
}
Menu_AddItem( menu, ( void * )&s_video_data);
Menu_AddItem( menu, ( void * )&s_video_data2);
Menu_AddItem( menu, ( void * )&s_video_drivers);
}
/*
=================
VideoDriver_Lines
=================
*/
void VideoDriver_Lines(int increment)
{
int i,i2;
s_videodriver.currentDriverLine += increment;
i=0;
i2 = 0;
i = (s_videodriver.currentDriverLine * 2);
if (i<0)
{
s_videodriver.currentDriverLine = 0;
return;
}
if (i>s_videodriver.driverCnt)
{
s_videodriver.currentDriverLine = (s_videodriver.driverCnt/2);
return;
}
else if (i==s_videodriver.driverCnt)
{
s_videodriver.currentDriverLine = (s_videodriver.driverCnt/2) - 1;
return;
}
if (!s_videodriver.drivers[i + 22])
{
s_videodriver.currentDriverLine -= increment;
s_videodriver.activeArrowDwn = qfalse;
return;
}
for (; i < MAX_VID_DRIVERS; i++)
{
if (s_videodriver.drivers[i])
{
if (i2<24)
{
((menutext_s *)g_videolines[i2])->string = s_videodriver.drivers[i];
i2++;
}
}
else
{
if (i2<24)
{
((menutext_s *)g_videolines[i2])->string = NULL;
i2++;
}
else
{
break;
}
}
}
// Set up arrows
if (increment > 0)
{
s_videodriver.activeArrowUp = qtrue;
}
if (s_videodriver.currentDriverLine < 1)
{
s_videodriver.activeArrowUp = qfalse;
}
if (i2>= 24)
{
s_videodriver.activeArrowDwn = qtrue;
}
i = (s_videodriver.currentDriverLine * 2);
if (!s_videodriver.drivers[i + 24])
{
s_videodriver.activeArrowDwn = qfalse;
return;
}
}
/*
=================
VideoDriver_LineSetup
=================
*/
void VideoDriver_LineSetup(void)
{
char *bufhold;
char *eptr;
int i;
strcpy( s_videodriver.extensionsString, uis.glconfig.extensions_string );
eptr = s_videodriver.extensionsString;
i=0;
s_videodriver.driverCnt = 0;
while ( i < MAX_VID_DRIVERS && *eptr )
{
while ( *eptr )
{
bufhold = eptr;
while(*bufhold != ' ')
{
++bufhold;
}
*bufhold = 0;
s_videodriver.drivers[i] = eptr;
if (i<24)
{
((menutext_s *)g_videolines[i])->string = eptr;
}
bufhold++;
eptr = bufhold;
s_videodriver.driverCnt++;
i++;
}
}
// Set down arrows
if (i> 24)
{
s_videodriver.activeArrowDwn = qtrue;
}
s_videodriver.currentDriverLine = 0;
}
/*
=================
VideoDriver_MenuKey
=================
*/
sfxHandle_t VideoDriver_MenuKey (int key)
{
return ( Menu_DefaultKey( &s_videodriver.menu, key ) );
}
/*
=================
M_VideoDriverMenu_Graphics
=================
*/
void M_VideoDriverMenu_Graphics (void)
{
float labelColor[] = { 0, 1.0, 0, 1.0 };
float textColor[] = { 1, 1, 1, 1 };
int x,y,x2,x3;
UI_MenuFrame(&s_videodriver.menu);
UI_DrawProportionalString( 74, 66, "207",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "44909",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "357",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "250624",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "456730-1",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_Setup_MenuButtons();
// trap_R_SetColor( colorTable[CT_DKPURPLE1]);
// UI_DrawHandlePic( 30, 203, 47, 69, uis.whiteShader); // Top Left column above two buttons
// UI_DrawHandlePic( 30, 344, 47, 45, uis.whiteShader); // Top Left column below two buttons
// Top Frame
UI_DrawHandlePic( 178, 136, 32, -32, s_videodriver.corner_ll_8_16); // UL
UI_DrawHandlePic( 178, 221, 32, 32, s_videodriver.corner_ll_8_16); // LL
UI_DrawHandlePic( 556, 136, -32, -32, s_videodriver.corner_ll_8_16); // UR
UI_DrawHandlePic( 556, 221, -32, 32, s_videodriver.corner_ll_8_16); // LR
UI_DrawHandlePic(194,157, 378, 8, uis.whiteShader); // Top line
UI_DrawHandlePic(178,165, 16, 60, uis.whiteShader); // Left side
UI_DrawHandlePic(572,165, 16, 60, uis.whiteShader); // Right side
UI_DrawHandlePic(194,224, 378, 8, uis.whiteShader); // Bottom line
// Lower Frame
UI_DrawHandlePic( 178, 226, 32, -32, s_videodriver.corner_ll_16_16); // UL
UI_DrawHandlePic( 178, 414, 32, 32, s_videodriver.corner_ll_16_16); // LL
UI_DrawHandlePic( 556, 226, -32, -32, s_videodriver.corner_ll_16_16); // UR
UI_DrawHandlePic( 556, 414, -32, 32, s_videodriver.corner_ll_16_16); // LR
UI_DrawHandlePic( 194, 237, 378, 16, uis.whiteShader); // Top line
UI_DrawHandlePic( 178, 252, 16, 168, uis.whiteShader); // Left side
UI_DrawHandlePic( 572, 261, 16, 15, uis.whiteShader); // Right side
UI_DrawHandlePic( 572, 279, 16, 114, uis.whiteShader); // Right side
UI_DrawHandlePic( 572, 396, 16, 15, uis.whiteShader); // Right side
UI_DrawHandlePic( 194, 419, 378, 16, uis.whiteShader); // Bottom line
trap_R_SetColor( colorTable[CT_LTGOLD1]);
if (s_videodriver.activeArrowUp)
{
UI_DrawHandlePic( 382, 237, 32, -14, s_videodriver.arrow_dn);
}
if (s_videodriver.activeArrowDwn)
{
UI_DrawHandlePic( 382, 422, 32, 14, s_videodriver.arrow_dn);
}
x = 204;
x2 = 259;
x3 = x2 + 150;
y = 168;
UI_DrawProportionalString( x, y, menu_normal_text[MNT_VENDOR], UI_LEFT|UI_TINYFONT, labelColor );
UI_DrawProportionalString( x2, y, uis.glconfig.vendor_string, UI_LEFT|UI_TINYFONT, textColor );
y += 14;
UI_DrawProportionalString( x, y, menu_normal_text[MNT_VERSION], UI_LEFT|UI_TINYFONT, labelColor );
UI_DrawProportionalString( x2, y, uis.glconfig.version_string, UI_LEFT|UI_TINYFONT, textColor );
y += 14;
UI_DrawProportionalString( x, y, menu_normal_text[MNT_RENDERER], UI_LEFT|UI_TINYFONT, labelColor );
UI_DrawProportionalString( x2, y, uis.glconfig.renderer_string, UI_LEFT|UI_TINYFONT, textColor );
y += 14;
UI_DrawProportionalString( x, y, menu_normal_text[MNT_PIXELFORMAT], UI_LEFT|UI_TINYFONT, labelColor );
UI_DrawProportionalString( x2, y, va("color(%d-bits) Z(%d-bit) stencil(%d-bits)", uis.glconfig.colorBits, uis.glconfig.depthBits, uis.glconfig.stencilBits), UI_LEFT|UI_TINYFONT, textColor );
}
/*
=================
VideoDriver_MenuDraw
=================
*/
static void VideoDriver_MenuDraw (void)
{
M_VideoDriverMenu_Graphics();
Menu_Draw( &s_videodriver.menu );
}
/*
=================
UI_VideoDriverMenu_Cache
=================
*/
void UI_VideoDriverMenu_Cache(void)
{
s_videodriver.corner_ll_16_16 = trap_R_RegisterShaderNoMip("menu/common/corner_ll_16_16.tga");
s_videodriver.corner_ll_8_16 = trap_R_RegisterShaderNoMip("menu/common/corner_ll_8_16.tga");
s_videodriver.arrow_dn = trap_R_RegisterShaderNoMip("menu/common/arrow_dn_16.tga");
}
/*
=================
Video_MenuInit
=================
*/
static void VideoDriver_MenuInit( void )
{
int i,x,y,x2;
UI_VideoDriverMenu_Cache();
s_videodriver.menu.nitems = 0;
s_videodriver.menu.wrapAround = qtrue;
// s_videodriver.menu.opening = NULL;
// s_videodriver.menu.closing = NULL;
s_videodriver.menu.draw = VideoDriver_MenuDraw;
s_videodriver.menu.key = VideoDriver_MenuKey;
s_videodriver.menu.fullscreen = qtrue;
s_videodriver.menu.descX = MENU_DESC_X;
s_videodriver.menu.descY = MENU_DESC_Y;
s_videodriver.menu.listX = 230;
s_videodriver.menu.listY = 188;
s_videodriver.menu.titleX = MENU_TITLE_X;
s_videodriver.menu.titleY = MENU_TITLE_Y;
s_videodriver.menu.titleI = MNT_CONTROLSMENU_TITLE;
s_videodriver.menu.footNoteEnum = MNT_VIDEODRIVER;
SetupMenu_TopButtons(&s_videodriver.menu,MENU_VIDEO,NULL);
Video_SideButtons(&s_videodriver.menu,ID_VIDEODRIVERS);
s_videodriver.arrowup.generic.type = MTYPE_BITMAP;
s_videodriver.arrowup.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_videodriver.arrowup.generic.x = 572;
s_videodriver.arrowup.generic.y = 262;
s_videodriver.arrowup.generic.name = "menu/common/arrow_up_16.tga";
s_videodriver.arrowup.generic.id = ID_ARROWUP;
s_videodriver.arrowup.generic.callback = Video_MenuEvent;
s_videodriver.arrowup.width = 16;
s_videodriver.arrowup.height = 16;
s_videodriver.arrowup.color = CT_DKBLUE1;
s_videodriver.arrowup.color2 = CT_LTBLUE1;
s_videodriver.arrowup.textX = 0;
s_videodriver.arrowup.textY = 0;
s_videodriver.arrowup.textEnum = MBT_NONE;
s_videodriver.arrowup.textcolor = CT_BLACK;
s_videodriver.arrowup.textcolor2 = CT_WHITE;
Menu_AddItem( &s_videodriver.menu,( void * ) &s_videodriver.arrowup);
s_videodriver.arrowdwn.generic.type = MTYPE_BITMAP;
s_videodriver.arrowdwn.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_videodriver.arrowdwn.generic.x = 572;
s_videodriver.arrowdwn.generic.y = 397;
s_videodriver.arrowdwn.generic.name = "menu/common/arrow_dn_16.tga";
s_videodriver.arrowdwn.generic.id = ID_ARROWDWN;
s_videodriver.arrowdwn.generic.callback = Video_MenuEvent;
s_videodriver.arrowdwn.width = 16;
s_videodriver.arrowdwn.height = 16;
s_videodriver.arrowdwn.color = CT_DKBLUE1;
s_videodriver.arrowdwn.color2 = CT_LTBLUE1;
s_videodriver.arrowdwn.textX = 0;
s_videodriver.arrowdwn.textY = 0;
s_videodriver.arrowdwn.textEnum = MBT_NONE;
s_videodriver.arrowdwn.textcolor = CT_BLACK;
s_videodriver.arrowdwn.textcolor2 = CT_WHITE;
Menu_AddItem( &s_videodriver.menu, ( void * ) &s_videodriver.arrowdwn);
s_videodriver.activeArrowDwn = qfalse;
s_videodriver.activeArrowUp = qfalse;
x = 204;
x2 = 404;
y = 260;
for (i=0;i<24;i++)
{
((menutext_s *)g_videolines[i])->generic.type = MTYPE_TEXT;
((menutext_s *)g_videolines[i])->generic.flags = QMF_LEFT_JUSTIFY | QMF_INACTIVE;
((menutext_s *)g_videolines[i])->generic.y = y;
if ((i % 2 ) == 0)
{
((menutext_s *)g_videolines[i])->generic.x = x;
}
else
{
((menutext_s *)g_videolines[i])->generic.x = x2;
y +=13;
}
((menutext_s *)g_videolines[i])->buttontextEnum = MBT_NONE;
((menutext_s *)g_videolines[i])->style = UI_TINYFONT | UI_LEFT;
((menutext_s *)g_videolines[i])->color = colorTable[CT_LTPURPLE1];
Menu_AddItem( &s_videodriver.menu, ( void * )g_videolines[i]);
}
// Print extensions
VideoDriver_LineSetup();
}
/*
=================
UI_VideoDriverMenu
=================
*/
void UI_VideoDriverMenu( void )
{
if (!s_videodriver.menu.initialized)
{
VideoDriver_MenuInit();
}
UI_PushMenu( &s_videodriver.menu );
}
/*
=================
GammaCallback2
=================
*/
void GammaCallback2( void *s, int notification )
{
if (notification != QM_ACTIVATED)
return;
s_videodata2.apply_action2.generic.flags &= ~QMF_GRAYED;
s_videodata2.apply_action2.generic.flags |= QMF_BLINK;
GammaCallback(s,notification );
}
/*
=================
M_VideoData2Menu_Graphics
=================
*/
void M_VideoData2Menu_Graphics (void)
{
int y;
UI_MenuFrame(&s_videodata2.menu);
UI_DrawProportionalString( 74, 66, "925",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "88PK",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "8125",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "358677",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "3-679",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_Setup_MenuButtons();
y = 191;
if (uis.glconfig.deviceSupportsGamma)
{
trap_R_SetColor( colorTable[CT_DKGREY]);
UI_DrawHandlePic( 178, y, 68, 68, uis.whiteShader); //
trap_R_SetColor( colorTable[CT_WHITE]);
UI_DrawHandlePic( 180, y+2, 64, 64, s_videodata2.gamma); // Starfleet graphic
UI_DrawProportionalString( 256, y + 5, menu_normal_text[MNT_GAMMA_LINE1],UI_SMALLFONT, colorTable[CT_LTGOLD1]);
UI_DrawProportionalString( 256, y + 25, menu_normal_text[MNT_GAMMA_LINE2],UI_SMALLFONT, colorTable[CT_LTGOLD1]);
UI_DrawProportionalString( 256, y + 45, menu_normal_text[MNT_GAMMA_LINE3],UI_SMALLFONT,colorTable[CT_LTGOLD1]);
}
else
{
UI_DrawProportionalString( 178, y + 5, menu_normal_text[MNT_GAMMA2_LINE1],UI_SMALLFONT, colorTable[CT_LTGOLD1]);
UI_DrawProportionalString( 178, y + 25,menu_normal_text[MNT_GAMMA2_LINE2],UI_SMALLFONT, colorTable[CT_LTGOLD1]);
}
// Brackets around Video Data
trap_R_SetColor( colorTable[CT_LTPURPLE1]);
UI_DrawHandlePic(158,163, 16, 16, uis.graphicBracket1CornerLU);
UI_DrawHandlePic(158,179, 8, 233, uis.whiteShader);
UI_DrawHandlePic(158,412, 16, -16, uis.graphicBracket1CornerLU); //LD
UI_DrawHandlePic(174,163, 408, 8, uis.whiteShader); // Top line
UI_DrawHandlePic(579,163, 32, 16, s_videodata2.top); // Corner, UR
UI_DrawHandlePic(581,179, 30, 121, uis.whiteShader); // Top right column
UI_DrawHandlePic(581,303, 30, 109, uis.whiteShader); // Bottom right column
UI_DrawHandlePic(579,412, 32, -16, s_videodata2.top); // Corner, LR
UI_DrawHandlePic(174,420, 408, 8, uis.whiteShader); // Bottom line
}
/*
=================
VideoData2_MenuDraw
=================
*/
static void VideoData2_MenuDraw (void)
{
M_VideoData2Menu_Graphics();
Menu_Draw( &s_videodata2.menu );
}
/*
=================
UI_VideoData2Menu_Cache
=================
*/
void UI_VideoData2Menu_Cache(void)
{
s_videodata2.top = trap_R_RegisterShaderNoMip("menu/common/corner_ur_8_30.tga");
s_videodata2.gamma = trap_R_RegisterShaderNoMip("menu/special/gamma_test.tga");
trap_R_RegisterShaderNoMip(PIC_MONBAR2);
trap_R_RegisterShaderNoMip(PIC_SLIDER);
}
/*
=================
VideoData2_MenuInit
=================
*/
static void VideoData2_MenuInit( void )
{
int x,y;
UI_VideoData2Menu_Cache();
// Menu Data
s_videodata2.menu.nitems = 0;
s_videodata2.menu.wrapAround = qtrue;
// s_videodata2.menu.opening = NULL;
// s_videodata2.menu.closing = NULL;
s_videodata2.menu.draw = VideoData2_MenuDraw;
s_videodata2.menu.fullscreen = qtrue;
s_videodata2.menu.descX = MENU_DESC_X;
s_videodata2.menu.descY = MENU_DESC_Y;
s_videodata2.menu.listX = 230;
s_videodata2.menu.listY = 188;
s_videodata2.menu.titleX = MENU_TITLE_X;
s_videodata2.menu.titleY = MENU_TITLE_Y;
s_videodata2.menu.titleI = MNT_CONTROLSMENU_TITLE;
s_videodata2.menu.footNoteEnum = MNT_VIDEOSETUP;
SetupMenu_TopButtons(&s_videodata2.menu,MENU_VIDEO,NULL);
Video_SideButtons(&s_videodata2.menu,ID_VIDEODATA2);
x = 180;
y = 269;
s_videodata2.gamma_slider.generic.type = MTYPE_SLIDER;
s_videodata2.gamma_slider.generic.x = x + 162;
s_videodata2.gamma_slider.generic.y = y;
s_videodata2.gamma_slider.generic.flags = QMF_SMALLFONT;
s_videodata2.gamma_slider.generic.callback = GammaCallback2;
s_videodata2.gamma_slider.minvalue = 5;
s_videodata2.gamma_slider.maxvalue = 30;
s_videodata2.gamma_slider.color = CT_DKPURPLE1;
s_videodata2.gamma_slider.color2 = CT_LTPURPLE1;
s_videodata2.gamma_slider.generic.name = PIC_MONBAR2;
s_videodata2.gamma_slider.width = 256;
s_videodata2.gamma_slider.height = 32;
s_videodata2.gamma_slider.focusWidth = 145;
s_videodata2.gamma_slider.focusHeight = 18;
s_videodata2.gamma_slider.picName = GRAPHIC_SQUARE;
s_videodata2.gamma_slider.picX = x;
s_videodata2.gamma_slider.picY = y;
s_videodata2.gamma_slider.picWidth = MENU_BUTTON_MED_WIDTH + 21;
s_videodata2.gamma_slider.picHeight = MENU_BUTTON_MED_HEIGHT;
s_videodata2.gamma_slider.textX = MENU_BUTTON_TEXT_X;
s_videodata2.gamma_slider.textY = MENU_BUTTON_TEXT_Y;
s_videodata2.gamma_slider.textEnum = MBT_BRIGHTNESS;
s_videodata2.gamma_slider.textcolor = CT_BLACK;
s_videodata2.gamma_slider.textcolor2 = CT_WHITE;
s_videodata2.gamma_slider.thumbName = PIC_SLIDER;
s_videodata2.gamma_slider.thumbHeight = 32;
s_videodata2.gamma_slider.thumbWidth = 16;
s_videodata2.gamma_slider.thumbGraphicWidth = 9;
s_videodata2.gamma_slider.thumbColor = CT_DKBLUE1;
s_videodata2.gamma_slider.thumbColor2 = CT_LTBLUE1;
s_videodata2.apply_action2.generic.type = MTYPE_ACTION;
s_videodata2.apply_action2.generic.flags = QMF_HIGHLIGHT_IF_FOCUS|QMF_GRAYED;
s_videodata2.apply_action2.generic.x = 490;
s_videodata2.apply_action2.generic.y = 191;
s_videodata2.apply_action2.generic.callback = ApplyChanges2;
s_videodata2.apply_action2.textEnum = MBT_ACCEPT;
s_videodata2.apply_action2.textcolor = CT_BLACK;
s_videodata2.apply_action2.textcolor2 = CT_WHITE;
s_videodata2.apply_action2.textcolor3 = CT_LTGREY;
s_videodata2.apply_action2.color = CT_DKPURPLE1;
s_videodata2.apply_action2.color2 = CT_LTPURPLE1;
s_videodata2.apply_action2.color3 = CT_DKGREY;
s_videodata2.apply_action2.textX = 5;
s_videodata2.apply_action2.textY = 30;
s_videodata2.apply_action2.width = 82;
s_videodata2.apply_action2.height = 70;
y = 330;
s_videodata2.screensize_slider.generic.type = MTYPE_SLIDER;
s_videodata2.screensize_slider.generic.x = x + 162;
s_videodata2.screensize_slider.generic.y = y;
s_videodata2.screensize_slider.generic.flags = QMF_SMALLFONT;
s_videodata2.screensize_slider.generic.callback = ScreensizeCallback;
s_videodata2.screensize_slider.minvalue = 30;
s_videodata2.screensize_slider.maxvalue = 100;
s_videodata2.screensize_slider.color = CT_DKPURPLE1;
s_videodata2.screensize_slider.color2 = CT_LTPURPLE1;
s_videodata2.screensize_slider.generic.name = PIC_MONBAR2;
s_videodata2.screensize_slider.width = 256;
s_videodata2.screensize_slider.height = 32;
s_videodata2.screensize_slider.focusWidth = 145;
s_videodata2.screensize_slider.focusHeight = 18;
s_videodata2.screensize_slider.picName = GRAPHIC_SQUARE;
s_videodata2.screensize_slider.picX = x;
s_videodata2.screensize_slider.picY = y;
s_videodata2.screensize_slider.picWidth = MENU_BUTTON_MED_WIDTH + 21;
s_videodata2.screensize_slider.picHeight = MENU_BUTTON_MED_HEIGHT;
s_videodata2.screensize_slider.textX = MENU_BUTTON_TEXT_X;
s_videodata2.screensize_slider.textY = MENU_BUTTON_TEXT_Y;
s_videodata2.screensize_slider.textEnum = MBT_SCREENSIZE;
s_videodata2.screensize_slider.textcolor = CT_BLACK;
s_videodata2.screensize_slider.textcolor2 = CT_WHITE;
s_videodata2.screensize_slider.thumbName = PIC_SLIDER;
s_videodata2.screensize_slider.thumbHeight = 32;
s_videodata2.screensize_slider.thumbWidth = 16;
s_videodata2.screensize_slider.thumbGraphicWidth= 9;
s_videodata2.screensize_slider.thumbColor = CT_DKBLUE1;
s_videodata2.screensize_slider.thumbColor2 = CT_LTBLUE1;
y += 34;
s_videodata2.anisotropicfiltering.generic.type = MTYPE_SPINCONTROL;
s_videodata2.anisotropicfiltering.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_videodata2.anisotropicfiltering.generic.x = x;
s_videodata2.anisotropicfiltering.generic.y = y;
s_videodata2.anisotropicfiltering.generic.name = GRAPHIC_BUTTONRIGHT;
s_videodata2.anisotropicfiltering.generic.callback = AnisotropicFilteringCallback;
s_videodata2.anisotropicfiltering.color = CT_DKPURPLE1;
s_videodata2.anisotropicfiltering.color2 = CT_LTPURPLE1;
s_videodata2.anisotropicfiltering.textX = MENU_BUTTON_TEXT_X;
s_videodata2.anisotropicfiltering.textY = MENU_BUTTON_TEXT_Y;
s_videodata2.anisotropicfiltering.textEnum = MBT_ANISOTROPICFILTERING;
s_videodata2.anisotropicfiltering.textcolor = CT_BLACK;
s_videodata2.anisotropicfiltering.textcolor2 = CT_WHITE;
s_videodata2.anisotropicfiltering.listnames = s_OffOnNone_Names;
Menu_AddItem( &s_videodata2.menu, ( void * )&s_videodata2.gamma_slider);
if (!uis.glconfig.deviceSupportsGamma)
{
Menu_AddItem( &s_videodata2.menu, ( void * )&s_videodata2.apply_action2);
}
Menu_AddItem( &s_videodata2.menu, ( void * )&s_videodata2.screensize_slider);
Menu_AddItem( &s_videodata2.menu, ( void * )&s_videodata2.anisotropicfiltering);
}
/*
=================
UI_VideoData2SettingsGetCvars
=================
*/
static void UI_VideoData2SettingsGetCvars()
{
s_videodata2.gamma_slider.curvalue = trap_Cvar_VariableValue( "r_gamma" ) * 10.0f;
s_videodata2.screensize_slider.curvalue = trap_Cvar_VariableValue( "cg_viewsize" );
s_videodata2.anisotropicfiltering.curvalue = trap_Cvar_VariableValue( "r_ext_texture_filter_anisotropic" );
}
/*
=================
UI_VideoData2SettingsMenu
=================
*/
void UI_VideoData2SettingsMenu( void )
{
UI_VideoData2SettingsGetCvars();
if (!s_videodata2.menu.initialized)
{
VideoData2_MenuInit();
}
UI_PushMenu( &s_videodata2.menu );
}