📄 vid_menu.pas
字号:
'[960 720 ]',
'[1024 768 ]',
'[1152 864 ]',
'[1280 960 ]',
'[1600 1200]',
'[2048 1536]',
nil);
refs: array[0..4] of PChar = (
'[software ]',
'[default OpenGL]',
'[3Dfx OpenGL ]',
'[PowerVR OpenGL]',
nil);
yesno_names: array[0..2] of PChar = (
'no',
'yes',
nil);
begin
if ( gl_driver = nil) then
gl_driver:= Cvar_Get( 'gl_driver', 'opengl32', 0 );
if ( gl_picmip = nil ) then
gl_picmip:= Cvar_Get( 'gl_picmip', '0', 0 );
if ( gl_mode = nil ) then
gl_mode:= Cvar_Get( 'gl_mode', '3', 0 );
if ( sw_mode = nil ) then
sw_mode:= Cvar_Get( 'sw_mode', '0', 0 );
if ( gl_ext_palettedtexture = nil ) then
gl_ext_palettedtexture:= Cvar_Get( 'gl_ext_palettedtexture', '1', CVAR_ARCHIVE );
if ( gl_finish = nil ) then
gl_finish:= Cvar_Get( 'gl_finish', '0', CVAR_ARCHIVE );
if ( sw_stipplealpha = nil ) then
sw_stipplealpha:= Cvar_Get( 'sw_stipplealpha', '0', CVAR_ARCHIVE );
s_mode_list[SOFTWARE_MENU].curvalue := Trunc(sw_mode^.value);
s_mode_list[OPENGL_MENU].curvalue := Trunc(gl_mode^.value);
if ( scr_viewsize = nil ) then
scr_viewsize:= Cvar_Get ('viewsize', '100', CVAR_ARCHIVE);
s_screensize_slider[SOFTWARE_MENU].curvalue := scr_viewsize^.value/10;
s_screensize_slider[OPENGL_MENU].curvalue := scr_viewsize^.value/10;
if ( strcmp( vid_ref^.string_, 'soft' ) = 0 ) then
begin
s_current_menu_index:= SOFTWARE_MENU;
s_ref_list[0].curvalue:= REF_SOFT;
s_ref_list[1].curvalue:= REF_SOFT;
end
else if ( strcmp( vid_ref^.string_, 'gl' ) = 0 ) then
begin
s_current_menu_index:= OPENGL_MENU;
if ( strcmp( gl_driver^.string_, '3dfxgl' ) = 0 ) then
s_ref_list[s_current_menu_index].curvalue:= REF_3DFX
else if ( strcmp( gl_driver^.string_, 'pvrgl' ) = 0 ) then
s_ref_list[s_current_menu_index].curvalue:= REF_POWERVR
else if ( strcmp( gl_driver^.string_, 'opengl32' ) = 0 ) then
s_ref_list[s_current_menu_index].curvalue:= REF_OPENGL
else
// s_ref_list[s_current_menu_index].curvalue:= REF_VERITE;
s_ref_list[s_current_menu_index].curvalue:= REF_OPENGL;
end;
s_software_menu.x := viddef.width div 2;
s_software_menu.nitems := 0;
s_opengl_menu.x := viddef.width div 2;
s_opengl_menu.nitems := 0;
for i:= 0 to 1 do
begin
s_ref_list[i].generic.type_ := MTYPE_SPINCONTROL;
s_ref_list[i].generic.name := 'driver';
s_ref_list[i].generic.x := 0;
s_ref_list[i].generic.y := 0;
s_ref_list[i].generic.callback:= DriverCallback;
s_ref_list[i].itemnames := @refs;
s_mode_list[i].generic.type_ := MTYPE_SPINCONTROL;
s_mode_list[i].generic.name := 'video mode';
s_mode_list[i].generic.x := 0;
s_mode_list[i].generic.y := 10;
s_mode_list[i].itemnames := @resolutions;
s_screensize_slider[i].generic.type_ := MTYPE_SLIDER;
s_screensize_slider[i].generic.x := 0;
s_screensize_slider[i].generic.y := 20;
s_screensize_slider[i].generic.name := 'screen size';
s_screensize_slider[i].minvalue := 3;
s_screensize_slider[i].maxvalue := 12;
s_screensize_slider[i].generic.callback := @ScreenSizeCallback;
s_brightness_slider[i].generic.type_ := MTYPE_SLIDER;
s_brightness_slider[i].generic.x := 0;
s_brightness_slider[i].generic.y := 30;
s_brightness_slider[i].generic.name := 'brightness';
s_brightness_slider[i].generic.callback := @BrightnessCallback;
s_brightness_slider[i].minvalue := 5;
s_brightness_slider[i].maxvalue := 13;
s_brightness_slider[i].curvalue := ( 1.3 - vid_gamma^.value + 0.5 ) * 10;
s_fs_box[i].generic.type_:= MTYPE_SPINCONTROL;
s_fs_box[i].generic.x := 0;
s_fs_box[i].generic.y := 40;
s_fs_box[i].generic.name:= 'fullscreen';
s_fs_box[i].itemnames := @yesno_names;
s_fs_box[i].curvalue := Round(vid_fullscreen^.value);
s_defaults_action[i].generic.type_ := MTYPE_ACTION;
s_defaults_action[i].generic.name := 'reset to defaults';
s_defaults_action[i].generic.x := 0;
s_defaults_action[i].generic.y := 90;
s_defaults_action[i].generic.callback := @ResetDefaults;
s_cancel_action[i].generic.type_ := MTYPE_ACTION;
s_cancel_action[i].generic.name := 'cancel';
s_cancel_action[i].generic.x := 0;
s_cancel_action[i].generic.y := 100;
s_cancel_action[i].generic.callback := @OnCancelChanges;
end;
s_stipple_box.generic.type_:= MTYPE_SPINCONTROL;
s_stipple_box.generic.x := 0;
s_stipple_box.generic.y := 60;
s_stipple_box.generic.name:= 'stipple alpha';
s_stipple_box.curvalue := Trunc(sw_stipplealpha^.value);
s_stipple_box.itemnames := @yesno_names;
s_tq_slider.generic.type_ := MTYPE_SLIDER;
s_tq_slider.generic.x := 0;
s_tq_slider.generic.y := 60;
s_tq_slider.generic.name := 'texture quality';
s_tq_slider.minvalue := 0;
s_tq_slider.maxvalue := 3;
s_tq_slider.curvalue := 3-gl_picmip^.value;
s_paletted_texture_box.generic.type_:= MTYPE_SPINCONTROL;
s_paletted_texture_box.generic.x := 0;
s_paletted_texture_box.generic.y := 70;
s_paletted_texture_box.generic.name:= '8-bit textures';
s_paletted_texture_box.itemnames := @yesno_names;
s_paletted_texture_box.curvalue := Trunc(gl_ext_palettedtexture^.value);
s_finish_box.generic.type_:= MTYPE_SPINCONTROL;
s_finish_box.generic.x := 0;
s_finish_box.generic.y := 80;
s_finish_box.generic.name:= 'sync every frame';
s_finish_box.curvalue := Trunc(gl_finish^.value);
s_finish_box.itemnames := @yesno_names;
Menu_AddItem( @s_software_menu, @s_ref_list[SOFTWARE_MENU] );
Menu_AddItem( @s_software_menu, @s_mode_list[SOFTWARE_MENU] );
Menu_AddItem( @s_software_menu, @s_screensize_slider[SOFTWARE_MENU] );
Menu_AddItem( @s_software_menu, @s_brightness_slider[SOFTWARE_MENU] );
Menu_AddItem( @s_software_menu, @s_fs_box[SOFTWARE_MENU] );
Menu_AddItem( @s_software_menu, @s_stipple_box );
Menu_AddItem( @s_opengl_menu, @s_ref_list[OPENGL_MENU] );
Menu_AddItem( @s_opengl_menu, @s_mode_list[OPENGL_MENU] );
Menu_AddItem( @s_opengl_menu, @s_screensize_slider[OPENGL_MENU] );
Menu_AddItem( @s_opengl_menu, @s_brightness_slider[OPENGL_MENU] );
Menu_AddItem( @s_opengl_menu, @s_fs_box[OPENGL_MENU] );
Menu_AddItem( @s_opengl_menu, @s_tq_slider );
Menu_AddItem( @s_opengl_menu, @s_paletted_texture_box );
Menu_AddItem( @s_opengl_menu, @s_finish_box );
Menu_AddItem( @s_software_menu, @s_defaults_action[SOFTWARE_MENU] );
Menu_AddItem( @s_software_menu, @s_cancel_action[SOFTWARE_MENU] );
Menu_AddItem( @s_opengl_menu, @s_defaults_action[OPENGL_MENU] );
Menu_AddItem( @s_opengl_menu, @s_cancel_action[OPENGL_MENU] );
Menu_Center( @s_software_menu );
Menu_Center( @s_opengl_menu );
s_opengl_menu.x := s_opengl_menu.x - 8;
s_software_menu.x := s_software_menu.x - 8;
end;
(*
================
VID_MenuDraw
================
*)
{void}
procedure VID_MenuDraw; // (void)
var
w, h: integer;
begin
if ( s_current_menu_index = 0 ) then
s_current_menu := @menuframework_s(s_software_menu)
else
s_current_menu := @menuframework_s(s_opengl_menu);
(*
** draw the banner
*)
re.DrawGetPicSize( @w, @h, 'm_banner_video' );
re.DrawPic( viddef.width div 2 - w div 2, viddef.height div 2 - 110, 'm_banner_video' );
(*
** move cursor to a reasonable starting position
*)
Menu_AdjustCursor( s_current_menu, 1 );
(*
** draw the menu
*)
Menu_Draw( s_current_menu );
end;
(*
================
VID_MenuKey
================
*)
function VID_MenuKey( key: integer ): PChar;
const
sound: PChar = 'misc/menu1.wav';
var
m: menuframework_p;
begin
m := s_current_menu;
Result := sound;
case ( key ) of
K_ESCAPE:
begin
ApplyChanges( m );
Result:=nil;
end;
K_KP_UPARROW,
K_UPARROW:
begin
dec(m^.cursor);
Menu_AdjustCursor( m, -1 );
end;
K_KP_DOWNARROW,
K_DOWNARROW:
begin
inc(m^.cursor);
Menu_AdjustCursor( m, 1 );
end;
K_KP_LEFTARROW,
K_LEFTARROW:
Menu_SlideItem( m, -1 );
K_KP_RIGHTARROW,
K_RIGHTARROW:
Menu_SlideItem( m, 1 );
K_KP_ENTER,
K_ENTER:
if ( not Menu_SelectItem( m ) ) then
ApplyChanges( m );
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -