62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
package layout
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
)
|
|
|
|
// Declare conformity with Layout interface
|
|
var _ fyne.Layout = (*CustomPaddedLayout)(nil)
|
|
|
|
// CustomPaddedLayout is a layout similar to PaddedLayout, but uses
|
|
// custom values for padding on each side, rather than the theme padding value.
|
|
//
|
|
// Since: 2.5
|
|
type CustomPaddedLayout struct {
|
|
TopPadding float32
|
|
BottomPadding float32
|
|
LeftPadding float32
|
|
RightPadding float32
|
|
}
|
|
|
|
// NewCustomPaddedLayout creates a new CustomPaddedLayout instance
|
|
// with the specified paddings.
|
|
//
|
|
// Since: 2.5
|
|
func NewCustomPaddedLayout(padTop, padBottom, padLeft, padRight float32) fyne.Layout {
|
|
return CustomPaddedLayout{
|
|
TopPadding: padTop,
|
|
BottomPadding: padBottom,
|
|
LeftPadding: padLeft,
|
|
RightPadding: padRight,
|
|
}
|
|
}
|
|
|
|
// Layout is called to pack all child objects into a specified size.
|
|
// For CustomPaddedLayout this sets all children to the full size passed minus the given paddings all around.
|
|
func (c CustomPaddedLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) {
|
|
pos := fyne.NewPos(c.LeftPadding, c.TopPadding)
|
|
siz := fyne.Size{
|
|
Width: size.Width - c.LeftPadding - c.RightPadding,
|
|
Height: size.Height - c.TopPadding - c.BottomPadding,
|
|
}
|
|
for _, child := range objects {
|
|
child.Resize(siz)
|
|
child.Move(pos)
|
|
}
|
|
}
|
|
|
|
// MinSize finds the smallest size that satisfies all the child objects.
|
|
// For CustomPaddedLayout this is determined simply as the MinSize of the largest child plus the given paddings all around.
|
|
func (c CustomPaddedLayout) MinSize(objects []fyne.CanvasObject) (min fyne.Size) {
|
|
for _, child := range objects {
|
|
if !child.Visible() {
|
|
continue
|
|
}
|
|
|
|
min = min.Max(child.MinSize())
|
|
}
|
|
min.Width += c.LeftPadding + c.RightPadding
|
|
min.Height += c.TopPadding + c.BottomPadding
|
|
return
|
|
}
|