[SVN] r3544 - trunk/SDL/src/video/win32
svn-owner at libsdl.org
svn-owner at libsdl.org
Fri Feb 8 23:18:41 PST 2008
Author: slouken
Date: 2008-02-08 23:18:38 -0800 (Fri, 08 Feb 2008)
New Revision: 3544
Modified:
trunk/SDL/src/video/win32/SDL_win32events.c
Log:
Undo keyboard layout based alphabetic key mapping. Grr.... HACK HACK HACK...
Modified: trunk/SDL/src/video/win32/SDL_win32events.c
===================================================================
--- trunk/SDL/src/video/win32/SDL_win32events.c 2008-02-09 06:47:46 UTC (rev 3543)
+++ trunk/SDL/src/video/win32/SDL_win32events.c 2008-02-09 07:18:38 UTC (rev 3544)
@@ -47,6 +47,33 @@
#define GET_XBUTTON_WPARAM(w) (HIWORD(w))
#endif
+static WPARAM
+RemapVKEY(WPARAM wParam, LPARAM lParam)
+{
+ /* Windows remaps alphabetic keys based on current layout.
+ We try to provide USB scancodes, so undo this mapping.
+ */
+ if (wParam >= 'A' && wParam <= 'Z') {
+ /* Alphabetic scancodes for PC keyboards */
+ static BYTE scancodes[26] = {
+ 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24,
+ 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44
+ };
+ BYTE scancode = (lParam >> 16) & 0xFF;
+ int i;
+
+ if (scancode != scancodes[wParam - 'A']) {
+ for (i = 0; i < SDL_arraysize(scancodes); ++i) {
+ if (scancode == scancodes[i]) {
+ wParam = 'A' + i;
+ break;
+ }
+ }
+ }
+ }
+ return wParam;
+}
+
LRESULT CALLBACK
WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
@@ -310,6 +337,7 @@
}
index = data->videodata->keyboard;
+ wParam = RemapVKEY(wParam, lParam);
switch (wParam) {
case VK_CONTROL:
if (lParam & EXTENDED_KEYMASK)
@@ -353,6 +381,7 @@
int index;
index = data->videodata->keyboard;
+ wParam = RemapVKEY(wParam, lParam);
switch (wParam) {
case VK_CONTROL:
if (lParam & EXTENDED_KEYMASK)
More information about the SVN
mailing list