feat: put every section heading on the same rung - #659
Merged
Conversation
Six SectionLabel captions — 10px uppercase SemiBold on 1.5 tracking, in muted ink — become Display.section, the 22px Inter Light lowercase rung the tablet About tab settled on. Same shape of page: a 40px tab menu with sections beneath it, so the same answer applies. Lowercased with the size. The tab menu above already reads "daemon" in lowercase display type; an uppercase caption under it was a second, louder voice for a quieter thing. "OTD UX" goes to "otd ux", following the tab menu's own "json". The property lists under them move 2px to 6px: 2 was judged against a 10px label, and reads cramped under a heading twice that size. Same for OTD UX's description line, which was at 4. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The About tab and Advanced/Daemon had already moved; the rest of the app was still answering the same question two other ways, so a heading meant one thing on one tab and another on the next. Three groups, all now TextBlock.Display.section: - The 8 "SectionLabel largetitle" headings. largetitle existed precisely to mark "this label is a heading, not a caption", so these were the unambiguous set: display toggle, preset switching, movement, pressing, saved presets, status, backup & restore, calibration options. The modifier has no users left and is deleted. - 10 plain SectionLabels that were section headings despite the class: configurations folder, add tablet support, current tablet, conflicting drivers detected, pen input, default for apps, installed plugins, current settings, vmulti driver, kuuube's windows ink plugin. - Section.Title, which templated to a SectionLabel through an uppercaser. Retemplating it moves 13 more titles across Settings and covers every future one — Appearance, Auto-run, Screenshots and the rest. Left alone, because they are not section headings even though they share the class: the sortable column headers in the supported-tablets and calibration-report dialogs, TABLET / ACTIVE AREA above the mapping comparison, HOVER LIMIT beside its slider, Entity's own row title, and PenSwitchCard's label in a 240px card. SectionLabel keeps its caption job for exactly these. Display.section gains Margin 0,0,0,6 so a call site no longer has to supply one. The About tab and Daemon pass an explicit 0 and let the following element own the gap, so they are unchanged. Verified on pen/basics, settings presets, hotkeys, appearance, system and developer, advanced configs, diagnostics and plugins, and tablet calibration. Not seen rendering: vmulti driver and kuuube's windows ink plugin (both conditional and inactive here), Custom look (Custom theme only), and the Linux-only desktop-entry title. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
With section headings on the display rung, Settings / Appearance read "appearance" twice down the left edge — once as the 40px tab, again as the 22px section under it. That went unnoticed while the section was an uppercase caption in a different voice; at the same size and weight as the tab it is just the word repeated. "Theme" alone would have collided with the Theme field label directly beneath it, and would have undersold the section: it also holds falling petals, the solid/CodeGen background choice and the background colour. "Theme & backdrop" names both halves, sits beside its sibling "Colors & opacity", and repeats nothing. Docs are unaffected — every reference is to the Appearance tab, which keeps its name. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
It was a column of INTERFACE, folded in there when an older Screenshot tab was retired. But INTERFACE is about how the app's own UI is SHOWN — hidden tablet tabs, forced window sizes — and capturing the UI is a different job that had outgrown sharing a column with the window-size presets. So the rail gains SCREENSHOTS between INTERFACE and GRADIENTS, and the section moves into a pane of its own. INTERFACE is simpler for it: its right column held a StackPanel purely to stack the two sections, and with one section left that wrapper goes and Window size takes Grid.Column="2" directly. The pane is now the plain two-column layout its comment always claimed. No logic moved. OnScreenshotAllPages and the ScreenshotStatus x:Name stay in the same file, so the code-behind is untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Every one of the 18 property labels carried a leading bullet. The two-column grid already reads as a list, so they were marking rows that were never in doubt — and they pushed every label off the left margin that the section headings and the body text share, so the whole pane sat slightly inset from everything around it. Removed from the label text; the propLabel style and the grid are untouched. Brings the pane in line with the tablet About tab's fact rows, which have never had them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Follows the bullets out for the same reason. The two-column grid is what separates a label from its value; the colon was punctuation standing in for a layout that already works, and with the bullets gone it was the last thing keeping these rows from matching the tablet About tab's facts, which have never had either. 18 labels: Status, Version, Path, Source, Package, Build match, Service, Connected since, Up for, Uptime. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Six commits taking one design decision — where a section heading sits in the type ramp — from a single tab to the whole app, then following its consequences.
1 · Advanced → Daemon
Six
SectionLabelcaptions becomeDisplay.section, the 22px rung the tablet About tab settled on. Same shape of page: a 40px tab menu with sections beneath it.Lowercased with the size — the tab menu above already reads
daemonin lowercase display type, so an uppercase caption under it was a second, louder voice for a quieter thing.OTD UXfollows the tab menu's ownjsonand becomesotd ux.2 · The rest of the app
The remaining 39
SectionLabeluses were doing three different jobs, so they were split rather than converted wholesale. 31 became headings:SectionLabel largetitle. That modifier existed precisely to mark "heading, not caption", so it was the app's own answer. It now has no users and is deleted.SectionLabels that were headings despite the class —conflicting drivers detected,installed plugins,pen input, and so on.Section.Title, which templated to aSectionLabelthrough an uppercase converter. Retemplating it moved 13 more titles at once and means every futureTitle=gets this for free. Swapped to theLowerCaseConverterthat already existed.8 were deliberately left alone, because they share the class without sharing the role: the sortable column headers in the supported-tablets and calibration-report dialogs,
TABLET/ACTIVE AREAabove the mapping comparison,HOVER LIMITbeside its slider,Entity's own row title, andPenSwitchCard's label in a 240px card.SectionLabelkeeps its caption job for exactly these.Display.sectiongainsMargin 0,0,0,6so call sites no longer each supply one; About and Daemon pass an explicit0and are unaffected.3 · Fallout the resize exposed
Settings → Appearance read "appearance" twice down the left edge once the section matched the tab's voice. The section is now theme & backdrop —
themealone would have collided with theThemefield label directly beneath it, and undersells a section that also holds falling petals and the background controls.Screenshots got its own Developer tab. It was a column of INTERFACE, folded there when an older Screenshot tab was retired — but INTERFACE is about how the UI is shown (hidden tabs, forced window sizes) and capturing it is a different job. INTERFACE is simpler for it: its right column held a
StackPanelpurely to stack two sections, and with one left that wrapper goes.Daemon's property lists lost their bullets and trailing colons. The two-column grid is what separates a label from its value, so both were punctuation standing in for a layout that already works — and the bullet pushed every label off the margin the headings and body text share. These rows now match the tablet About tab's facts exactly.
For the reviewer
vmulti driver,kuuube's windows ink plugin,Custom look(Custom theme only), the Linux-only desktop-entry title, and Daemon'sexternal daemon/system-installed daemon.