Przeglądaj źródła

Wired up most windows keyboard keys

Karl Zylinski 6 miesięcy temu
rodzic
commit
c13235b0a1
3 zmienionych plików z 186 dodań i 97 usunięć
  1. 42 38
      karl2d.doc.odin
  2. 42 38
      karl2d.odin
  3. 102 21
      window_win32.odin

+ 42 - 38
karl2d.doc.odin

@@ -378,24 +378,19 @@ Mouse_Button :: enum {
 Keyboard_Key :: enum {
 	None            = 0,
 
-	// Alphanumeric keys
-	Apostrophe      = 39,
-	Comma           = 44,
-	Minus           = 45,
-	Period          = 46,
-	Slash           = 47,
-	Zero            = 48,
-	One             = 49,
-	Two             = 50,
-	Three           = 51,
-	Four            = 52,
-	Five            = 53,
-	Six             = 54,
-	Seven           = 55,
-	Eight           = 56,
-	Nine            = 57,
-	Semicolon       = 59,
-	Equal           = 61,
+	// Numeric keys (top row)
+	N0              = 48,
+	N1              = 49,
+	N2              = 50,
+	N3              = 51,
+	N4              = 52,
+	N5              = 53,
+	N6              = 54,
+	N7              = 55,
+	N8              = 56,
+	N9              = 57,
+
+	// Letter keys
 	A               = 65,
 	B               = 66,
 	C               = 67,
@@ -422,12 +417,21 @@ Keyboard_Key :: enum {
 	X               = 88,
 	Y               = 89,
 	Z               = 90,
+
+	// Special characters
+	Apostrophe      = 39,
+	Comma           = 44,
+	Minus           = 45,
+	Period          = 46,
+	Slash           = 47,
+	Semicolon       = 59,
+	Equal           = 61,
 	Left_Bracket    = 91,
 	Backslash       = 92,
 	Right_Bracket   = 93,
-	Grave           = 96,
+	Grave_Accent    = 96,
 
-	// Function keys
+	// Function keys, modifiers, caret control etc
 	Space           = 32,
 	Escape          = 256,
 	Enter           = 257,
@@ -470,24 +474,24 @@ Keyboard_Key :: enum {
 	Right_Super     = 347,
 	Menu            = 348,
 
-	// Keypad keys
-	KP_0            = 320,
-	KP_1            = 321,
-	KP_2            = 322,
-	KP_3            = 323,
-	KP_4            = 324,
-	KP_5            = 325,
-	KP_6            = 326,
-	KP_7            = 327,
-	KP_8            = 328,
-	KP_9            = 329,
-	KP_Decimal      = 330,
-	KP_Divide       = 331,
-	KP_Multiply     = 332,
-	KP_Subtract     = 333,
-	KP_Add          = 334,
-	KP_Enter        = 335,
-	KP_Equal        = 336,
+	// Numpad keys
+	NP_0            = 320,
+	NP_1            = 321,
+	NP_2            = 322,
+	NP_3            = 323,
+	NP_4            = 324,
+	NP_5            = 325,
+	NP_6            = 326,
+	NP_7            = 327,
+	NP_8            = 328,
+	NP_9            = 329,
+	NP_Decimal      = 330,
+	NP_Divide       = 331,
+	NP_Multiply     = 332,
+	NP_Subtract     = 333,
+	NP_Add          = 334,
+	NP_Enter        = 335,
+	NP_Equal        = 336,
 }
 
 Gamepad_Button :: enum {

+ 42 - 38
karl2d.odin

@@ -1030,24 +1030,19 @@ Mouse_Button :: enum {
 Keyboard_Key :: enum {
 	None            = 0,
 
-	// Alphanumeric keys
-	Apostrophe      = 39,
-	Comma           = 44,
-	Minus           = 45,
-	Period          = 46,
-	Slash           = 47,
-	Zero            = 48,
-	One             = 49,
-	Two             = 50,
-	Three           = 51,
-	Four            = 52,
-	Five            = 53,
-	Six             = 54,
-	Seven           = 55,
-	Eight           = 56,
-	Nine            = 57,
-	Semicolon       = 59,
-	Equal           = 61,
+	// Numeric keys (top row)
+	N0              = 48,
+	N1              = 49,
+	N2              = 50,
+	N3              = 51,
+	N4              = 52,
+	N5              = 53,
+	N6              = 54,
+	N7              = 55,
+	N8              = 56,
+	N9              = 57,
+
+	// Letter keys
 	A               = 65,
 	B               = 66,
 	C               = 67,
@@ -1074,12 +1069,21 @@ Keyboard_Key :: enum {
 	X               = 88,
 	Y               = 89,
 	Z               = 90,
+
+	// Special characters
+	Apostrophe      = 39,
+	Comma           = 44,
+	Minus           = 45,
+	Period          = 46,
+	Slash           = 47,
+	Semicolon       = 59,
+	Equal           = 61,
 	Left_Bracket    = 91,
 	Backslash       = 92,
 	Right_Bracket   = 93,
-	Grave           = 96,
+	Grave_Accent    = 96,
 
-	// Function keys
+	// Function keys, modifiers, caret control etc
 	Space           = 32,
 	Escape          = 256,
 	Enter           = 257,
@@ -1122,24 +1126,24 @@ Keyboard_Key :: enum {
 	Right_Super     = 347,
 	Menu            = 348,
 
-	// Keypad keys
-	KP_0            = 320,
-	KP_1            = 321,
-	KP_2            = 322,
-	KP_3            = 323,
-	KP_4            = 324,
-	KP_5            = 325,
-	KP_6            = 326,
-	KP_7            = 327,
-	KP_8            = 328,
-	KP_9            = 329,
-	KP_Decimal      = 330,
-	KP_Divide       = 331,
-	KP_Multiply     = 332,
-	KP_Subtract     = 333,
-	KP_Add          = 334,
-	KP_Enter        = 335,
-	KP_Equal        = 336,
+	// Numpad keys
+	NP_0            = 320,
+	NP_1            = 321,
+	NP_2            = 322,
+	NP_3            = 323,
+	NP_4            = 324,
+	NP_5            = 325,
+	NP_6            = 326,
+	NP_7            = 327,
+	NP_8            = 328,
+	NP_9            = 329,
+	NP_Decimal      = 330,
+	NP_Divide       = 331,
+	NP_Multiply     = 332,
+	NP_Subtract     = 333,
+	NP_Add          = 334,
+	NP_Enter        = 335,
+	NP_Equal        = 336,
 }
 
 Gamepad_Button :: enum {

+ 102 - 21
window_win32.odin

@@ -109,7 +109,9 @@ win32_process_events :: proc() {
 			case .RTRIGGER:  button = .Right_Trigger
 
 			case .BACK: button = .Middle_Face_Left
-			// Not sure you can get the "middle button" with XInput
+			
+			// Not sure you can get the "middle button" with XInput (the one that goe to dashboard)
+
 			case .START: button = .Middle_Face_Right
 
 			case .LTHUMB_PRESS: button = .Left_Stick_Press
@@ -215,7 +217,7 @@ window_proc :: proc "stdcall" (hwnd: win32.HWND, msg: win32.UINT, wparam: win32.
 		append(&s.events, Window_Event_Close_Wanted{})
 
 	case win32.WM_KEYDOWN:
-		key := WIN32_VK_MAP[wparam]
+		key := key_from_event_params(wparam, lparam)
 		append(&s.events, Window_Event_Key_Went_Down {
 			key = key,
 		})
@@ -223,7 +225,7 @@ window_proc :: proc "stdcall" (hwnd: win32.HWND, msg: win32.UINT, wparam: win32.
 		return 0
 
 	case win32.WM_KEYUP:
-		key := WIN32_VK_MAP[wparam]
+		key := key_from_event_params(wparam, lparam)
 		append(&s.events, Window_Event_Key_Went_Up {
 			key = key,
 		})
@@ -289,19 +291,26 @@ window_proc :: proc "stdcall" (hwnd: win32.HWND, msg: win32.UINT, wparam: win32.
 	return win32.DefWindowProcW(hwnd, msg, wparam, lparam)
 }
 
+key_from_event_params :: proc(wparam: win32.WPARAM, lparam: win32.LPARAM) -> Keyboard_Key{
+	if wparam == win32.VK_RETURN && win32.HIWORD(lparam) & win32.KF_EXTENDED != 0 {
+		return .NP_Enter
+	}
+
+	return WIN32_VK_MAP[wparam]
+}
+
 WIN32_VK_MAP := [255]Keyboard_Key {
-	win32.VK_F1 = .F1,
-	win32.VK_F2 = .F2,
-	win32.VK_F3 = .F3,
-	win32.VK_F4 = .F4,
-	win32.VK_F5 = .F5,
-	win32.VK_F6 = .F6,
-	win32.VK_F7 = .F7,
-	win32.VK_F8 = .F8,
-	win32.VK_F9 = .F9,
-	win32.VK_F10 = .F10,
-	win32.VK_F11 = .F11,
-	win32.VK_F12 = .F12,
+	win32.VK_0 = .N0,
+	win32.VK_1 = .N1,
+	win32.VK_2 = .N2,
+	win32.VK_3 = .N3,
+	win32.VK_4 = .N4,
+	win32.VK_5 = .N5,
+	win32.VK_6 = .N6,
+	win32.VK_7 = .N7,
+	win32.VK_8 = .N8,
+	win32.VK_9 = .N9,
+
 	win32.VK_A = .A,
 	win32.VK_B = .B,
 	win32.VK_C = .C,
@@ -328,10 +337,82 @@ WIN32_VK_MAP := [255]Keyboard_Key {
 	win32.VK_X = .X,
 	win32.VK_Y = .Y,
 	win32.VK_Z = .Z,
-	win32.VK_SPACE = .Space,
-	win32.VK_LEFT = .Left,
-	win32.VK_RIGHT = .Right,
-	win32.VK_UP = .Up,
-	win32.VK_DOWN = .Down,
-	win32.VK_RETURN = .Enter,
+
+	win32.VK_OEM_7      = .Apostrophe,
+	win32.VK_OEM_COMMA  = .Comma,
+	win32.VK_OEM_MINUS  = .Minus,
+	win32.VK_OEM_PERIOD = .Period,
+	win32.VK_OEM_2      = .Slash,
+	win32.VK_OEM_1      = .Semicolon,
+	win32.VK_OEM_PLUS   = .Equal,
+	win32.VK_OEM_4      = .Left_Bracket,
+	win32.VK_OEM_5      = .Backslash,
+	win32.VK_OEM_6      = .Right_Bracket,
+	win32.VK_OEM_3      = .Grave_Accent,
+
+	win32.VK_SPACE   = .Space,
+	win32.VK_ESCAPE  = .Escape,
+	win32.VK_RETURN  = .Enter,
+	win32.VK_TAB     = .Tab,
+	win32.VK_BACK    = .Backspace,
+	win32.VK_INSERT  = .Insert,
+	win32.VK_DELETE  = .Delete,
+	win32.VK_RIGHT   = .Right,
+	win32.VK_LEFT    = .Left,
+	win32.VK_DOWN    = .Down,
+	win32.VK_UP      = .Up,
+	win32.VK_PRIOR   = .Page_Up,
+	win32.VK_NEXT    = .Page_Down,
+	win32.VK_HOME    = .Home,
+	win32.VK_END     = .End,
+	win32.VK_CAPITAL = .Caps_Lock,
+	win32.VK_SCROLL  = .Scroll_Lock,
+	win32.VK_NUMLOCK = .Num_Lock,
+	win32.VK_PRINT   = .Print_Screen,
+	win32.VK_PAUSE   = .Pause,
+
+	win32.VK_F1  = .F1,
+	win32.VK_F2  = .F2,
+	win32.VK_F3  = .F3,
+	win32.VK_F4  = .F4,
+	win32.VK_F5  = .F5,
+	win32.VK_F6  = .F6,
+	win32.VK_F7  = .F7,
+	win32.VK_F8  = .F8,
+	win32.VK_F9  = .F9,
+	win32.VK_F10 = .F10,
+	win32.VK_F11 = .F11,
+	win32.VK_F12 = .F12,
+
+	win32.VK_LSHIFT   = .Left_Shift,
+	win32.VK_LCONTROL = .Left_Control,
+	win32.VK_LMENU    = .Left_Alt,
+	win32.VK_MENU     = .Left_Alt,
+	win32.VK_LWIN     = .Left_Super,
+	win32.VK_RSHIFT   = .Right_Shift,
+	win32.VK_RCONTROL = .Right_Control,
+	win32.VK_RMENU    = .Right_Alt,
+	win32.VK_RWIN     = .Right_Super,
+	win32.VK_APPS     = .Menu,
+
+	win32.VK_NUMPAD0 = .NP_0,
+	win32.VK_NUMPAD1 = .NP_1,
+	win32.VK_NUMPAD2 = .NP_2,
+	win32.VK_NUMPAD3 = .NP_3,
+	win32.VK_NUMPAD4 = .NP_4,
+	win32.VK_NUMPAD5 = .NP_5,
+	win32.VK_NUMPAD6 = .NP_6,
+	win32.VK_NUMPAD7 = .NP_7,
+	win32.VK_NUMPAD8 = .NP_8,
+	win32.VK_NUMPAD9 = .NP_9,
+	
+	win32.VK_DECIMAL = .NP_Decimal,
+	win32.VK_DIVIDE  = .NP_Divide,
+	win32.VK_MULTIPLY = .NP_Multiply,
+	win32.VK_SUBTRACT = .NP_Subtract,
+	win32.VK_ADD = .NP_Add,
+
+	// NP_Enter is handled separately
+
+	win32.VK_OEM_NEC_EQUAL = .NP_Equal,
 }