feat(topbar): the output stage — Output [YouTube] [Local MP4] One output at a time
Unit B (creator ruling 2026-11-12). Pressing Record / Go Live now changes the bar: the REC/ON-AIR pill pair becomes two labelled switches with glyphs (the YouTube mark, the record dot), under an "Output" label and beside "One output at a time". Build world shows nothing but its own segment. Two things this exposed that were not cosmetic: - **Local MP4 was not actually the default.** Both pills started unarmed, so the stage opened with no output selected; the old screen got away with it because the primary button inferred "record" from "nothing armed". RecordPillOn now starts true, which is what "pos = ON (default)" means in code. - **The stage gates the whole idle cluster, not just the switch.** Gating only the switch left the start button visible in the Build world — a Start with no output chosen. ShowOutputStage (output world, idle, not recording) wraps the cluster, so a running session hides the stage too: its output cannot change. Exclusivity stays in the view model (arming one drops the other); the XAML merely reflects it. TopBarWorldTests pins the stage's visibility and the radio pair starting at Local MP4. 680 pass, 0 warnings. Next: unit C (output-dependent primary action, End labels). Scope justification: Assets/starting-background.jpg is outside this unit — the creator's replacement art, still awaiting their visual check.
This commit is contained in:
@@ -151,8 +151,13 @@ Placement math itself is covered by `WindowPlacementTests` (pure function, no HW
|
||||
leads the centre cluster and stays present in every state; clicking the highlighted half re-enters it,
|
||||
which is how a creator gets back to the layers during a session. `WorldSegmentButton`
|
||||
(`Themes/Controls.xaml`) is a Button, not a ToggleButton — the highlight follows the view model, and a
|
||||
click must never be what sets it. Next in the same redesign: the output switch (`Output [YouTube]
|
||||
[Local MP4] One output at a time`, MP4 default) and an output-dependent primary action.
|
||||
click must never be what sets it.
|
||||
- **The output stage** (`ShowOutputStage`) is the idle cluster and lives only in the Record / Go Live
|
||||
world while nothing runs: `Output [▶ YouTube] [● Local MP4] One output at a time`, each switch carrying
|
||||
its glyph, with **Local MP4 armed at launch** (`RecordPillOn` starts true — it did not before). The two
|
||||
are one axis and the view model already drops one when the other arms, so exclusivity is policy, not
|
||||
layout. A running session hides the stage (its output cannot change) and the reality line plus the
|
||||
stop action take the cluster's place. Next in the same redesign: the output-dependent primary action.
|
||||
- **Editing during a session is a setting (creator ruling 2026-11-12).** `App.LockEditWhileLive` is off
|
||||
by default: a show does not take EDIT away, so a creator may move a layer or resize a webcam while
|
||||
live. On restores the old gun-safety — go-live flips EDIT off, stop flips it back, and only because
|
||||
|
||||
Reference in New Issue
Block a user