package system import "image" type boxQuerier []anyBox func (querier boxQuerier) Len () int { return len(querier) } func (querier boxQuerier) MinimumSize (index int) image.Point { if box, ok := querier.box(index); ok { return box.minimumSize() } return image.Point { } } func (querier boxQuerier) RecommendedWidth (index int, height int) int { if box, ok := querier.box(index); ok { if box, ok := box.(anyContentBox); ok { return box.recommendedWidth(height) } return box.minimumSize().X } return 0 } func (querier boxQuerier) RecommendedHeight (index int, width int) int { if box, ok := querier.box(index); ok { if box, ok := box.(anyContentBox); ok { return box.recommendedHeight(width) } return box.minimumSize().Y } return 0 } func (querier boxQuerier) box (index int) (anyBox, bool) { if index < 0 || index >= len(querier) { return nil, false } return querier[index], true } type boxArranger []anyBox func (arranger boxArranger) Len () int { return boxQuerier(arranger).Len() } func (arranger boxArranger) MinimumSize (index int) image.Point { return boxQuerier(arranger).MinimumSize(index) } func (arranger boxArranger) RecommendedWidth (index int, height int) int { return boxQuerier(arranger).RecommendedWidth(index, height) } func (arranger boxArranger) RecommendedHeight (index int, width int) int { return boxQuerier(arranger).RecommendedHeight(index, width) } func (arranger boxArranger) SetBounds (index int, bounds image.Rectangle) { if box, ok := boxQuerier(arranger).box(index); ok { box.setBounds(bounds) } }