diff options
Diffstat (limited to 'eventMouse.go')
| -rw-r--r-- | eventMouse.go | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/eventMouse.go b/eventMouse.go new file mode 100644 index 0000000..88702c3 --- /dev/null +++ b/eventMouse.go @@ -0,0 +1,112 @@ +// Copyright 2017-2025 WIT.COM Inc. All rights reserved. +// Use of this source code is governed by the GPL 3.0 + +// NOTE: our code is under the GPL, not BSD + +// note by [email protected] in 2025: this is one of the coolest +// things ever what this does. I've tried to improve +// it while I've been working on making a gocui +// GO plugin so it can be generalized as a useful +// console interface. Well done everyone that has +// contributed to this gocui project !!! + +// Copyright 2014 The gocui Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "errors" + "fmt" + + "github.com/awesome-gocui/gocui" + + "go.wit.com/log" +) + +// this function uses the mouse position to highlight & unhighlight things +// this is run every time the user moves the mouse over the terminal window +func mouseMove(g *gocui.Gui) { + mx, my := g.MousePosition() + for _, view := range g.Views() { + view.Highlight = false + } + if v, err := g.ViewByPosition(mx, my); err == nil { + v.Highlight = true + } +} + +func msgDown(g *gocui.Gui, v *gocui.View) error { + initialMouseX, initialMouseY = g.MousePosition() + + // debugging output + log.Log(GOCUI, "msgDown() X,Y", initialMouseX, initialMouseY) + + // + vx, vy, _, _, err := g.ViewPosition("msg") + if err == nil { + xOffset = initialMouseX - vx + yOffset = initialMouseY - vy + msgMouseDown = true + } + return nil +} + +func mouseUp(g *gocui.Gui, v *gocui.View) error { + w, h := g.MousePosition() + + dropdownUnclicked(w, h) + + if msgMouseDown { + msgMouseDown = false + if movingMsg { + movingMsg = false + return nil + } else { + g.DeleteView("msg") + } + } else if globalMouseDown { + globalMouseDown = false + g.DeleteView("globalDown") + } + return nil +} + +// func isMouseInMsg + +// this is where you have to figure out what +// widget was underneath so you can active +// the right response for the toolkit user's app +func mouseDown(g *gocui.Gui, v *gocui.View) error { + mx, my := g.MousePosition() + + vx0, vy0, vx1, vy1, err := g.ViewPosition("msg") + if err == nil { + if mx >= vx0 && mx <= vx1 && my >= vy0 && my <= vy1 { + return msgDown(g, v) + } + } + globalMouseDown = true + + maxX, _ := g.Size() + + findUnderMouse() + + msg := fmt.Sprintf("mouseDown() Mouse really down at: %d,%d", mx, my) + // dropdownClicked(mx, my) + x := mx - len(msg)/2 + if x < 0 { + x = 0 + } else if x+len(msg)+1 > maxX-1 { + x = maxX - 1 - len(msg) - 1 + } + log.Log(GOCUI, "mouseDown() about to write out message to 'globalDown' view. msg =", msg) + if v, err := g.SetView("globalDown", x, my-1, x+len(msg)+1, my+1, 0); err != nil { + if !errors.Is(err, gocui.ErrUnknownView) { + return err + } + v.WriteString(msg) + } + return nil +} |
