// 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 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 ); }