Files
KidsKeyboard/internal/modes/input.go
2026-05-22 13:00:28 +02:00

84 lines
1.8 KiB
Go

package modes
import (
"strconv"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/inpututil"
)
func justPressedKeys() []ebiten.Key {
var keys []ebiten.Key
keys = inpututil.AppendJustPressedKeys(keys)
return keys
}
func childKey(key ebiten.Key) bool {
switch key {
case ebiten.KeyControl, ebiten.KeyControlLeft, ebiten.KeyControlRight,
ebiten.KeyShift, ebiten.KeyShiftLeft, ebiten.KeyShiftRight,
ebiten.KeyAlt, ebiten.KeyAltLeft, ebiten.KeyAltRight,
ebiten.KeyMeta, ebiten.KeyEscape,
ebiten.KeyF1, ebiten.KeyF2, ebiten.KeyF3, ebiten.KeyF4,
ebiten.KeyF5, ebiten.KeyF6, ebiten.KeyF7, ebiten.KeyF8,
ebiten.KeyF9, ebiten.KeyF10, ebiten.KeyF11, ebiten.KeyF12:
return false
default:
return true
}
}
func keyLabel(key ebiten.Key) string {
if r, ok := keyRune(key); ok {
return string(r)
}
switch key {
case ebiten.KeySpace:
return "SPACE"
case ebiten.KeyEnter, ebiten.KeyNumpadEnter:
return "ENTER"
case ebiten.KeyBackspace:
return "BKSP"
case ebiten.KeyDelete:
return "DEL"
case ebiten.KeyTab:
return "TAB"
case ebiten.KeyArrowLeft:
return "LEFT"
case ebiten.KeyArrowRight:
return "RIGHT"
case ebiten.KeyArrowUp:
return "UP"
case ebiten.KeyArrowDown:
return "DOWN"
default:
return key.String()
}
}
func keyRune(key ebiten.Key) (rune, bool) {
if key >= ebiten.KeyA && key <= ebiten.KeyZ {
return rune('A' + int(key-ebiten.KeyA)), true
}
if key >= ebiten.KeyDigit0 && key <= ebiten.KeyDigit9 {
return rune('0' + int(key-ebiten.KeyDigit0)), true
}
if key >= ebiten.KeyNumpad0 && key <= ebiten.KeyNumpad9 {
return rune('0' + int(key-ebiten.KeyNumpad0)), true
}
return 0, false
}
func digitValue(key ebiten.Key) (string, bool) {
r, ok := keyRune(key)
if !ok || r < '0' || r > '9' {
return "", false
}
return string(r), true
}
func parseDigit(s string) int {
v, _ := strconv.Atoi(s)
return v
}