dragging a windows keeps it put

This commit is contained in:
Jeff Carr 2025-02-06 14:46:32 -06:00
parent bc15e6c879
commit 93e87a05c7
3 changed files with 18 additions and 5 deletions

View File

@ -105,6 +105,7 @@ func mouseMove(g *gocui.Gui) {
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
return

View File

@ -119,6 +119,7 @@ func (r *rectType) Height() int {
// settings that are window specific
type window struct {
windowFrame *guiWidget // this is the frame for a window widget
wasDragged bool // indicates the window was dragged. This keeps it from being rearranged
dragW int // when dragging a window, this is the offset to the mouse position
dragH int // when dragging a window, this is the offset to the mouse position
hasTabs bool // does the window have tabs?

View File

@ -83,13 +83,24 @@ func (tk *guiWidget) redrawWindow(w int, h int) {
// re-draws the buttons for each of the windows
func redoWindows(nextW int, nextH int) {
for _, win := range findWindows() {
win.dumpWidget(fmt.Sprintf("redoWindowsS (%d,%d)", nextW, nextH))
win.redrawWindow(nextW, nextH)
win.dumpWidget(fmt.Sprintf("redoWindowsE (%d,%d)", nextW, nextH))
for _, tk := range findWindows() {
tk.dumpWidget(fmt.Sprintf("redoWindowsS (%d,%d)", nextW, nextH))
if tk.window.wasDragged {
// don't move windows around the user has dragged to a certain location
tk.redrawWindow(tk.gocuiSize.w0, tk.gocuiSize.h0)
} else {
w, _ := me.baseGui.Size()
if nextW > w-20 {
nextW = 0
nextH += 4
}
// probably a new window?
tk.redrawWindow(nextW, nextH)
}
tk.dumpWidget(fmt.Sprintf("redoWindowsE (%d,%d)", nextW, nextH))
// increment the width for the next window
nextW += win.gocuiSize.Width() + 10
nextW += tk.gocuiSize.Width() + 10
// nextH += 10
}
}