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.