feat(topbar): one decision — [ Build Scenes ][ Record / Go Live ]
Unit A of the top-bar redesign (creator ruling 2026-11-12). The standalone EDIT toggle is gone; Build Scenes IS edit mode, so "which world am I in?" and "can I edit?" cannot disagree any more. BarWorld (ViewModels/MainViewModel.TopBar.cs) has two values, Build and Output. Build ships highlighted at launch and sets EditingActive on; choosing Record / Go Live turns it off. Clicking the already-highlighted half is deliberately not a no-op: it re-enters that world, which is the only way back to the layers during a session now that the EDIT button is gone (unit 1 made that legal). WorldSegmentButton (Themes/Controls.xaml) is a Button, not a ToggleButton, and each half passes its own flag through Tag to one shared DataTrigger — a ToggleButton would fight the view model and, with a one-way IsChecked, clear its own binding on first click. UiShellTests updated where it guarded the old EDIT markup (it now guards the segment). TopBarWorldTests pins launch state, both transitions, and the re-enter case. 679 pass, 0 warnings. Next: unit B (output switch), unit C (output-dependent 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:
@@ -145,6 +145,14 @@ Placement math itself is covered by `WindowPlacementTests` (pure function, no HW
|
||||
`FormattedText` — **measure, don't guess**) plus the field's padding and border. Guard:
|
||||
`ytLive.Tests/GeometryFieldWidthTests.cs`
|
||||
- Resolution tiers: 1080p60@12 (default) → 1080p30@10 → 720p60@6 → 720p30@6 → **Vertical 1080p30@10 and 1080p60@12 (9:16, 1080×1920)** — the `@` is the CBR target the encoder is asked to hold, between YouTube's H.264 recommendation and the practitioner sweet spot (its 14/17/8 recommendations are the max, the tier minimums 5/6/3 the step-down floor). Vertical mirrors its landscape pair: same pixel count, same rate. The old flat 8 Mbps was an inherited round number, not a measurement. The composition master frame is **always 1920×1080** — a tier is an output rect + target resolution over that master, so source geometry is never rewritten (no rounding drift). 16:9 tiers use the full frame; vertical tiers use a centered **607×1080** window and the preview dims the cropped side strips at 55% black with an accent outline (semi-crop — the cut area stays visible). A resolution badge in the preview corner shows the active tier. The resolution picker and live readouts (bitrate/FPS/dropped/duration) are in the top-left cell above the layers panel; the bottom bar is an empty height-preserving spacer. Under the picker sits the creator's own **rate box** (Mbps, per tier, persisted as `Video.Rate.<tier>`): the tier chooses geometry, the box chooses bits, clamped at the tier's YouTube minimum and otherwise unbounded because live step-down is the thing that catches a wrong guess. Its tooltip carries YouTube's recommendation for the tier (`Models/RateLadder`). Every consumer — encoder options, step-down policy, clip buffer — reads `MainViewModel.EffectiveQuality`, never the raw tier. A **tooltip** explains finding upload bandwidth — an in-app speed test was deliberately dropped (unreliable). The future encoder crops the master to the rect and scales to the tier's Width×Height
|
||||
- **The top bar has ONE decision (creator ruling 2026-11-12): `[ Build Scenes ][ Record / Go Live ]`.**
|
||||
Build Scenes ships highlighted and **is** edit mode — the standalone EDIT toggle is gone, so "which
|
||||
world am I in?" and "can I edit?" cannot disagree (`MainViewModel.TopBar.cs`, `BarWorld`). The segment
|
||||
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.
|
||||
- **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