TASK 20 step 1: global hotkeys F1-F9 (scenes, stream, mutes, TRAX)
This commit is contained in:
@@ -165,7 +165,7 @@ The AI hallucinated through multiple commits tonight on background/scene propert
|
||||
- TASK 22: Audio sync offset — lip-sync correction for USB mics/capture cards
|
||||
- These were identified through competitive analysis and are table-stakes for any streaming software in 2025-2026. Full details in `TASKS.md`.
|
||||
|
||||
### Control Surface UX (TASK 19/23 merged — active)
|
||||
### Control Surface UX (TASK 19/23 — shipped 2026-08-24, verified by code survey)
|
||||
|
||||
The app is a **director's control surface**, not an editor. This replaces the OBS-style scene list with a TV-control-room metaphor.
|
||||
|
||||
@@ -185,6 +185,13 @@ The app is a **director's control surface**, not an editor. This replaces the OB
|
||||
|
||||
**Thumbnails:** `Scene.Snapshot` property. `RefreshSnapshotsAsync` fills minis from each scene's background art (`LoadBackgroundImage`); **minis never render live captures** — while the Live screen is staged its mini shows the green placeholder, unstaged it shows `live-background.jpg` (real-time surface = center monitor only; user decision 2026-08-23).
|
||||
|
||||
### Global hotkeys (TASK 20 — step 1 shipped 2026-08-24)
|
||||
|
||||
- `Services/GlobalHotkeys.cs`: `HotkeyId` enum (9 actions), `IHotkeyRegistrar` seam, `Win32HotkeyRegistrar` (`RegisterHotKey`, no modifiers), `GlobalHotkeyManager`. Fixed defaults: F1-F5 canonical scenes, F6 start/end stream, F7 mic mute, F8 desktop-audio mute, F9 TRAX play/pause.
|
||||
- `MainWindow.OnSourceInitialized` creates the manager and forwards `Activated` → `MainViewModel.HandleHotkey`; window `Closed` detaches (unregister all).
|
||||
- `MainViewModel.HandleHotkey` maps ids to `TransitionToScene`/start-end commands (honoring `CanExecute`)/mute toggles/`TraxLeftClick`.
|
||||
- Tests: `RegistrarOverride` static seam mirrors `LayoutPathOverride`. **Landmine:** forcing a WPF window's handle with `WindowInteropHelper.Handle` does NOT raise `SourceInitialized` and returns Zero pre-show — use `EnsureHandle()` in tests; it both creates the HWND and fires the event.
|
||||
|
||||
### Screen backdrop capture (TASK 3 ship task #1) — model reworked by TASK 25
|
||||
|
||||
**The Background is a locked per-screen layer (TASK 25): exactly one per canonical
|
||||
|
||||
Reference in New Issue
Block a user