package ui import ( "opslag.de/schobers/geom" ) type ContainerBase struct { ControlBase Children []Control } func BuildContainerBase(controls ...Control) ContainerBase { return ContainerBase{ Children: controls, } } func (c *ContainerBase) AddChild(child ...Control) { c.Children = append(c.Children, child...) for _, child := range child { child.SetSelf(child) } } func (c *ContainerBase) Arrange(ctx Context, bounds geom.RectangleF32, offset geom.PointF32, parent Control) { for _, child := range c.Children { child.Arrange(ctx, bounds, offset, c) } c.ControlBase.Arrange(ctx, bounds, offset, parent) } func (c *ContainerBase) BoundsUnclipped(ctx Context, path ControlPath) geom.RectangleF32 { if len(path) == 0 { return c.bounds } next := path[0] for _, child := range c.Children { if child == next { return child.BoundsUnclipped(ctx, path[1:]) } } panic("child not found in path") } func (c *ContainerBase) DesiredSize(ctx Context, size geom.PointF32) geom.PointF32 { var max geom.PointF32 for _, child := range c.Children { s := child.DesiredSize(ctx, size) max = geom.MaxPtF32(max, s) } return max } func (c *ContainerBase) Handle(ctx Context, e Event) bool { if c.ControlBase.Handle(ctx, e) { return true } for _, child := range c.Children { if child.Handle(ctx, e) { return true } } return false } func (c *ContainerBase) Render(ctx Context) { c.RenderBackground(ctx) for _, child := range c.Children { child.Render(ctx) } }