From f1eefc9a06880784269424bd5d8156ce7820b40d Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Wed, 5 Feb 2025 12:32:41 -0600 Subject: [PATCH] move code to better homes --- eventMouseClick.go | 2 +- eventMouseMove.go | 2 +- find.go | 203 --------------------------------------------- size.go | 203 +++++++++++++++++++++++++++++++++++++++++++++ structs.go | 1 + window.go | 15 ++-- 6 files changed, 215 insertions(+), 211 deletions(-) diff --git a/eventMouseClick.go b/eventMouseClick.go index 3707ae0..bfff2d4 100644 --- a/eventMouseClick.go +++ b/eventMouseClick.go @@ -27,7 +27,7 @@ func (tk *guiWidget) doWidgetClick(w int, h int) { me.currentWindow.isCurrent = true tk.active = false - tk.redrawWindow(w, h) + tk.redrawWindow(w-2, h-2) // TODO: fix these hard coded things with offsets return case widget.Group: if tk.active { diff --git a/eventMouseMove.go b/eventMouseMove.go index 16cafb6..0bfec5b 100644 --- a/eventMouseMove.go +++ b/eventMouseMove.go @@ -93,7 +93,7 @@ func (tk *guiWidget) moveNew() { w, h := me.baseGui.MousePosition() if tk.node.WidgetType == widget.Window { tk.DrawAt(w, h) - tk.redrawWindow(w, h) + tk.redrawWindow(w-2, h-2) // TODO: fix these hard coded things with offsets // tk.dumpWidget(fmt.Sprintf("move(%dx%d) %s WIN", w, h, tk.cuiName)) return } diff --git a/find.go b/find.go index 672fc40..b07f711 100644 --- a/find.go +++ b/find.go @@ -4,8 +4,6 @@ package main import ( - "fmt" - "github.com/awesome-gocui/gocui" "go.wit.com/widget" ) @@ -93,207 +91,6 @@ func (tk *guiWidget) findWindows() []*guiWidget { return found } -/* -var wtf bool - -func (tk *guiWidget) verifyRect() bool { - if !tk.Visible() { - // log.Info("verifyRect() tk is not visible", tk.cuiName) - return false - } - vw0, vh0, vw1, vh1, err := me.baseGui.ViewPosition(tk.cuiName) - if err != nil { - // log.Printf("verifyRect() gocui err=%v cuiName=%s v.Name=%s", err, tk.cuiName, tk.v.Name()) - vw0, vh0, vw1, vh1, err = me.baseGui.ViewPosition(tk.v.Name()) - if err != nil { - log.Printf("verifyRect() ACTUAL FAIL gocui err=%v cuiName=%s v.Name=%s", err, tk.cuiName, tk.v.Name()) - return false - } - // return false - } - var ok bool = true - if vw0 != tk.full.w0 { - // log.Info("verifyRect() FIXING w0", tk.cuiName, vw0, vw1, vh0, vh1, tk.gocuiSize.w0, "w0 =", vw0) - tk.full.w0 = vw0 - ok = false - } - if vw1 != tk.full.w1 { - // log.Info("verifyRect() FIXING w1", tk.cuiName, vw0, vw1, vh0, vh1, tk.gocuiSize.w1, "w1 =", vw1) - tk.full.w1 = vw1 - ok = false - } - if vh0 != tk.full.h0 { - // log.Info("verifyRect() FIXING h0", tk.cuiName, vw0, vw1, vh0, vh1, tk.gocuiSize.h0) - tk.full.h0 = vh0 - ok = false - } - if vh1 != tk.full.h1 { - // log.Info("verifyRect() FIXING h1", tk.cuiName, vw0, vw1, vh0, vh1, tk.gocuiSize.h1) - tk.full.h1 = vh1 - ok = false - } - if !ok { - // log.Info("verifyRect() NEED TO FIX RECT HERE", tk.cuiName) - // tk.dumpWidget("verifyRect() FIXME") - } - // log.Printf("verifyRect() OK cuiName=%s v.Name=%s", tk.cuiName, tk.v.Name()) - return true -} -*/ - -func (tk *guiWidget) setFullSize() bool { - r := tk.getFullSize() - - var changed bool - if tk.full.w0 != r.w0 { - tk.full.w0 = r.w0 - changed = true - } - if tk.full.w1 != r.w1 { - tk.full.w1 = r.w1 - changed = true - } - if tk.full.h0 != r.h0 { - tk.full.h0 = r.h0 - changed = true - } - if tk.full.h1 != r.h1 { - tk.full.h1 = r.h1 - changed = true - } - if changed { - tk.dumpWidget(fmt.Sprintf("setFullSize(changed)")) - } - return changed -} - -func (tk *guiWidget) gridFullSize() rectType { - var r rectType - var first bool = true - for _, child := range tk.children { - cr := child.getFullSize() - if cr.Width() == 0 && cr.Height() == 0 { - // ignore widgets of zero size? - continue - } - if first { - // use the lowest width and hight from children widgets - r.w0 = cr.w0 - r.h0 = cr.h0 - r.w1 = cr.w1 - r.h1 = cr.h1 - first = false - // child.dumpWidget(fmt.Sprintf("grid(f)")) - continue - } - // child.dumpWidget(fmt.Sprintf("grid()")) - // use the lowest width and hight from children widgets - if r.w0 > cr.w0 { - r.w0 = cr.w0 - } - if r.h0 > cr.h0 { - r.h0 = cr.h0 - } - // use the highest width and hight from children widgets - if r.w1 < cr.w1 { - r.w1 = cr.w1 - } - if r.h1 < cr.h1 { - r.h1 = cr.h1 - } - } - tk.full.w0 = r.w0 - tk.full.w1 = r.w1 - tk.full.h0 = r.h0 - tk.full.h1 = r.h1 - return r -} - -func (tk *guiWidget) buttonFullSize() rectType { - var r rectType - r.w0 = tk.gocuiSize.w0 - r.w1 = tk.gocuiSize.w1 - r.h0 = tk.gocuiSize.h0 - r.h1 = tk.gocuiSize.h1 - - // try setting the full values here ? is this right? - tk.full.w0 = r.w0 - tk.full.w1 = r.w1 - tk.full.h0 = r.h0 - tk.full.h1 = r.h1 - - return r -} - -// this checks a widget to see if it is under (W,H), then checks the widget's children -// anything that matches is passed back as an array of widgets -func (tk *guiWidget) getFullSize() rectType { - var r rectType - - if tk.node.WidgetType == widget.Grid { - return tk.gridFullSize() - } - - // these are 'simple' widgets - // the full size is exactly what gocui uses - switch tk.node.WidgetType { - case widget.Label: - return tk.buttonFullSize() - case widget.Button: - return tk.buttonFullSize() - case widget.Checkbox: - return tk.buttonFullSize() - case widget.Dropdown: - return tk.buttonFullSize() - default: - } - - if tk.v == nil { - r.w0 = tk.full.w0 - r.w1 = tk.full.w1 - r.h0 = tk.full.h0 - r.h1 = tk.full.h1 - } else { - r.w0 = tk.gocuiSize.w0 - r.w1 = tk.gocuiSize.w1 - r.h0 = tk.gocuiSize.h0 - r.h1 = tk.gocuiSize.h1 - } - - // search through the children widgets in the binary tree - for _, child := range tk.children { - cr := child.getFullSize() - /* this didn't make things work either - if child.v == nil { - continue - } - */ - // use the lowest width and hight from children widgets - if r.w0 > cr.w0 { - r.w0 = cr.w0 - } - if r.h0 > cr.h0 { - r.h0 = cr.h0 - } - // use the highest width and hight from children widgets - if r.w1 < cr.w1 { - r.w1 = cr.w1 - } - if r.h1 < cr.h1 { - r.h1 = cr.h1 - } - - } - - // try setting the full values here ? is this right? - tk.full.w0 = r.w0 - tk.full.w1 = r.w1 - tk.full.h0 = r.h0 - tk.full.h1 = r.h1 - - return r -} - // returns the "highest priority widget under the mouse func findUnderMouse() *guiWidget { w, h := me.baseGui.MousePosition() diff --git a/size.go b/size.go index ac12415..2d06e4e 100644 --- a/size.go +++ b/size.go @@ -4,6 +4,8 @@ package main import ( + "fmt" + "go.wit.com/widget" ) @@ -133,3 +135,204 @@ func (w *guiWidget) sizeBox() (int, int) { } return maxW + me.BoxPadW, maxH } + +/* +var wtf bool + +func (tk *guiWidget) verifyRect() bool { + if !tk.Visible() { + // log.Info("verifyRect() tk is not visible", tk.cuiName) + return false + } + vw0, vh0, vw1, vh1, err := me.baseGui.ViewPosition(tk.cuiName) + if err != nil { + // log.Printf("verifyRect() gocui err=%v cuiName=%s v.Name=%s", err, tk.cuiName, tk.v.Name()) + vw0, vh0, vw1, vh1, err = me.baseGui.ViewPosition(tk.v.Name()) + if err != nil { + log.Printf("verifyRect() ACTUAL FAIL gocui err=%v cuiName=%s v.Name=%s", err, tk.cuiName, tk.v.Name()) + return false + } + // return false + } + var ok bool = true + if vw0 != tk.full.w0 { + // log.Info("verifyRect() FIXING w0", tk.cuiName, vw0, vw1, vh0, vh1, tk.gocuiSize.w0, "w0 =", vw0) + tk.full.w0 = vw0 + ok = false + } + if vw1 != tk.full.w1 { + // log.Info("verifyRect() FIXING w1", tk.cuiName, vw0, vw1, vh0, vh1, tk.gocuiSize.w1, "w1 =", vw1) + tk.full.w1 = vw1 + ok = false + } + if vh0 != tk.full.h0 { + // log.Info("verifyRect() FIXING h0", tk.cuiName, vw0, vw1, vh0, vh1, tk.gocuiSize.h0) + tk.full.h0 = vh0 + ok = false + } + if vh1 != tk.full.h1 { + // log.Info("verifyRect() FIXING h1", tk.cuiName, vw0, vw1, vh0, vh1, tk.gocuiSize.h1) + tk.full.h1 = vh1 + ok = false + } + if !ok { + // log.Info("verifyRect() NEED TO FIX RECT HERE", tk.cuiName) + // tk.dumpWidget("verifyRect() FIXME") + } + // log.Printf("verifyRect() OK cuiName=%s v.Name=%s", tk.cuiName, tk.v.Name()) + return true +} +*/ + +func (tk *guiWidget) setFullSize() bool { + r := tk.getFullSize() + + var changed bool + if tk.full.w0 != r.w0 { + tk.full.w0 = r.w0 + changed = true + } + if tk.full.w1 != r.w1 { + tk.full.w1 = r.w1 + changed = true + } + if tk.full.h0 != r.h0 { + tk.full.h0 = r.h0 + changed = true + } + if tk.full.h1 != r.h1 { + tk.full.h1 = r.h1 + changed = true + } + if changed { + tk.dumpWidget(fmt.Sprintf("setFullSize(changed)")) + } + return changed +} + +func (tk *guiWidget) gridFullSize() rectType { + var r rectType + var first bool = true + for _, child := range tk.children { + cr := child.getFullSize() + if cr.Width() == 0 && cr.Height() == 0 { + // ignore widgets of zero size? + continue + } + if first { + // use the lowest width and hight from children widgets + r.w0 = cr.w0 + r.h0 = cr.h0 + r.w1 = cr.w1 + r.h1 = cr.h1 + first = false + // child.dumpWidget(fmt.Sprintf("grid(f)")) + continue + } + // child.dumpWidget(fmt.Sprintf("grid()")) + // use the lowest width and hight from children widgets + if r.w0 > cr.w0 { + r.w0 = cr.w0 + } + if r.h0 > cr.h0 { + r.h0 = cr.h0 + } + // use the highest width and hight from children widgets + if r.w1 < cr.w1 { + r.w1 = cr.w1 + } + if r.h1 < cr.h1 { + r.h1 = cr.h1 + } + } + tk.full.w0 = r.w0 + tk.full.w1 = r.w1 + tk.full.h0 = r.h0 + tk.full.h1 = r.h1 + return r +} + +func (tk *guiWidget) buttonFullSize() rectType { + var r rectType + r.w0 = tk.gocuiSize.w0 + r.w1 = tk.gocuiSize.w1 + r.h0 = tk.gocuiSize.h0 + r.h1 = tk.gocuiSize.h1 + + // try setting the full values here ? is this right? + tk.full.w0 = r.w0 + tk.full.w1 = r.w1 + tk.full.h0 = r.h0 + tk.full.h1 = r.h1 + + return r +} + +// this checks a widget to see if it is under (W,H), then checks the widget's children +// anything that matches is passed back as an array of widgets +func (tk *guiWidget) getFullSize() rectType { + var r rectType + + if tk.node.WidgetType == widget.Grid { + return tk.gridFullSize() + } + + // these are 'simple' widgets + // the full size is exactly what gocui uses + switch tk.node.WidgetType { + case widget.Label: + return tk.buttonFullSize() + case widget.Button: + return tk.buttonFullSize() + case widget.Checkbox: + return tk.buttonFullSize() + case widget.Dropdown: + return tk.buttonFullSize() + default: + } + + if tk.v == nil { + r.w0 = tk.full.w0 + r.w1 = tk.full.w1 + r.h0 = tk.full.h0 + r.h1 = tk.full.h1 + } else { + r.w0 = tk.gocuiSize.w0 + r.w1 = tk.gocuiSize.w1 + r.h0 = tk.gocuiSize.h0 + r.h1 = tk.gocuiSize.h1 + } + + // search through the children widgets in the binary tree + for _, child := range tk.children { + cr := child.getFullSize() + /* this didn't make things work either + if child.v == nil { + continue + } + */ + // use the lowest width and hight from children widgets + if r.w0 > cr.w0 { + r.w0 = cr.w0 + } + if r.h0 > cr.h0 { + r.h0 = cr.h0 + } + // use the highest width and hight from children widgets + if r.w1 < cr.w1 { + r.w1 = cr.w1 + } + if r.h1 < cr.h1 { + r.h1 = cr.h1 + } + + } + + // try setting the full values here ? is this right? + tk.full.w0 = r.w0 + tk.full.w1 = r.w1 + tk.full.h0 = r.h0 + tk.full.h1 = r.h1 + + return r +} diff --git a/structs.go b/structs.go index c5c58b2..55ab07d 100644 --- a/structs.go +++ b/structs.go @@ -110,6 +110,7 @@ type guiWidget struct { defaultColor *colorT // store the color to go back to gocuiSize rectType // should mirror the real display size. todo: verify these are accurate. they are not yet full rectType // full size of children (used by widget.Window, etc) + force rectType // force widget within these boundries (using this to debug window dragging) startW int // ? startH int // ? isCurrent bool // is this the currently displayed Window or Tab? diff --git a/window.go b/window.go index 2f0673a..3a2cc13 100644 --- a/window.go +++ b/window.go @@ -13,8 +13,13 @@ func (tk *guiWidget) redrawWindow(w int, h int) { if tk.node.WidgetType != widget.Window { return } - tk.gocuiSize.w0 = w - 2 - tk.gocuiSize.h0 = h - 1 + // pin the window to (w,h) + tk.gocuiSize.w0 = w + tk.gocuiSize.h0 = h + tk.force.w0 = w + tk.force.w1 = w + tk.force.h0 = h + tk.force.h1 = h tk.setFullSize() // might make the green box the right size @@ -34,14 +39,12 @@ 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.gocuiSize.w0 = nextW - win.gocuiSize.h0 = nextH - win.dumpWidget(fmt.Sprintf("redoWindowsS (%d,%d)", nextW, nextH)) win.redrawWindow(nextW, nextH) win.dumpWidget(fmt.Sprintf("redoWindowsE (%d,%d)", nextW, nextH)) // increment the width for the next window - nextW += win.gocuiSize.Width() + 4 + nextW += 40 + nextH += 10 } }