import (
"fmt"
+ "log"
"strings"
)
if i < 0 || i >= len(n.children)-1 {
return false
}
- v1, v2 := n.children[i].GetView(), n.children[i+1].GetView()
- toth := v1.H + v2.H
+ c1, c2 := n.children[i], n.children[i+1]
+ toth := c1.H + c2.H
if size >= toth {
return false
}
- v1.H, v2.H = size, toth-size
- v2.Y = size
- n.children[i].SetView(v1)
- n.children[i+1].SetView(v2)
+ c2.Y = size
+ c1.Resize(c1.W, size)
+ c2.Resize(c2.W, toth-size)
return true
}
func (n *Node) hResizeSplit(i int, size int) bool {
if i < 0 || i >= len(n.children)-1 {
return false
}
- v1, v2 := n.children[i].GetView(), n.children[i+1].GetView()
- totw := v1.W + v2.W
+ c1, c2 := n.children[i], n.children[i+1]
+ totw := c1.W + c2.W
if size >= totw {
return false
}
- v1.W, v2.W = size, totw-size
- v2.X = size
- n.children[i].SetView(v1)
- n.children[i+1].SetView(v2)
+ c2.X = size
+ c1.Resize(size, c1.H)
+ c2.Resize(totw-size, c2.H)
return true
}
}
n.children = append(n.children, hn1, hn2)
+ n.alignSize()
return newid
} else {
numr := 0
numnr := 0
nonrh := 0
for _, c := range n.children {
- view := c.GetView()
if !c.CanResize() {
- nonrh += view.H
+ nonrh += c.H
numnr++
} else {
numr++
copy(n.children[inspos+1:], n.children[inspos:])
n.children[inspos] = hn
- y := 0
+ y := n.Y
for _, c := range n.children {
- view := c.GetView()
+ c.Y = y
if c.CanResize() {
- view.H = height
- view.Y = y
- } else {
- view.Y = y
+ c.Resize(c.W, height)
}
- y += view.H
- c.SetView(view)
+ y += c.H
}
+ n.alignSize()
return newid
}
}
}
n.children = append(n.children, vn1, vn2)
+ n.alignSize()
return newid
} else {
numr := 0
numnr := 0
nonrw := 0
for _, c := range n.children {
- view := c.GetView()
if !c.CanResize() {
- nonrw += view.W
+ nonrw += c.W
numnr++
} else {
numr++
copy(n.children[inspos+1:], n.children[inspos:])
n.children[inspos] = vn
- x := 0
+ x := n.X
for _, c := range n.children {
- view := c.GetView()
+ c.X = x
if c.CanResize() {
- view.W = width
- view.X = x
- } else {
- view.X = x
+ c.Resize(width, c.H)
}
- x += view.W
- c.SetView(view)
+ x += c.W
}
+ n.alignSize()
return newid
}
}
y += cH
}
}
+ n.alignSize()
n.W, n.H = w, h
}
+func (n *Node) alignSize() {
+ if len(n.children) == 0 {
+ return
+ }
+
+ totw, toth := 0, 0
+ for _, c := range n.children {
+ if n.kind == STHoriz {
+ totw += c.W
+ } else {
+ toth += c.H
+ }
+ }
+ if n.kind == STVert && toth != n.H {
+ last := n.children[len(n.children)-1]
+ last.Resize(last.W, last.H+n.H-toth)
+ log.Println("bad height")
+ } else if n.kind == STHoriz && totw != n.W {
+ last := n.children[len(n.children)-1]
+ last.Resize(last.W+n.W-totw, last.H)
+ log.Println("bad width")
+ }
+}
+
func (n *Node) Unsplit() {
}