Bläddra i källkod

WinRT: fallback to scancode key detection, if VirtualKey/VK detection fails

David Ludwig 11 år sedan
förälder
incheckning
ed2fff6bef
1 ändrade filer med 6 tillägg och 0 borttagningar
  1. 6 0
      src/video/winrt/SDL_winrtkeyboard.cpp

+ 6 - 0
src/video/winrt/SDL_winrtkeyboard.cpp

@@ -292,6 +292,7 @@ TranslateKeycode(int keycode, unsigned int nativeScancode)
     /* Try to get a documented, WinRT, 'VirtualKey' next (as documented at
     /* Try to get a documented, WinRT, 'VirtualKey' next (as documented at
        http://msdn.microsoft.com/en-us/library/windows/apps/windows.system.virtualkey.aspx ).
        http://msdn.microsoft.com/en-us/library/windows/apps/windows.system.virtualkey.aspx ).
        If that fails, fall back to a Win32 virtual key.
        If that fails, fall back to a Win32 virtual key.
+       If that fails, attempt to fall back to a scancode-derived key.
     */
     */
     if (keycode < SDL_arraysize(WinRT_Official_Keycodes)) {
     if (keycode < SDL_arraysize(WinRT_Official_Keycodes)) {
         scancode = WinRT_Official_Keycodes[keycode];
         scancode = WinRT_Official_Keycodes[keycode];
@@ -299,6 +300,11 @@ TranslateKeycode(int keycode, unsigned int nativeScancode)
     if (scancode == SDL_SCANCODE_UNKNOWN) {
     if (scancode == SDL_SCANCODE_UNKNOWN) {
         scancode = WINRT_TranslateUnofficialKeycode(keycode);
         scancode = WINRT_TranslateUnofficialKeycode(keycode);
     }
     }
+    if (scancode == SDL_SCANCODE_UNKNOWN) {
+        if (nativeScancode < SDL_arraysize(windows_scancode_table)) {
+            scancode = windows_scancode_table[nativeScancode];
+        }
+    }
     if (scancode == SDL_SCANCODE_UNKNOWN) {
     if (scancode == SDL_SCANCODE_UNKNOWN) {
         SDL_Log("WinRT TranslateKeycode, unknown keycode=%d\n", (int)keycode);
         SDL_Log("WinRT TranslateKeycode, unknown keycode=%d\n", (int)keycode);
     }
     }