56 lines
835 B
Go
56 lines
835 B
Go
|
|
package keys
|
||
|
|
|
||
|
|
type State interface {
|
||
|
|
Handler
|
||
|
|
|
||
|
|
Down(Code) bool
|
||
|
|
Up(Code) bool
|
||
|
|
|
||
|
|
Shift() bool
|
||
|
|
Ctrl() bool
|
||
|
|
Alt() bool
|
||
|
|
Super() bool
|
||
|
|
}
|
||
|
|
|
||
|
|
type state map[Code]bool
|
||
|
|
|
||
|
|
func NewState() State {
|
||
|
|
return state{}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s state) KeyEvent(e Event) {
|
||
|
|
if e.Action() == Press {
|
||
|
|
s[e.Code()] = true
|
||
|
|
}
|
||
|
|
if e.Action() == Release {
|
||
|
|
s[e.Code()] = false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s state) Down(key Code) bool {
|
||
|
|
if state, stored := s[key]; stored {
|
||
|
|
return state
|
||
|
|
}
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s state) Up(key Code) bool {
|
||
|
|
return !s.Down(key)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s state) Shift() bool {
|
||
|
|
return s.Down(LeftShift) || s.Down(RightShift)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s state) Alt() bool {
|
||
|
|
return s.Down(LeftAlt) || s.Down(RightAlt)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s state) Ctrl() bool {
|
||
|
|
return s.Down(LeftControl) || s.Down(RightControl)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s state) Super() bool {
|
||
|
|
return s.Down(LeftSuper) || s.Down(RightSuper)
|
||
|
|
}
|