/
xinput.go
72 lines (62 loc) · 2.14 KB
/
xinput.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package xinput
import (
"image"
"github.com/BurntSushi/xgb"
"github.com/BurntSushi/xgb/xproto"
"github.com/jmigpin/editor/v2/util/uiutil/event"
)
type XInput struct {
km *KMap
}
func NewXInput(conn *xgb.Conn) (*XInput, error) {
km, err := NewKMap(conn)
if err != nil {
return nil, err
}
xi := &XInput{km: km}
return xi, nil
}
//----------
func (xi *XInput) ReadMapTable() error {
return xi.km.ReadTable()
}
//----------
func (xi *XInput) KeyPress(ev *xproto.KeyPressEvent) *event.WindowInput {
p := image.Point{int(ev.EventX), int(ev.EventY)}
ks, ru := xi.km.Lookup(ev.Detail, ev.State)
m := translateModifiersToEventKeyModifiers(ev.State)
bs := translateModifiersToEventMouseButtons(ev.State)
ev2 := &event.KeyDown{p, ks, m, bs, ru}
return &event.WindowInput{p, ev2}
}
func (xi *XInput) KeyRelease(ev *xproto.KeyReleaseEvent) *event.WindowInput {
p := image.Point{int(ev.EventX), int(ev.EventY)}
ks, ru := xi.km.Lookup(ev.Detail, ev.State)
m := translateModifiersToEventKeyModifiers(ev.State)
bs := translateModifiersToEventMouseButtons(ev.State)
ev2 := &event.KeyUp{p, ks, m, bs, ru}
return &event.WindowInput{p, ev2}
}
func (xi *XInput) ButtonPress(ev *xproto.ButtonPressEvent) *event.WindowInput {
p := image.Point{int(ev.EventX), int(ev.EventY)}
b := translateButtonToEventButton(ev.Detail)
bs := translateModifiersToEventMouseButtons(ev.State)
m := translateModifiersToEventKeyModifiers(ev.State)
ev2 := &event.MouseDown{p, b, bs, m}
return &event.WindowInput{p, ev2}
}
func (xi *XInput) ButtonRelease(ev *xproto.ButtonReleaseEvent) *event.WindowInput {
p := image.Point{int(ev.EventX), int(ev.EventY)}
b := translateButtonToEventButton(ev.Detail)
bs := translateModifiersToEventMouseButtons(ev.State)
m := translateModifiersToEventKeyModifiers(ev.State)
ev2 := &event.MouseUp{p, b, bs, m}
return &event.WindowInput{p, ev2}
}
func (xi *XInput) MotionNotify(ev *xproto.MotionNotifyEvent) *event.WindowInput {
p := image.Point{int(ev.EventX), int(ev.EventY)}
bs := translateModifiersToEventMouseButtons(ev.State)
m := translateModifiersToEventKeyModifiers(ev.State)
ev2 := &event.MouseMove{p, bs, m}
return &event.WindowInput{p, ev2}
}