40 lines
1.3 KiB
Go
40 lines
1.3 KiB
Go
|
package objects
|
||
|
|
||
|
import "git.tebibyte.media/tomo/tomo"
|
||
|
import "git.tebibyte.media/tomo/tomo/theme"
|
||
|
|
||
|
// Container is an object that can contain other objects. It can be used as a
|
||
|
// primitive for building more complex layouts. It has two variants: an outer
|
||
|
// container, and an inner container. The outer container has padding around
|
||
|
// its edges, whereas the inner container does not. The container will have a
|
||
|
// corresponding object role variation of either "outer" or "inner".
|
||
|
type Container struct {
|
||
|
tomo.ContainerBox
|
||
|
}
|
||
|
|
||
|
func newContainer (layout tomo.Layout, children ...tomo.Object) *Container {
|
||
|
this := &Container {
|
||
|
ContainerBox: tomo.NewContainerBox(),
|
||
|
}
|
||
|
this.SetLayout(layout)
|
||
|
for _, child := range children {
|
||
|
this.Add(child)
|
||
|
}
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
// NewOuterContainer creates a new container that has padding around it.
|
||
|
func NewOuterContainer (layout tomo.Layout, children ...tomo.Object) *Container {
|
||
|
this := newContainer(layout, children...)
|
||
|
theme.Apply(this, theme.R("objects", "Container", "outer"))
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
// NewInnerContainer creates a new container that has no padding around it.
|
||
|
func NewInnerContainer (layout tomo.Layout, children ...tomo.Object) *Container {
|
||
|
this := newContainer(layout, children...)
|
||
|
theme.Apply(this, theme.R("objects", "Container", "inner"))
|
||
|
return this
|
||
|
}
|
||
|
|