lattice/docs/layout.md
2026-07-10 01:43:19 -04:00

2.1 KiB

Layout

Every element carries an x/y position constraint, a width/height sizing mode, an optional alignment, and an optional offset. Layout resolves top-down each frame, with per-element caches invalidated on change or resize.

Position — Pos

Set with setPositioning(xVal, xPos, yVal, yPos) or setPositioning(xPos, yPos).

Mode Meaning
ParentPixels parent origin + padding + constraint (the default)
ParentPercent percentage across the parent's padded content area
ParentCenter centered in the parent, constraint as extra offset
ScreenPixels / ScreenPercent / ScreenCenter same, relative to the window
AfterSibling after the previous visible sibling (per axis), constraint as gap
MatchSibling same coordinate as the previous sibling

Size — Size

Set with setSizing(w, wType, h, hType).

Mode Meaning
Pixels fixed size
Percent percentage of the parent's padded content area (value via the same setter)
Auto fits children (components override this: Text measures its string, Box adds padding)
Fill stretch to the parent's far edge minus visible later siblings

Clamp Auto with setMaxAutoSize(maxWidth, maxHeight).

Alignment and offset

alignLeft()/alignRight()/alignTop()/alignBottom() (or setAlignment(x, y)) snap to the parent's padded edges after positioning; the position constraint then acts as an inset. setOffset(x, y) adds a final pixel or percent offset.

Padding and scrolling

Padding lives on Box (so on Container, Rectangle, and every widget built from them) as floatArrayOf(top, right, bottom, left). Children position inside the padded area.

Set scrollable = true on a Box to get vertical scrolling with an auto-hiding, draggable scrollbar (scrollbarWidth/Color/Radius/Padding). Content is scissored to the padded area.

Coordinate spaces

Element x/y/width/height are raw window pixels. element.raw and element.scaled expose edges/center in raw and GUI-scaled coordinates (scaled divides by the vanilla GUI scale factor).