78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
|
package elements
|
||
|
|
||
|
import "git.tebibyte.media/sashakoshka/tomo"
|
||
|
|
||
|
type scratchEntry struct {
|
||
|
expand bool
|
||
|
minSize float64
|
||
|
minBreadth float64
|
||
|
}
|
||
|
|
||
|
type container struct {
|
||
|
entity tomo.ContainerEntity
|
||
|
scratch map[tomo.Element] scratchEntry
|
||
|
minimumSize func ()
|
||
|
}
|
||
|
|
||
|
func (container *container) Entity () tomo.Entity {
|
||
|
return container.entity
|
||
|
}
|
||
|
|
||
|
func (container *container) Adopt (children ...tomo.Element) {
|
||
|
container.adopt(false, children...)
|
||
|
}
|
||
|
|
||
|
func (container *container) init () {
|
||
|
container.scratch = make(map[tomo.Element] scratchEntry)
|
||
|
}
|
||
|
|
||
|
func (container *container) adopt (expand bool, children ...tomo.Element) {
|
||
|
for _, child := range children {
|
||
|
container.entity.Adopt(child)
|
||
|
container.scratch[child] = scratchEntry { expand: expand }
|
||
|
}
|
||
|
container.minimumSize()
|
||
|
container.entity.Invalidate()
|
||
|
container.entity.InvalidateLayout()
|
||
|
}
|
||
|
|
||
|
func (container *container) Disown (children ...tomo.Element) {
|
||
|
for _, child := range children {
|
||
|
index := container.entity.IndexOf(child)
|
||
|
if index < 0 { continue }
|
||
|
container.entity.Disown(index)
|
||
|
delete(container.scratch, child)
|
||
|
}
|
||
|
container.minimumSize()
|
||
|
container.entity.Invalidate()
|
||
|
container.entity.InvalidateLayout()
|
||
|
}
|
||
|
|
||
|
func (container *container) DisownAll () {
|
||
|
func () {
|
||
|
for index := 0; index < container.entity.CountChildren(); index ++ {
|
||
|
index := index
|
||
|
defer container.entity.Disown(index)
|
||
|
}
|
||
|
} ()
|
||
|
container.scratch = make(map[tomo.Element] scratchEntry)
|
||
|
container.minimumSize()
|
||
|
container.entity.Invalidate()
|
||
|
container.entity.InvalidateLayout()
|
||
|
}
|
||
|
|
||
|
func (container *container) Child (index int) tomo.Element {
|
||
|
if index < 0 || index >= container.entity.CountChildren() { return nil }
|
||
|
return container.entity.Child(index)
|
||
|
}
|
||
|
|
||
|
func (container *container) CountChildren () int {
|
||
|
return container.entity.CountChildren()
|
||
|
}
|
||
|
|
||
|
func (container *container) HandleChildMinimumSizeChange (child tomo.Element) {
|
||
|
container.minimumSize()
|
||
|
container.entity.Invalidate()
|
||
|
container.entity.InvalidateLayout()
|
||
|
}
|