66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|