summaryrefslogtreecommitdiff
path: root/eventMouseMove.go
diff options
context:
space:
mode:
Diffstat (limited to 'eventMouseMove.go')
-rw-r--r--eventMouseMove.go36
1 files changed, 23 insertions, 13 deletions
diff --git a/eventMouseMove.go b/eventMouseMove.go
index 01d1d18..e976d22 100644
--- a/eventMouseMove.go
+++ b/eventMouseMove.go
@@ -85,13 +85,13 @@ func mouseMove(g *gocui.Gui) {
}
// new function that is smarter
if tk := findWindowUnderMouse(); tk != nil {
- me.mouse.currentDrag = tk
+ tk.setAsDragging()
return
}
// first look for windows
for _, tk := range findByXY(w, h) {
if tk.node.WidgetType == widget.Window {
- me.mouse.currentDrag = tk
+ tk.setAsDragging()
return
}
}
@@ -99,14 +99,13 @@ func mouseMove(g *gocui.Gui) {
// now look for the STDOUT window
for _, tk := range findByXY(w, h) {
if tk.node.WidgetType == widget.Flag {
- me.mouse.currentDrag = tk
- // tk.moveNew()
+ tk.setAsDragging()
return
}
}
for _, tk := range findByXY(w, h) {
if tk.node.WidgetType == widget.Stdout {
- me.mouse.currentDrag = tk
+ tk.setAsDragging()
// tk.moveNew()
return
}
@@ -124,13 +123,25 @@ func mouseMove(g *gocui.Gui) {
}
}
+func (tk *guiWidget) setAsDragging() {
+ me.mouse.currentDrag = tk
+ tk.lastW = tk.gocuiSize.w0
+ tk.lastH = tk.gocuiSize.h0
+}
+
// this is how the window gets dragged around
func (tk *guiWidget) moveNew() {
w, h := me.baseGui.MousePosition()
if tk.node.WidgetType == widget.Window {
tk.window.wasDragged = true
- tk.redrawWindow(w-tk.dragW, h-tk.dragH) // TODO: fix these hard coded things with offsets
- setThingsOnTop() // sets help, Stdout, etc on the top after windows have been redrawn
+
+ // compute the new location based off how far the mouse has moved
+ // since the mouse button was pressed down
+ newW := tk.lastW + w - me.mouse.downW
+ newH := tk.lastH + h - me.mouse.downH
+ tk.redrawWindow(newW, newH)
+
+ setThingsOnTop() // sets help, Stdout, etc on the top after windows have been redrawn
return
}
if tk.node.WidgetType == widget.Flag {
@@ -151,12 +162,11 @@ func (tk *guiWidget) moveNew() {
// me.stdout.lastH = h - me.stdout.mouseOffsetH
tk.relocateStdout(me.stdout.lastW, me.stdout.lastH)
} else {
- // tk.dumpWidget(fmt.Sprintf("move(%dx%d) %s", w, h, tk.cuiName))
- // log.Info("Resize false", w, h)
- // me.stdout.lastW = w - me.stdout.mouseOffsetW
- // me.stdout.lastH = h - me.stdout.mouseOffsetH
- // tk.relocateStdout(me.stdout.lastW, me.stdout.lastH)
- tk.relocateStdout(w-tk.dragW, h-tk.dragH)
+ // compute the new location based off how far the mouse has moved
+ // since the mouse button was pressed down
+ newW := tk.lastW + w - me.mouse.downW
+ newH := tk.lastH + h - me.mouse.downH
+ tk.relocateStdout(newW, newH)
}
}
// always place the help menu on top