ソースを参照

Add scanCode to SDL and DX keydown/keyup events. (#209)

Pavel Alexandrov 6 年 前
コミット
898d72c0ac
4 ファイル変更8 行追加1 行削除
  1. 1 0
      libs/directx/dx/Event.hx
  2. 3 1
      libs/directx/window.c
  3. 3 0
      libs/sdl/sdl.c
  4. 1 0
      libs/sdl/sdl/Event.hx

+ 1 - 0
libs/directx/dx/Event.hx

@@ -8,6 +8,7 @@ package dx;
 	public var wheelDelta : Int;
 	public var wheelDelta : Int;
 	public var state : WindowStateChange;
 	public var state : WindowStateChange;
 	public var keyCode : Int;
 	public var keyCode : Int;
+	public var scanCode : Int;
 	public var keyRepeat : Bool;
 	public var keyRepeat : Bool;
 	public var controller : Int;
 	public var controller : Int;
 	public var value : Int;
 	public var value : Int;

+ 3 - 1
libs/directx/window.c

@@ -46,6 +46,7 @@ typedef struct {
 	int wheelDelta;
 	int wheelDelta;
 	WindowStateChange state;
 	WindowStateChange state;
 	int keyCode;
 	int keyCode;
+	int scanCode;
 	bool keyRepeat;
 	bool keyRepeat;
 	int controller;
 	int controller;
 	int value;
 	int value;
@@ -176,11 +177,12 @@ static LRESULT CALLBACK WndProc( HWND wnd, UINT umsg, WPARAM wparam, LPARAM lpar
 		// see 
 		// see 
 		e = addEvent(wnd,(umsg == WM_KEYUP || umsg == WM_SYSKEYUP) ? KeyUp : KeyDown);
 		e = addEvent(wnd,(umsg == WM_KEYUP || umsg == WM_SYSKEYUP) ? KeyUp : KeyDown);
 		e->keyCode = (int)wparam;
 		e->keyCode = (int)wparam;
+		e->scanCode = (lparam >> 16) & 0xFF;
 		e->keyRepeat = repeat;
 		e->keyRepeat = repeat;
 		// L/R location
 		// L/R location
 		if( e->keyCode == VK_SHIFT ) {
 		if( e->keyCode == VK_SHIFT ) {
 			bool right = MapVirtualKey((lparam >> 16) & 0xFF, MAPVK_VSC_TO_VK_EX) == VK_RSHIFT;
 			bool right = MapVirtualKey((lparam >> 16) & 0xFF, MAPVK_VSC_TO_VK_EX) == VK_RSHIFT;
-			e->keyCode |= right ? 512 : 256;			
+			e->keyCode |= right ? 512 : 256;
 			e->keyRepeat = false;
 			e->keyRepeat = false;
 			shift_downs[right?1:0] = e->type == KeyDown;
 			shift_downs[right?1:0] = e->type == KeyDown;
 		}
 		}

+ 3 - 0
libs/sdl/sdl.c

@@ -82,6 +82,7 @@ typedef struct {
 	int wheelDelta;
 	int wheelDelta;
 	ws_change state;
 	ws_change state;
 	int keyCode;
 	int keyCode;
+	int scanCode;
 	bool keyRepeat;
 	bool keyRepeat;
 	int controller;
 	int controller;
 	int value;
 	int value;
@@ -159,11 +160,13 @@ HL_PRIM bool HL_NAME(event_loop)( event_data *event ) {
 		case SDL_KEYDOWN:
 		case SDL_KEYDOWN:
 			event->type = KeyDown;
 			event->type = KeyDown;
 			event->keyCode = e.key.keysym.sym;
 			event->keyCode = e.key.keysym.sym;
+			event->scanCode = e.key.keysym.scancode;
 			event->keyRepeat = e.key.repeat != 0;
 			event->keyRepeat = e.key.repeat != 0;
 			break;
 			break;
 		case SDL_KEYUP:
 		case SDL_KEYUP:
 			event->type = KeyUp;
 			event->type = KeyUp;
 			event->keyCode = e.key.keysym.sym;
 			event->keyCode = e.key.keysym.sym;
+			event->scanCode = e.key.keysym.scancode;
 			break;
 			break;
 		case SDL_SYSWMEVENT:
 		case SDL_SYSWMEVENT:
 			continue;
 			continue;

+ 1 - 0
libs/sdl/sdl/Event.hx

@@ -10,6 +10,7 @@ package sdl;
 	public var wheelDelta : Int;
 	public var wheelDelta : Int;
 	public var state : WindowStateChange;
 	public var state : WindowStateChange;
 	public var keyCode : Int;
 	public var keyCode : Int;
+	public var scanCode : Int;
 	public var keyRepeat : Bool;
 	public var keyRepeat : Bool;
 	public var controller : Int;
 	public var controller : Int;
 	public var value : Int;
 	public var value : Int;