DroppySettingsLayoutMetrics

Shared layout metrics for settings rows and cards.

enum DroppySettingsLayoutMetrics

Every number here is measured against the grouped Form System Settings is built from, and Droppy's own Settings pages are that Form now. A one-line row is 36.5pt tall, separated from the next by a 1pt line; text, separators and controls sit 10pt in from the card edge; the card itself is 20pt in from the page edge and draws no border. The legacy card and rows (a pane built before DropletSettingsPane existed) draw exactly these numbers, so a droplet compiled against an older kit renders the same page as one written the 1.9.0 way. Jordy, on such a droplet's page: "doesn't have the new native style at all? fix that 100%."

The values changed in 1.9.0 (row 38pt on a 6pt inner padding, 11pt text column paid half by a group box). A droplet that composed its own rows from these constants gets the Form's geometry for free through the resilient framework.

Type properties

cardContentInset

static let cardContentInset: CGFloat

Content inset the card adds inside its edge. Zero: the Form's card is a flat fill with no border and no inner margin, and the rows pay the whole column themselves. Was 5 while the card was a group box.

cardCornerRadius

static let cardCornerRadius: CGFloat

Corner radius of a card. Circular, not continuous: the Form's corner profile matches an 11pt circle to the half pixel at every depth and a continuous corner of any radius does not.

controlSpacing

static let controlSpacing: CGFloat

Spacing between a row's label block and its trailing control.

dividerLeadingInset

static let dividerLeadingInset: CGFloat

Horizontal inset of in-card dividers: the row text column, on both sides, like the Form's separators.

pageContentReadableMaxWidth

static let pageContentReadableMaxWidth: CGFloat

Widest a full settings page's content column grows on a wide window (DroppyKit 0.4.1).

A CEILING, not a width. Droppy resolves the actual column from the live window (base width minus sidebar, floor 380) and only reaches this cap when the user widens the window, so a pane must fill the width the host proposes (preferredContentWidth, or the proposed layout width) rather than framing itself at a flat 900. Clamp to this value only when you own the whole page (the harness case), the same rule as pageHorizontalInset.

pageHorizontalInset

static let pageHorizontalInset: CGFloat

Horizontal inset of a full settings PAGE's content column: the cards themselves, not the rows inside them.

This is the inset THE HOST applies around every settings page, droplet detail pages included (the grouped Form's own 20pt side inset). Under dropletDetail the host has already paid it, so a pane must NOT add it again: a pane that self-applies a page inset renders its cards narrower than every native page beside it. Apply it yourself only when you own the whole page, which is the harness and standalone-tool case.

Was 24 before 0.4.2, which taught exactly that double-inset: the proof-bundle pane rendered 24pt narrower per side than the built-in detail pages the same shop shows. 24 is an info-view-local inset, not a page inset; the Store preserves it rather than applying a negative counter-inset that can push narrow three-column content out of bounds. Was 16 until the host moved to the grouped Form, whose inset is 20.

pageVerticalInset

static let pageVerticalInset: CGFloat

Vertical inset of a full settings page's content column. The host's own value (the grouped Form's top inset); see pageHorizontalInset for who pays it.

pickerTileSpacing

static let pickerTileSpacing: CGFloat

Spacing between picker tiles.

rowMinHeight

static let rowMinHeight: CGFloat

Minimum content height of a one-line row; with the vertical padding on both sides it is the Form's 36.5pt row.

rowPadding

static let rowPadding: CGFloat

Horizontal inner padding of a settings row: the Form's 10pt text and control column.

rowVerticalPadding

static let rowVerticalPadding: CGFloat

Vertical inner padding of a settings row. One point less than the column: the Form's row is 36.5pt with a switch or a line of text in it and 39pt with a 21pt value pill, which is 9pt above and below a content floor of 18.5pt, not 10pt around 16.5.

sectionHeaderLeadingInset

static let sectionHeaderLeadingInset: CGFloat

Leading inset of a section header, on the row text column of the card beneath it.

sectionHeaderSpacing

static let sectionHeaderSpacing: CGFloat

Vertical gap between a section header and the card under it: the Form's, measured from the header's line box to the card's top edge.

sectionSpacing

static let sectionSpacing: CGFloat

Vertical gap between two cards in one pane, and between a card and the next section's header: what the Form leaves between sections.

stackedRowSpacing

static let stackedRowSpacing: CGFloat

Vertical spacing between a stacked row's title and its content.