]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_wgl.c
handle funky ToAscii values (shift/ctrl/alt sometimes produce ascii values for no...
[xonotic/darkplaces.git] / vid_wgl.c
index 049258ecdebc4e20d9f36464a3e2f1050c21108b..4b72f7744e43a60359816cbf52e741730ef80b3e 100644 (file)
--- a/vid_wgl.c
+++ b/vid_wgl.c
@@ -24,6 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "resource.h"
 #include <commctrl.h>
 
+// Tell startup code that we have a client
 int cl_available = true;
 
 int (WINAPI *qwglChoosePixelFormat)(HDC, CONST PIXELFORMATDESCRIPTOR *);
@@ -504,7 +505,7 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM lParam)
        LONG    lRet = 1;
        int             fActive, fMinimized, temp;
        char    state[256];
-       short   ascchar;
+       char    asciichar[4];
        int             vkey;
        qboolean down = false;
 
@@ -536,8 +537,11 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM lParam)
                case WM_SYSKEYUP:
                        vkey = MapKey(lParam, wParam);
                        GetKeyboardState (state);
-                       ToAscii (wParam, vkey, state, &ascchar, 0);
-                       Key_Event (vkey, (char)(ascchar & 0xFF), down);
+                       // 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, asciichar, 0) != 1)
+                               asciichar[0] = 0;
+                       Key_Event (vkey, asciichar[0], down);
                        break;
 
                case WM_SYSCHAR:
@@ -750,6 +754,7 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp)
        HGLRC baseRC;
        int CenterX, CenterY;
        const char *gldrivername;
+       int depth;
 
        if (vid_initialized)
                Sys_Error("VID_InitMode called when video is already initialised\n");
@@ -801,6 +806,7 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp)
        {
                hdc = GetDC (NULL);
                i = GetDeviceCaps(hdc, RASTERCAPS);
+               depth = GetDeviceCaps(hdc, PLANES) * GetDeviceCaps(hdc, BITSPIXEL);
                ReleaseDC (NULL, hdc);
                if (i & RC_PALETTE)
                {
@@ -808,6 +814,12 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp)
                        Con_Printf ("Can't run in non-RGB mode\n");
                        return false;
                }
+               if (bpp > depth)
+               {
+                       VID_Shutdown();
+                       Con_Printf ("A higher desktop depth is required to run this video mode\n");
+                       return false;
+               }
 
                WindowStyle = WS_OVERLAPPED | WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
                ExWindowStyle = 0;
@@ -1313,7 +1325,7 @@ void IN_MouseMove (usercmd_t *cmd)
        if (!mouseactive)
        {
                GetCursorPos (&current_pos);
-               ui_mouseupdate(current_pos.x - window_x, current_pos.y - window_y);
+               //ui_mouseupdate(current_pos.x - window_x, current_pos.y - window_y);
                in_mouse_x = in_mouse_y = 0;
                return;
        }