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.
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⊙.
Both at 200%, same build:
☰ menu and 🎛 change keys instrument stay small; ▶ play pattern clips.TextScaleDefault = 2.0f, restart): everything scales correctly, nothing clips.So 200% itself is fine — this is purely about applying a change *live*.
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.
None.
No comments.