a live text-scale change doesn't reach controls built once nf-umo1 ← Beads

open priority 2 task unassigned

Twinned from https://github.com/cfsh/ninefold/issues/454 by tools/beads/import_github.py's reconcile pass.

Found while raising the ceiling to 200% (#440). Pre-existing, and it affects every step of the range — 1.2 → 1.3 has the same defect — but the bigger the jump, the more obvious it gets.

What happens

TonapseStyle.Fs() and (as of #440) TonapseStyle.Sc() are evaluated at construction. Sections that rebuild on EditorState.Changed re-create their children and so pick up a new scale; controls built once in _Ready/BuildUi keep the size they were born with until the scene is reloaded.

Changing the scale from the options menu therefore leaves the page in a mixed state: rebuilt things grow, once-built things do not. Where a rebuilt *label* sits inside a once-built *box*, the text now overflows — e.g. ▶ play pattern renders as play patterr⊙.

Evidence

Both at 200%, same build:

So 200% itself is fine — this is purely about applying a change *live*.

Why it was not fixed in #440

It is separable and pre-existing, and fixing it properly means giving the once-built controls a way to be re-scaled rather than patching call sites. Sketch:

```csharp // remember the authored px so a later scale change can re-apply it public static void ScaledFont(Control c, int px) { c.SetMeta("fs_px", px); c.AddThemeFontSizeOverride("font_size", Fs(px)); } public static void RescaleFonts(Node root) { /* walk, re-apply from meta */ } ```

with the same treatment for CustomMinimumSize, and CycleTextScale calling RescaleFonts on the scene root. Roughly 40 call sites, mechanical.

Cheaper alternative worth considering first: have the options row say the change applies on reload, and reload the editor scene after saving the working song. Less code, no meta bookkeeping — but it interrupts, which is the opposite of what an on-device size-finding session wants.

Filed unclaimed.

Dependencies

None.

Comments

No comments.

Add a comment