};
static DEVMODE gdevmode, initialdevmode;
+static vid_mode_t desktop_mode;
static qboolean vid_initialized = false;
static qboolean vid_wassuspended = false;
static qboolean vid_usingmouse = false;
//void VID_MenuDraw (void);
//void VID_MenuKey (int key);
-//LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
-//void AppActivate(BOOL fActive, BOOL minimize);
-//void ClearAllStates (void);
-//void VID_UpdateWindowStatus (void);
+LONG WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+void AppActivate(BOOL fActive, BOOL minimize);
+static void ClearAllStates(void);
+qboolean VID_InitModeGL(viddef_mode_t *mode);
+qboolean VID_InitModeSOFT(viddef_mode_t *mode);
//====================================
//==========================================================================
-
-
static unsigned char scantokey[128] =
{
-// 0 1 2 3 4 5 6 7 8 9 A B C D E F
- 0 ,27 ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'0' ,'-' ,'=' ,K_BACKSPACE,9 ,//0
- 'q' ,'w' ,'e' ,'r' ,'t' ,'y' ,'u' ,'i' ,'o' ,'p' ,'[' ,']' ,13 ,K_CTRL ,'a' ,'s' ,//1
- 'd' ,'f' ,'g' ,'h' ,'j' ,'k' ,'l' ,';' ,'\'' ,'`' ,K_SHIFT ,'\\' ,'z' ,'x' ,'c' ,'v' ,//2
- 'b' ,'n' ,'m' ,',' ,'.' ,'/' ,K_SHIFT,'*' ,K_ALT ,' ' ,0 ,K_F1 ,K_F2 ,K_F3 ,K_F4 ,K_F5 ,//3
- K_F6 ,K_F7 ,K_F8 ,K_F9 ,K_F10,K_PAUSE,0 ,K_HOME,K_UPARROW,K_PGUP,K_KP_MINUS,K_LEFTARROW,K_KP_5,K_RIGHTARROW,K_KP_PLUS ,K_END,//4
- K_DOWNARROW,K_PGDN,K_INS,K_DEL,0 ,0 ,0 ,K_F11 ,K_F12 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,//5
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,//6
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 //7
+// 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0 ,K_ESCAPE,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'0' ,'-' ,'=' ,K_BACKSPACE,K_TAB,//0
+ 'q' ,'w' ,'e' ,'r' ,'t' ,'y' ,'u' ,'i' ,'o' ,'p' ,'[' ,']' ,K_ENTER,K_CTRL ,'a' ,'s' ,//1
+ 'd' ,'f' ,'g' ,'h' ,'j' ,'k' ,'l' ,';' ,'\'' ,'`' ,K_SHIFT ,'\\' ,'z' ,'x' ,'c' ,'v' ,//2
+ 'b' ,'n' ,'m' ,',' ,'.' ,'/' ,K_SHIFT ,'*' ,K_ALT ,' ' ,K_CAPSLOCK,K_F1 ,K_F2 ,K_F3 ,K_F4 ,K_F5 ,//3
+ K_F6 ,K_F7 ,K_F8 ,K_F9 ,K_F10,K_PAUSE,K_SCROLLOCK,K_HOME,K_UPARROW,K_PGUP,K_KP_MINUS,K_LEFTARROW,K_KP_5 ,K_RIGHTARROW,K_KP_PLUS ,K_END,//4
+ K_DOWNARROW,K_PGDN ,K_INS,K_DEL,0 ,0 ,0 ,K_F11 ,K_F12 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,//5
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,//6
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 //7
};
if ( !is_extended )
{
+ if(((GetKeyState(VK_NUMLOCK)) & 0xffff) == 0)
+ return result;
+
switch ( result )
{
case K_HOME:
}
else
{
+ if(virtualkey == VK_NUMLOCK)
+ return K_NUMLOCK;
+
switch ( result )
{
case 0x0D:
if (vid_isfullscreen)
{
if (gldll)
- ChangeDisplaySettings (NULL, 0);
+ ChangeDisplaySettings (NULL, CDS_FULLSCREEN);
vid_wassuspended = true;
}
VID_RestoreSystemGamma();
}
}
+#ifdef CONFIG_CD
LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+#endif
static keynum_t buttonremap[16] =
{
LONG lRet = 1;
int fActive, fMinimized, temp;
unsigned char state[256];
- unsigned char asciichar[4];
+ const unsigned int UNICODE_BUFFER_LENGTH = 4;
+ WCHAR unicode[UNICODE_BUFFER_LENGTH];
int vkey;
int charlength;
qboolean down = false;
GetKeyboardState (state);
// alt/ctrl/shift tend to produce funky ToAscii values,
// and if it's not a single character we don't know care about it
- charlength = ToAscii (wParam, lParam >> 16, state, (LPWORD)asciichar, 0);
- if (vkey == K_ALT || vkey == K_CTRL || vkey == K_SHIFT || charlength == 0)
- asciichar[0] = 0;
- else if( charlength == 2 ) {
- asciichar[0] = asciichar[1];
- }
+ charlength = ToUnicode(wParam, lParam >> 16, state, unicode, UNICODE_BUFFER_LENGTH, 0);
+ if(vkey == K_ALT || vkey == K_CTRL || vkey == K_SHIFT || charlength == 0)
+ unicode[0] = 0;
+ else if(charlength == 2)
+ unicode[0] = unicode[1];
if (!VID_JoyBlockEmulatedKeys(vkey))
- Key_Event (vkey, asciichar[0], down);
+ Key_Event(vkey, unicode[0], down);
break;
case WM_SYSCHAR:
// break;
case MM_MCINOTIFY:
+#ifdef CONFIG_CD
lRet = CDAudio_MessageHandler (hWnd, uMsg, wParam, lParam);
+#endif
break;
default:
memset(&initialdevmode, 0, sizeof(initialdevmode));
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &initialdevmode);
+ desktop_mode.width = initialdevmode.dmPelsWidth;
+ desktop_mode.height = initialdevmode.dmPelsHeight;
+ desktop_mode.bpp = initialdevmode.dmBitsPerPel;
+ desktop_mode.refreshrate = initialdevmode.dmDisplayFrequency;
+ desktop_mode.pixelheight_num = 1;
+ desktop_mode.pixelheight_denom = 1; // Win32 apparently does not provide this (FIXME)
+
IN_Init();
}
vid_isfullscreen = false;
if (fullscreen)
{
- if(vid_forcerefreshrate.integer)
+ if(vid_desktopfullscreen.integer)
+ {
+ foundmode = true;
+ gdevmode = initialdevmode;
+ width = mode->width = gdevmode.dmPelsWidth;
+ height = mode->height = gdevmode.dmPelsHeight;
+ bpp = mode->bitsperpixel = gdevmode.dmBitsPerPel;
+ }
+ else if(vid_forcerefreshrate.integer)
{
foundmode = true;
gdevmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
vid.support.arb_depth_texture = true;
vid.support.arb_draw_buffers = vid_d3d9caps.NumSimultaneousRTs > 1;
vid.support.arb_occlusion_query = true; // can't find a cap for this
+ vid.support.arb_query_buffer_object = true;
vid.support.arb_shadow = true;
vid.support.arb_texture_compression = true;
vid.support.arb_texture_cube_map = true;
vid.support.ext_blend_subtract = true;
vid.support.ext_draw_range_elements = true;
vid.support.ext_framebuffer_object = true;
+
vid.support.ext_texture_3d = true;
vid.support.ext_texture_compression_s3tc = true;
vid.support.ext_texture_filter_anisotropic = true;
if (vid_begunscene)
IDirect3DDevice9_EndScene(vid_d3d9dev);
vid_begunscene = false;
-// Cmd_ExecuteString("r_texturestats", src_command);
-// Cmd_ExecuteString("memlist", src_command);
+// Cmd_ExecuteString("r_texturestats", src_command, true);
+// Cmd_ExecuteString("memlist", src_command, true);
IDirect3DDevice9_Release(vid_d3d9dev);
}
vid_d3d9dev = NULL;
DestroyWindow(mainwindow);
mainwindow = 0;
if (vid_isfullscreen && isgl)
- ChangeDisplaySettings (NULL, 0);
+ ChangeDisplaySettings (NULL, CDS_FULLSCREEN);
vid_isfullscreen = false;
}
#endif
}
+vid_mode_t *VID_GetDesktopMode(void)
+{
+ return &desktop_mode;
+}
+
size_t VID_ListModes(vid_mode_t *modes, size_t maxcount)
{
int i;