layout/grid.go
Functions
func AutoTrack
func AutoTrack() GridTrack {
return GridTrack{Sizing: GridTrackAuto}
}
func Compute
Compute performs grid layout on the tree starting at root.
func (g *GridLayout) Compute(tree LayoutTree, root NodeID, available geometry.Size) Result {
childCount := tree.ChildCount(root)
if childCount == 0 {
return Result{}
}
columns := g.getColumns()
cells, maxRow := g.buildCells(tree, root, childCount, len(columns))
rows := g.buildRows(maxRow)
columnSizes := g.calculateTrackSizes(columns, available.Width, g.ColumnGap)
rowSizes := g.initRowSizes(rows)
g.measureCells(tree, cells, rows, columnSizes, rowSizes)
g.resolveFractionalRows(rows, rowSizes, available.Height)
g.positionCells(tree, cells, columnSizes, rowSizes)
return Result{
Size: geometry.Size{
Width: g.totalSize(columnSizes, g.ColumnGap),
Height: g.totalSize(rowSizes, g.RowGap),
},
}
}
func FixedTrack
FixedTrack creates a fixed-size track.
func FixedTrack(size float32) GridTrack {
return GridTrack{Sizing: GridTrackFixed, Value: size}
}
func FractionTrack
FractionTrack creates a fractional track.
func FractionTrack(fr float32) GridTrack {
return GridTrack{Sizing: GridTrackFraction, Value: fr}
}
func Name
Name returns "grid".
func (g *GridLayout) Name() string {
return gridLayoutName
}
func SimpleGrid
SimpleGrid creates a grid layout with equal fractional columns.
func SimpleGrid(numColumns int, gap float32) *GridLayout {
columns := make([]GridTrack, numColumns)
for i := range columns {
columns[i] = FractionTrack(1)
}
return &GridLayout{
Columns: columns,
ColumnGap: gap,
RowGap: gap,
}
}
Structs
type GridTrack struct
GridTrack defines a grid row or column.
type GridTrack struct {
// Sizing specifies how the track is sized.
Sizing GridTrackSizing
// Value is the size value. Meaning depends on Sizing:
// - GridTrackAuto: ignored
// - GridTrackFixed: pixel size
// - GridTrackFraction: fraction value (like 1fr, 2fr)
Value float32
}
type GridLayout struct
GridLayout implements CSS Grid-style layout.
GridLayout arranges children in a grid of rows and columns,
with support for fixed, auto, and fractional track sizes.
type GridLayout struct {
// Columns defines the column tracks.
Columns []GridTrack
// Rows defines the row tracks.
Rows []GridTrack
// ColumnGap is the space between columns.
ColumnGap float32
// RowGap is the space between rows.
RowGap float32
}
AutoTrack creates an auto-sized track.