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  }