diff options
Diffstat (limited to 'grid.go')
| -rw-r--r-- | grid.go | 29 |
1 files changed, 17 insertions, 12 deletions
@@ -42,23 +42,28 @@ func (n *Node) NewGrid(name string, w int, h int) *Node { } // true if the grid already have a child at W,H -func (n *Node) gridCollision(w int, h int) bool { +func (n *Node) gridCollision() bool { for _, child := range n.children { - if ((child.AtW == w) && (child.AtH == h)) { + if ((child.AtW == n.NextW) && (child.AtH == n.NextH)) { return true } } return false } -// increments NextW & NextH -func (n *Node) gridIncrement(w int, h int) bool { - for _, child := range n.children { - if ((child.AtW == w) && (child.AtH == h)) { - return true - } +// keeps incrementing NextW & NextH until there is not a widget +func (n *Node) gridIncrement() { + if ! n.gridCollision() { + return } - return false + + n.NextH += 1 + if (n.NextH > n.Y) { + n.NextW += 1 + n.NextH = 1 + } + + n.gridIncrement() } func (n *Node) At(w int, h int) *Node { @@ -69,9 +74,9 @@ func (n *Node) At(w int, h int) *Node { n.NextW = w n.NextH = h - // TODO: check for a collision here - if n.gridCollision(w,h) { - // TODO: find free next w,h + n.gridIncrement() + if (n.NextW != w) || (n.NextH != h) { + log(logError, "At() (W,H)", w, h, " was moved to avoid a collision (W,H) =", n.NextW, n.NextH) } return n } |
