diff --git a/ui/dr-ui/ui/identity.slint b/ui/dr-ui/ui/identity.slint index 4ca96bc..3bbbb60 100644 --- a/ui/dr-ui/ui/identity.slint +++ b/ui/dr-ui/ui/identity.slint @@ -403,9 +403,17 @@ export component IdentityScreen inherits Rectangle { // is the fault library.slint's filter bar documents at length. The // faces grid is a sibling of this row, so it would have been laid // out against a width that was never on the screen. + // + // **Neither row states a height.** The first version of this pinned + // them to 32px and 36px, which are smaller than what they contain: + // a `Field` is `Theme.touch-target` (44px) tall and a `Button` is + // `Theme.control-height`. Slint honours the child's own height and + // lets it overflow the box it was given, so the name field ran 12px + // past its row and straight through the buttons 6px below it. Rows + // take the height of what is in them; the strip takes the height of + // a control. HorizontalLayout { spacing: Theme.gap-sm; - height: 32px; // Naming a cluster *is* the primary action of this screen, so // the name is an editable field on sight rather than something @@ -444,7 +452,10 @@ export component IdentityScreen inherits Rectangle { // merely absent. Same device as the library's filter chips, for // the same reason. Flickable { - height: 36px; + // A control's height, not a guess, and not read back from the + // row inside — `actions` sizes itself from `viewport-height`, + // so measuring it here would be a binding loop. + height: Theme.control-height; viewport-height: self.height; viewport-width: max(self.width, actions.preferred-width);