zworld/plugins/system/input/keys/handler.go
2024-01-14 22:56:06 +08:00

71 lines
1.0 KiB
Go

package keys
import (
"github.com/go-gl/glfw/v3.3/glfw"
)
type Callback func(Event)
type Handler interface {
KeyEvent(Event)
}
type FocusHandler interface {
Handler
FocusEvent()
BlurEvent()
}
var focused FocusHandler
func KeyCallbackWrapper(handler Handler) glfw.KeyCallback {
return func(
w *glfw.Window,
key glfw.Key,
scancode int,
action glfw.Action,
mods glfw.ModifierKey,
) {
ev := &event{
code: Code(key),
action: Action(action),
mods: Modifier(mods),
}
if focused != nil {
focused.KeyEvent(ev)
} else {
handler.KeyEvent(ev)
}
}
}
func CharCallbackWrapper(handler Handler) glfw.CharCallback {
return func(
w *glfw.Window,
char rune,
) {
ev := &event{
char: char,
action: Char,
}
if focused != nil {
focused.KeyEvent(ev)
} else {
handler.KeyEvent(ev)
}
}
}
func Focus(handler FocusHandler) {
if focused == handler {
return
}
if focused != nil {
focused.BlurEvent()
}
focused = handler
if focused != nil {
focused.FocusEvent()
}
}