46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package layout
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/theme"
|
|
)
|
|
|
|
// Declare conformity with Layout interface
|
|
var _ fyne.Layout = (*paddedLayout)(nil)
|
|
|
|
type paddedLayout struct {
|
|
}
|
|
|
|
// Layout is called to pack all child objects into a specified size.
|
|
// For PaddedLayout this sets all children to the full size passed minus padding all around.
|
|
func (l *paddedLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) {
|
|
padding := theme.Padding()
|
|
pos := fyne.NewPos(padding, padding)
|
|
siz := fyne.NewSize(size.Width-2*padding, size.Height-2*padding)
|
|
for _, child := range objects {
|
|
child.Resize(siz)
|
|
child.Move(pos)
|
|
}
|
|
}
|
|
|
|
// MinSize finds the smallest size that satisfies all the child objects.
|
|
// For PaddedLayout this is determined simply as the MinSize of the largest child plus padding all around.
|
|
func (l *paddedLayout) MinSize(objects []fyne.CanvasObject) (min fyne.Size) {
|
|
for _, child := range objects {
|
|
if !child.Visible() {
|
|
continue
|
|
}
|
|
|
|
min = min.Max(child.MinSize())
|
|
}
|
|
min = min.Add(fyne.NewSquareSize(2 * theme.Padding()))
|
|
return
|
|
}
|
|
|
|
// NewPaddedLayout creates a new PaddedLayout instance
|
|
//
|
|
// Since: 1.4
|
|
func NewPaddedLayout() fyne.Layout {
|
|
return &paddedLayout{}
|
|
}
|