summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eventMouseClick.go2
-rw-r--r--eventMouseMove.go2
-rw-r--r--find.go203
-rw-r--r--size.go203
-rw-r--r--structs.go1
-rw-r--r--window.go15
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
}
}