diff --git a/genkeys.go b/genkeys.go index fcc9ddf72..786c9a14e 100644 --- a/genkeys.go +++ b/genkeys.go @@ -418,15 +418,25 @@ func init() { uiKeyNameToJSKey[string(c)] = "Key" + string(c) } // Function keys - for i := 1; i <= 12; i++ { + for i := 1; i <= 24; i++ { name := "F" + strconv.Itoa(i) glfwKeyNameToGLFWKey[name] = glfwKeyF1 + i - 1 uiKeyNameToGLFWKeyName[name] = name - androidKeyToUIKeyName[131+i-1] = name - // Note: iOS keys go up to F24 (with F13 being 0x68 and increasing from there), - // but Ebitengine currently only goes to F12. - iosKeyToUIKeyName[0x3A+i-1] = name - gbuildKeyToUIKeyName[key.CodeF1+key.Code(i)-1] = name + // Android doesn't support F13 and more as constants of KeyEvent: + // https://developer.android.com/reference/android/view/KeyEvent + // + // Note that F13 might be avilable if HID devices are available directly: + // https://source.android.com/docs/core/interaction/input/keyboard-devices + if i <= 12 { + androidKeyToUIKeyName[131+i-1] = name + } + if i <= 12 { + iosKeyToUIKeyName[0x3A+i-1] = name + gbuildKeyToUIKeyName[key.CodeF1+key.Code(i)-1] = name + } else { + iosKeyToUIKeyName[0x68+i-13] = name + gbuildKeyToUIKeyName[key.CodeF13+key.Code(i)-13] = name + } uiKeyNameToJSKey[name] = name } // Numpad diff --git a/internal/glfw/keys.go b/internal/glfw/keys.go index 0e056955d..b6b3bd34f 100644 --- a/internal/glfw/keys.go +++ b/internal/glfw/keys.go @@ -50,7 +50,19 @@ const ( KeyF10 = Key(299) KeyF11 = Key(300) KeyF12 = Key(301) + KeyF13 = Key(302) + KeyF14 = Key(303) + KeyF15 = Key(304) + KeyF16 = Key(305) + KeyF17 = Key(306) + KeyF18 = Key(307) + KeyF19 = Key(308) KeyF2 = Key(291) + KeyF20 = Key(309) + KeyF21 = Key(310) + KeyF22 = Key(311) + KeyF23 = Key(312) + KeyF24 = Key(313) KeyF3 = Key(292) KeyF4 = Key(293) KeyF5 = Key(294) diff --git a/internal/ui/keys.go b/internal/ui/keys.go index 18fa8352b..b0b4118d5 100644 --- a/internal/ui/keys.go +++ b/internal/ui/keys.go @@ -92,6 +92,18 @@ const ( KeyF10 KeyF11 KeyF12 + KeyF13 + KeyF14 + KeyF15 + KeyF16 + KeyF17 + KeyF18 + KeyF19 + KeyF20 + KeyF21 + KeyF22 + KeyF23 + KeyF24 KeyHome KeyInsert KeyMetaLeft @@ -275,6 +287,30 @@ func (k Key) String() string { return "KeyF11" case KeyF12: return "KeyF12" + case KeyF13: + return "KeyF13" + case KeyF14: + return "KeyF14" + case KeyF15: + return "KeyF15" + case KeyF16: + return "KeyF16" + case KeyF17: + return "KeyF17" + case KeyF18: + return "KeyF18" + case KeyF19: + return "KeyF19" + case KeyF20: + return "KeyF20" + case KeyF21: + return "KeyF21" + case KeyF22: + return "KeyF22" + case KeyF23: + return "KeyF23" + case KeyF24: + return "KeyF24" case KeyHome: return "KeyHome" case KeyInsert: diff --git a/internal/ui/keys_glfw.go b/internal/ui/keys_glfw.go index fea83efd5..04e424002 100644 --- a/internal/ui/keys_glfw.go +++ b/internal/ui/keys_glfw.go @@ -64,7 +64,19 @@ var uiKeyToGLFWKey = map[Key]glfw.Key{ KeyF10: glfw.KeyF10, KeyF11: glfw.KeyF11, KeyF12: glfw.KeyF12, + KeyF13: glfw.KeyF13, + KeyF14: glfw.KeyF14, + KeyF15: glfw.KeyF15, + KeyF16: glfw.KeyF16, + KeyF17: glfw.KeyF17, + KeyF18: glfw.KeyF18, + KeyF19: glfw.KeyF19, KeyF2: glfw.KeyF2, + KeyF20: glfw.KeyF20, + KeyF21: glfw.KeyF21, + KeyF22: glfw.KeyF22, + KeyF23: glfw.KeyF23, + KeyF24: glfw.KeyF24, KeyF3: glfw.KeyF3, KeyF4: glfw.KeyF4, KeyF5: glfw.KeyF5, diff --git a/internal/ui/keys_js.go b/internal/ui/keys_js.go index d4bb75638..6678a2c21 100644 --- a/internal/ui/keys_js.go +++ b/internal/ui/keys_js.go @@ -62,7 +62,19 @@ var uiKeyToJSKey = map[Key]js.Value{ KeyF10: js.ValueOf("F10"), KeyF11: js.ValueOf("F11"), KeyF12: js.ValueOf("F12"), + KeyF13: js.ValueOf("F13"), + KeyF14: js.ValueOf("F14"), + KeyF15: js.ValueOf("F15"), + KeyF16: js.ValueOf("F16"), + KeyF17: js.ValueOf("F17"), + KeyF18: js.ValueOf("F18"), + KeyF19: js.ValueOf("F19"), KeyF2: js.ValueOf("F2"), + KeyF20: js.ValueOf("F20"), + KeyF21: js.ValueOf("F21"), + KeyF22: js.ValueOf("F22"), + KeyF23: js.ValueOf("F23"), + KeyF24: js.ValueOf("F24"), KeyF3: js.ValueOf("F3"), KeyF4: js.ValueOf("F4"), KeyF5: js.ValueOf("F5"), diff --git a/internal/ui/keys_mobile.go b/internal/ui/keys_mobile.go index c5876ab7d..f12607e26 100644 --- a/internal/ui/keys_mobile.go +++ b/internal/ui/keys_mobile.go @@ -117,6 +117,18 @@ var gbuildKeyToUIKey = map[key.Code]Key{ key.CodeKeypad0: KeyNumpad0, key.CodeKeypadFullStop: KeyNumpadDecimal, key.CodeKeypadEqualSign: KeyNumpadEqual, + key.CodeF13: KeyF13, + key.CodeF14: KeyF14, + key.CodeF15: KeyF15, + key.CodeF16: KeyF16, + key.CodeF17: KeyF17, + key.CodeF18: KeyF18, + key.CodeF19: KeyF19, + key.CodeF20: KeyF20, + key.CodeF21: KeyF21, + key.CodeF22: KeyF22, + key.CodeF23: KeyF23, + key.CodeF24: KeyF24, key.CodeLeftControl: KeyControlLeft, key.CodeLeftShift: KeyShiftLeft, key.CodeLeftAlt: KeyAltLeft, diff --git a/keys.go b/keys.go index e41523122..01f2c7447 100644 --- a/keys.go +++ b/keys.go @@ -99,6 +99,18 @@ const ( KeyF10 Key = Key(ui.KeyF10) KeyF11 Key = Key(ui.KeyF11) KeyF12 Key = Key(ui.KeyF12) + KeyF13 Key = Key(ui.KeyF13) + KeyF14 Key = Key(ui.KeyF14) + KeyF15 Key = Key(ui.KeyF15) + KeyF16 Key = Key(ui.KeyF16) + KeyF17 Key = Key(ui.KeyF17) + KeyF18 Key = Key(ui.KeyF18) + KeyF19 Key = Key(ui.KeyF19) + KeyF20 Key = Key(ui.KeyF20) + KeyF21 Key = Key(ui.KeyF21) + KeyF22 Key = Key(ui.KeyF22) + KeyF23 Key = Key(ui.KeyF23) + KeyF24 Key = Key(ui.KeyF24) KeyHome Key = Key(ui.KeyHome) KeyInsert Key = Key(ui.KeyInsert) KeyMetaLeft Key = Key(ui.KeyMetaLeft) @@ -325,6 +337,30 @@ func (k Key) isValid() bool { return true case KeyF12: return true + case KeyF13: + return true + case KeyF14: + return true + case KeyF15: + return true + case KeyF16: + return true + case KeyF17: + return true + case KeyF18: + return true + case KeyF19: + return true + case KeyF20: + return true + case KeyF21: + return true + case KeyF22: + return true + case KeyF23: + return true + case KeyF24: + return true case KeyHome: return true case KeyInsert: @@ -554,6 +590,30 @@ func (k Key) String() string { return "F11" case KeyF12: return "F12" + case KeyF13: + return "F13" + case KeyF14: + return "F14" + case KeyF15: + return "F15" + case KeyF16: + return "F16" + case KeyF17: + return "F17" + case KeyF18: + return "F18" + case KeyF19: + return "F19" + case KeyF20: + return "F20" + case KeyF21: + return "F21" + case KeyF22: + return "F22" + case KeyF23: + return "F23" + case KeyF24: + return "F24" case KeyHome: return "Home" case KeyInsert: @@ -802,6 +862,30 @@ func keyNameToKeyCode(name string) (Key, bool) { return KeyF11, true case "f12": return KeyF12, true + case "f13": + return KeyF13, true + case "f14": + return KeyF14, true + case "f15": + return KeyF15, true + case "f16": + return KeyF16, true + case "f17": + return KeyF17, true + case "f18": + return KeyF18, true + case "f19": + return KeyF19, true + case "f20": + return KeyF20, true + case "f21": + return KeyF21, true + case "f22": + return KeyF22, true + case "f23": + return KeyF23, true + case "f24": + return KeyF24, true case "graveaccent": return KeyGraveAccent, true case "home": diff --git a/mobile/ebitenmobileview/keys_ios.go b/mobile/ebitenmobileview/keys_ios.go index d7eab2c26..2b16318fa 100644 --- a/mobile/ebitenmobileview/keys_ios.go +++ b/mobile/ebitenmobileview/keys_ios.go @@ -119,6 +119,18 @@ var iosKeyToUIKey = map[int]ui.Key{ 99: ui.KeyNumpadDecimal, 100: ui.KeyBackslash, 103: ui.KeyNumpadEqual, + 104: ui.KeyF13, + 105: ui.KeyF14, + 106: ui.KeyF15, + 107: ui.KeyF16, + 108: ui.KeyF17, + 109: ui.KeyF18, + 110: ui.KeyF19, + 111: ui.KeyF20, + 112: ui.KeyF21, + 113: ui.KeyF22, + 114: ui.KeyF23, + 115: ui.KeyF24, 118: ui.KeyContextMenu, 130: ui.KeyCapsLock, 131: ui.KeyNumLock,