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