mirror of
https://github.com/jroimartin/gocui.git
synced 2025-04-24 13:48:51 +08:00
Set cursor on mouse events
This commit is contained in:
parent
b5f65e10ad
commit
260872b0f7
@ -24,6 +24,9 @@ func main() {
|
|||||||
if err := keybindings(g); err != nil {
|
if err := keybindings(g); err != nil {
|
||||||
log.Panicln(err)
|
log.Panicln(err)
|
||||||
}
|
}
|
||||||
|
g.SelBgColor = gocui.ColorGreen
|
||||||
|
g.SelFgColor = gocui.ColorBlack
|
||||||
|
g.ShowCursor = true
|
||||||
g.Mouse = true
|
g.Mouse = true
|
||||||
|
|
||||||
err = g.MainLoop()
|
err = g.MainLoop()
|
||||||
@ -33,17 +36,22 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func layout(g *gocui.Gui) error {
|
func layout(g *gocui.Gui) error {
|
||||||
if v, err := g.SetView("but1", 2, 2, 12, 4); err != nil {
|
if v, err := g.SetView("but1", 2, 2, 22, 7); err != nil {
|
||||||
if err != gocui.ErrUnknownView {
|
if err != gocui.ErrUnknownView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Fprintln(v, "Button 1")
|
v.Highlight = true
|
||||||
|
fmt.Fprintln(v, "Button 1 - line 1")
|
||||||
|
fmt.Fprintln(v, "Button 1 - line 2")
|
||||||
|
fmt.Fprintln(v, "Button 1 - line 3")
|
||||||
|
fmt.Fprintln(v, "Button 1 - line 4")
|
||||||
}
|
}
|
||||||
if v, err := g.SetView("but2", 14, 2, 24, 4); err != nil {
|
if v, err := g.SetView("but2", 24, 2, 44, 4); err != nil {
|
||||||
if err != gocui.ErrUnknownView {
|
if err != gocui.ErrUnknownView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Fprintln(v, "Button 2")
|
v.Highlight = true
|
||||||
|
fmt.Fprintln(v, "Button 2 - line 1")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -71,13 +79,17 @@ func showMsg(g *gocui.Gui, v *gocui.View) error {
|
|||||||
var l string
|
var l string
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
if err := g.SetCurrentView(v.Name()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
_, cy := v.Cursor()
|
_, cy := v.Cursor()
|
||||||
if l, err = v.Line(cy); err != nil {
|
if l, err = v.Line(cy); err != nil {
|
||||||
l = ""
|
l = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
maxX, maxY := g.Size()
|
maxX, maxY := g.Size()
|
||||||
if v, err := g.SetView("msg", maxX/2-5, maxY/2, maxX/2+5, maxY/2+2); err != nil {
|
if v, err := g.SetView("msg", maxX/2-10, maxY/2, maxX/2+10, maxY/2+2); err != nil {
|
||||||
if err != gocui.ErrUnknownView {
|
if err != gocui.ErrUnknownView {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
12
gui.go
12
gui.go
@ -147,7 +147,7 @@ func (g *Gui) View(name string) (*View, error) {
|
|||||||
// error ErrUnknownView if a view in that position does not exist.
|
// error ErrUnknownView if a view in that position does not exist.
|
||||||
func (g *Gui) ViewByPosition(x, y int) (*View, error) {
|
func (g *Gui) ViewByPosition(x, y int) (*View, error) {
|
||||||
for _, v := range g.views {
|
for _, v := range g.views {
|
||||||
if x >= v.x0 && x <= v.x1 && y >= v.y0 && y <= v.y1 {
|
if x > v.x0 && x < v.x1 && y > v.y0 && y < v.y1 {
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -498,9 +498,15 @@ func (g *Gui) onKey(ev *termbox.Event) error {
|
|||||||
}
|
}
|
||||||
curView = g.currentView
|
curView = g.currentView
|
||||||
case termbox.EventMouse:
|
case termbox.EventMouse:
|
||||||
if v, err := g.ViewByPosition(ev.MouseX, ev.MouseY); err == nil {
|
mx, my := ev.MouseX, ev.MouseY
|
||||||
curView = v
|
v, err := g.ViewByPosition(mx, my)
|
||||||
|
if err != nil {
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
if err := v.SetCursor(mx-v.x0-1, my-v.y0-1); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
curView = v
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, kb := range g.keybindings {
|
for _, kb := range g.keybindings {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user