X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=vid_wgl.c;h=f35eec97ab68d78f382429a13920f0863f066e27;hb=190a74cbf9792407ff3fc9abc9654f933fdeda8a;hp=d4412c32cfef9933231636ee5896d087132412d4;hpb=656d8440b1ca6afe0b55650fba3b8ca4b01c9511;p=xonotic%2Fdarkplaces.git diff --git a/vid_wgl.c b/vid_wgl.c index d4412c32..f35eec97 100644 --- a/vid_wgl.c +++ b/vid_wgl.c @@ -78,7 +78,6 @@ static qboolean vid_initialized = false; static qboolean vid_wassuspended = false; static qboolean vid_usingmouse = false; static qboolean vid_usingvsync = false; -static qboolean vid_usemouse = false; static qboolean vid_usevsync = false; static HICON hIcon; @@ -102,8 +101,7 @@ static qboolean vid_isfullscreen; //==================================== -static int window_x, window_y, window_width, window_height; -static int window_center_x, window_center_y; +static int window_x, window_y; static void IN_Activate (qboolean grab); @@ -256,46 +254,13 @@ static void Joy_AdvancedUpdate_f (void); static void IN_JoyMove (void); static void IN_StartupMouse (void); -/* -================ -VID_UpdateWindowStatus -================ -*/ -static void VID_UpdateWindowStatus (void) -{ - window_center_x = window_x + window_width / 2; - window_center_y = window_y + window_height / 2; - - if (mouseinitialized && vid_usingmouse && !dinput_acquired) - { - RECT window_rect; - window_rect.left = window_x; - window_rect.top = window_y; - window_rect.right = window_x + window_width; - window_rect.bottom = window_y + window_height; - ClipCursor (&window_rect); - } -} - //==================================== -/* -================= -VID_GetWindowSize -================= -*/ -void VID_GetWindowSize (int *x, int *y, int *width, int *height) -{ - *x = 0; - *y = 0; - *width = window_width; - *height = window_height; -} - - void VID_Finish (void) { + qboolean vid_usemouse; + vid_usevsync = vid_vsync.integer && !cls.timedemo && gl_videosyncavailable; if (vid_usingvsync != vid_usevsync && gl_videosyncavailable) { @@ -509,6 +474,7 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) char state[256]; char asciichar[4]; int vkey; + int charlength; qboolean down = false; if ( uMsg == uiWheelMessage ) @@ -527,7 +493,7 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_MOVE: window_x = (int) LOWORD(lParam); window_y = (int) HIWORD(lParam); - VID_UpdateWindowStatus (); + IN_Activate(false); break; case WM_KEYDOWN: @@ -539,8 +505,12 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 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 - if (vkey == K_ALT || vkey == K_CTRL || vkey == K_SHIFT || ToAscii (wParam, lParam >> 16, state, (unsigned short *)asciichar, 0) != 1) + charlength = ToAscii (wParam, lParam >> 16, state, (unsigned short *)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]; + } Key_Event (vkey, asciichar[0], down); break; @@ -725,7 +695,7 @@ void VID_Init(void) wc.lpszClassName = "DarkPlacesWindowClass"; if (!RegisterClass (&wc)) - Sys_Error("Couldn't register window class\n"); + Con_Printf ("Couldn't register window class\n"); IN_Init(); } @@ -855,8 +825,6 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp) // x and y may be changed by WM_MOVE messages window_x = CenterX; window_y = CenterY; - window_width = width; - window_height = height; rect.left += CenterX; rect.right += CenterX; rect.top += CenterY; @@ -878,8 +846,6 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp) ShowWindow (mainwindow, SW_SHOWDEFAULT); UpdateWindow (mainwindow); - VID_UpdateWindowStatus (); - // now we try to make sure we get the focus on the mode switch, because // sometimes in some systems we don't. We grab the foreground, then // finish setting up, pump all our messages, and sleep for a little while @@ -985,6 +951,13 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp) IN_StartupMouse (); IN_StartupJoystick (); + if (gl_videosyncavailable) + { + vid_usevsync = vid_vsync.integer; + vid_usingvsync = vid_vsync.integer; + qwglSwapIntervalEXT (vid_usevsync); + } + return true; } @@ -1015,12 +988,6 @@ void VID_Shutdown (void) vid_isfullscreen = false; } - -/* -=========== -IN_Activate -=========== -*/ static void IN_Activate (qboolean grab) { if (!mouseinitialized) @@ -1042,11 +1009,11 @@ static void IN_Activate (qboolean grab) RECT window_rect; window_rect.left = window_x; window_rect.top = window_y; - window_rect.right = window_x + window_width; - window_rect.bottom = window_y + window_height; + window_rect.right = window_x + vid.width; + window_rect.bottom = window_y + vid.height; if (mouseparmsvalid) restore_spi = SystemParametersInfo (SPI_SETMOUSE, 0, newmouseparms, 0); - SetCursorPos (window_center_x, window_center_y); + SetCursorPos ((window_x + vid.width / 2), (window_y + vid.height / 2)); SetCapture (mainwindow); ClipCursor (&window_rect); } @@ -1306,15 +1273,15 @@ static void IN_MouseMove (void) else { GetCursorPos (¤t_pos); - mx = current_pos.x - window_center_x; - my = current_pos.y - window_center_y; + mx = current_pos.x - (window_x + vid.width / 2); + my = current_pos.y - (window_y + vid.height / 2); in_mouse_x = mx; in_mouse_y = my; // if the mouse has moved, force it to the center, so there's room to move if (mx || my) - SetCursorPos (window_center_x, window_center_y); + SetCursorPos ((window_x + vid.width / 2), (window_y + vid.height / 2)); } }