📄 vid_menu.pas
字号:
{----------------------------------------------------------------------------}
{ }
{ File(s): vid_menu.c, client.h, qmenu.h }
{ Content: Quake2\Win32\ support for qhost }
{ }
{ Initial conversion by : Mani - mani246@yahoo.com }
{ Initial conversion on : 14-Mar-2002 }
{ }
{ This File contains part of convertion of Quake2 source to ObjectPascal. }
{ More information about this project can be found at: }
{ http://www.sulaco.co.za/quake2/ }
{ }
{ Copyright (C) 1997-2001 Id Software, Inc. }
{ }
{ This program is free software; you can redistribute it and/or }
{ modify it under the terms of the GNU General Public License }
{ as published by the Free Software Foundation; either version 2 }
{ of the License, or (at your option) any later version. }
{ }
{ This program is distributed in the hope that it will be useful, }
{ but WITHOUT ANY WARRANTY; without even the implied warranty of }
{ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. }
{ }
{ See the GNU General Public License for more details. }
{ }
{----------------------------------------------------------------------------}
{ * Updated 04-jun-2002 Juha Hartikainen (juha@linearteam.org) }
{ - Language fixes }
{}
{ * TODO}
{ - Declare needed functions in interface section }
{----------------------------------------------------------------------------}
unit vid_menu;
interface
// conproc.h -- support for qhost
procedure VID_MenuInit; cdecl;
procedure VID_MenuDraw;
function VID_MenuKey(key: integer): PChar;
implementation
uses
Windows,
SysUtils,
q_shared,
client,
cvar,
cpas,
keys,
cl_scrn,
vid_dll,
menu,
qmenu;
const
REF_SOFT = 0;
REF_OPENGL = 1;
REF_3DFX = 2;
REF_POWERVR = 3;
REF_VERITE = 4;
{extern}{vid_ref, vid_fullscreen, vid_gamma, scr_viewsize,}
var
{static}
gl_mode, gl_driver, gl_picmip, gl_ext_palettedtexture, gl_finish,
sw_mode, sw_stipplealpha: cvar_p;
{extern}//procedure M_ForceMenuOff; - function will be called as the unit is mentioned in the uses clause
(*
====================================================================
MENU INTERACTION
====================================================================
*)
const
SOFTWARE_MENU = 0;
OPENGL_MENU = 1;
var
{static}
s_software_menu,
s_opengl_menu: menuframework_s;
s_current_menu: menuframework_p;
s_current_menu_index: integer;
s_mode_list,
s_ref_list: array[0..1] of menulist_s;
s_tq_slider: menuslider_s;
s_screensize_slider,
s_brightness_slider: array[0..1] of menuslider_s;
s_fs_box: array[0..1] of menulist_s;
s_stipple_box,
s_paletted_texture_box,
s_finish_box: menulist_s;
s_cancel_action,
s_defaults_action: array[0..1] of menuaction_s;
{static void}
procedure DriverCallback(unused: pointer);
begin
s_ref_list[Integer(not Boolean(s_current_menu_index))].curvalue := s_ref_list[s_current_menu_index].curvalue;
if (s_ref_list[s_current_menu_index].curvalue = 0) then
begin
s_current_menu := @s_software_menu;
s_current_menu_index := 0;
end
else
begin
s_current_menu := @s_opengl_menu;
s_current_menu_index := 1;
end;
end;
{static void}
procedure ScreenSizeCallback(s: pointer); //( void *s )
var
slider: menuslider_p;
begin
slider := menuslider_p(s);
Cvar_SetValue('viewsize', slider^.curvalue * 10);
end;
{static void}
procedure BrightnessCallback(s: pointer); //( void *s )
var
slider: menuslider_p;
gamma: single;
begin
slider := menuslider_p(s);
if (s_current_menu_index = SOFTWARE_MENU) then
s_brightness_slider[1].curvalue := s_brightness_slider[0].curvalue
else
s_brightness_slider[0].curvalue := s_brightness_slider[1].curvalue;
if (strcomp(vid_ref^.string_, 'soft') = 0) then
begin
gamma := (0.8 - (slider^.curvalue / 10.0 - 0.5)) + 0.5;
Cvar_SetValue('vid_gamma', gamma);
end;
end;
{static void}
procedure ResetDefaults(unused: pointer); //( void *unused )
begin
VID_MenuInit();
end;
{static void}
procedure ApplyChanges(unused: pointer); //( void *unused )
var
gamma, g: single;
// envbuffer: array[0..1024-1] of Char; Juha: Not needed, made this differently from original
begin
(*
** make values consistent
*)
s_fs_box[not s_current_menu_index].curvalue := s_fs_box[s_current_menu_index].curvalue;
s_brightness_slider[not s_current_menu_index].curvalue := s_brightness_slider[s_current_menu_index].curvalue;
s_ref_list[not s_current_menu_index].curvalue := s_ref_list[s_current_menu_index].curvalue;
(*
** invert sense so greater:= brighter, and scale to a range of 0.5 to 1.3
*)
gamma := (0.8 - (s_brightness_slider[s_current_menu_index].curvalue / 10.0 - 0.5)) + 0.5;
Cvar_SetValue('vid_gamma', gamma);
Cvar_SetValue('sw_stipplealpha', s_stipple_box.curvalue);
Cvar_SetValue('gl_picmip', 3 - s_tq_slider.curvalue);
Cvar_SetValue('vid_fullscreen', s_fs_box[s_current_menu_index].curvalue);
Cvar_SetValue('gl_ext_palettedtexture', s_paletted_texture_box.curvalue);
Cvar_SetValue('gl_finish', s_finish_box.curvalue);
Cvar_SetValue('sw_mode', s_mode_list[SOFTWARE_MENU].curvalue);
Cvar_SetValue('gl_mode', s_mode_list[OPENGL_MENU].curvalue);
case (s_ref_list[s_current_menu_index].curvalue) of
REF_SOFT:
begin
Cvar_Set('vid_ref', 'soft');
end;
REF_OPENGL:
begin
Cvar_Set('vid_ref', 'gl');
Cvar_Set('gl_driver', 'opengl32');
end;
REF_3DFX:
begin
Cvar_Set('vid_ref', 'gl');
Cvar_Set('gl_driver', '3dfxgl');
end;
REF_POWERVR:
begin
Cvar_Set('vid_ref', 'gl');
Cvar_Set('gl_driver', 'pvrgl');
end;
REF_VERITE:
begin
Cvar_Set('vid_ref', 'gl');
Cvar_Set('gl_driver', 'veritegl');
end;
end;
(*
** update appropriate stuff if we're running OpenGL and gamma
** has been modified
*)
if (strcmp(vid_ref^.string_, 'gl') = 0) then
begin
if (vid_gamma^.modified) then
begin
vid_ref^.modified := true;
if (strcmp(gl_driver.string_, '3dfxgl') = 0) then
begin
vid_ref^.modified := true;
g := 2.00 * (0.8 - (vid_gamma^.value - 0.5)) + 1.0 {F};
Windows.SetEnvironmentVariable('SSTV2_GAMMA', PChar(Format('%f', [g])));
Windows.SetEnvironmentVariable('SST_GAMMA', PChar(Format('%f', [g])));
vid_gamma^.modified := false;
end;
end;
if (gl_driver.modified) then
vid_ref^.modified := true;
end;
M_ForceMenuOff();
end;
{static void}
procedure OnCancelChanges(unused: pointer); //( void *unused )
begin
M_PopMenu(); // declared and defined in another unit check uses clause
end;
(*
** VID_MenuInit
*)
{void}
procedure VID_MenuInit;
var
i: integer;
const
resolutions: array[0..11] of PChar = (
'[320 240 ]',
'[400 300 ]',
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -