diff --git a/HANDOFF.md b/HANDOFF.md index c1d775d..8c1683b 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,7 +1,7 @@ # HANDOFF — Session State ## Branch -`main` — clean at `4b9a8e5` (Control Surface UX: pill toggle, background rename, per-scene properties). +`main` — clean, 0 warnings. ## What shipped this session @@ -13,21 +13,31 @@ 6. **Sliding pill toggle** — green ON (#22c55e) / red OFF (#ef4444), replaces checkbox 7. **Backdrop → Background** — full C# rename, SQL column rename with migration, asset files renamed, `Source.IsBackground` `new` → `override` fix, legacy "Backdrop" display name migration 8. **Geometry mismatch error** — red text when custom background aspect ratio >5% off 16:9 -9. **Per-scene background properties** — pill toggle + custom path persist per-scene via Settings table +9. **Per-scene background properties** — `UseDefaultBackground` + `CustomBackgroundPath` on `SceneElement` (superclass), persisted per-source via `BackgroundPath_{sourceId}` / `BackgroundUseDefault_{sourceId}` in Settings table +10. **All five scenes have backgrounds** — `SceneCatalog.HasBackground` returns `true` for all canonical scenes. `EnforceBackgroundPolicy` no longer strips backgrounds from non-Live scenes. +11. **Pill toggle label** — "Use default background:" TextBlock before toggle +12. **Pill toggle wiring** — `SelectedElement.PropertyChanged` subscription triggers `UpdateBackgroundImage` + `RefreshSnapshotsAsync` + `ScheduleSave` on `UseDefaultBackground` change -## Background properties (fully shipped) -- `Scene.UseDefaultBackground` (bool, default true) + `Scene.CustomBackgroundPath` (string?) -- Persisted as `BackgroundUseDefault_{sceneId}` / `BackgroundPath_{sceneId}` in Settings table -- Pill toggle ON → loads default asset from DB; OFF → loads custom file path -- Custom path preserved when toggled back ON (not cleared) -- Geometry mismatch: aspect ratio check ±5% of 16:9, shows expected 1920×1080 +## Background layer rules +- Every scene has a Background layer at position 0 — undeletable (trash icon hidden, context menu "Remove Layer" hidden, `RemoveElement` returns early) +- `IsBackground` is derived from `SourceType.Background` via `Source.Type` setter — impossible to forget +- All five scenes have default images stored in Asset BLOBs in SQLite +- First run: pill ON for all five, shipped defaults load +- Toggle OFF → browse for custom file, FQFN stored +- On reload: try to load custom file; if missing, fall back to default asset +- `EnsureDefaultBackground` re-seeds missing backgrounds on scene switch (covers Starting, BRB, Chat, Ending; Live covered by seed methods) + +## Current state +- **0 warnings, 0 errors** +- **210/211 tests pass** (1 pre-existing AudioPipeline gain-math failure) +- Deleted backgrounds re-seed automatically via `EnsureDefaultBackground` ## Build ```bash taskkill.exe /F /IM ytLive.exe # if running "/mnt/c/Program Files/dotnet/dotnet.exe" build "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.csproj" +"/mnt/c/Program Files/dotnet/dotnet.exe" vstest "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.Tests\bin\Debug\net8.0-windows10.0.19041.0\ytLive.Tests.dll" ``` -**0 warnings, 0 errors.** ## Polar.sh resources | Resource | ID | @@ -42,7 +52,7 @@ taskkill.exe /F /IM ytLive.exe # if running | Key prefix | `LCYT-` | ## Next steps -1. **Visual testing** — run on Windows display, verify pill toggle, background properties per-scene +1. **Visual testing** — run on Windows display, verify backgrounds show for all 5 scenes 2. **Thumbnail drag-reorder** — reorder scenes via drag on thumbnail strip 3. **Real snapshot generation** — replace placeholder colors with compositor-rendered thumbnails 4. **Transition dropdown UI** — add XAML control to pick transition type + duration diff --git a/MainWindow.xaml b/MainWindow.xaml index 5b4d2f8..d6909d7 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -608,26 +608,31 @@ - - - - - - - - -