Skip to content

feat: put every section heading on the same rung - #659

Merged
TheSevenPens merged 6 commits into
masterfrom
feat/daemon-section-headings
Sep 3, 2026
Merged

feat: put every section heading on the same rung#659
TheSevenPens merged 6 commits into
masterfrom
feat/daemon-section-headings

Conversation

@TheSevenPens

Copy link
Copy Markdown
Owner

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 SectionLabel captions become Display.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 daemon in lowercase display type, so an uppercase caption under it was a second, louder voice for a quieter thing. OTD UX follows the tab menu's own json and becomes otd ux.

2 · The rest of the app

The remaining 39 SectionLabel uses were doing three different jobs, so they were split rather than converted wholesale. 31 became headings:

  • 8 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.
  • 10 plain SectionLabels that were headings despite the class — conflicting drivers detected, installed plugins, pen input, and so on.
  • Section.Title, which templated to a SectionLabel through an uppercase converter. Retemplating it moved 13 more titles at once and means every future Title= gets this for free. Swapped to the LowerCaseConverter that 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 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 call sites no longer each supply one; About and Daemon pass an explicit 0 and 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 & backdroptheme alone would have collided with the Theme field 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 StackPanel purely 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

  • Verified rendering on pen/basics, all five Settings tabs, three Advanced tabs, and tablet/calibration.
  • Not seen rendering, all conditional and inactive on this machine: vmulti driver, kuuube's windows ink plugin, Custom look (Custom theme only), the Linux-only desktop-entry title, and Daemon's external daemon / system-installed daemon.
  • Docs unaffected: every reference is to the Appearance tab, which keeps its name.
  • 673/673.

TheSevenPens and others added 6 commits September 2, 2026 12:33
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>
@TheSevenPens
TheSevenPens merged commit 32c5cda into master Sep 3, 2026
3 checks passed
@TheSevenPens
TheSevenPens deleted the feat/daemon-section-headings branch September 3, 2026 06:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant