Layers panel and scene strip: scene layers header with icons, per-type layer icons, PROGRAM badge and selected/live orange borders, scene name and hotkey overlays, Starting as default scene

- LeftPanel: SCENE LAYERS header with layer count; per-type blue icons; properties header gear; layers list min/max height; properties placeholder; list and properties indent
- SceneThumbnailStrip: names/hotkeys over the tile; PROGRAM badge with blinking red dot on the selected tile; orange border on selected and live tiles; fixed the element border override that hid the style border; reflag tiles on load
- LiveScene is now set on go-live, record start, and live transitions (it was never assigned, so IsLive never fired)
- Startup stages the scene named Starting
- DESIGN.md: color roles (red = YouTube/on-air/record, orange #ff8c3a = attention, amber = game audio/Super Chat)
- Staged live tile uses background art instead of the green LIVE placeholder

Not pushed.
This commit is contained in:
2026-10-26 14:00:23 -07:00
parent 24aca7d04a
commit 3239808a73
12 changed files with 146 additions and 45 deletions
+5
View File
@@ -45,6 +45,7 @@ public partial class MainViewModel
OnPropertyChanged(nameof(ShowEmptySceneHint));
OnPropertyChanged(nameof(ShowPreviewPlaceholder));
OnPropertyChanged(nameof(ShowSourcesEmptyHint));
OnPropertyChanged(nameof(LayerCount));
OnPropertyChanged(nameof(CanChangeBackground));
OnPropertyChanged(nameof(CanAddWebcam));
OnPropertyChanged(nameof(CanAddYouTubeChat));
@@ -102,7 +103,10 @@ public partial class MainViewModel
if (scene.IsHidden || scene == StagedScene) return;
StagedScene = scene;
if (IsLive)
{
LiveScene = scene;
_transition.Start(SelectedTransitionType, TransitionDurationMs, null);
}
}
/// <summary>
@@ -186,6 +190,7 @@ public partial class MainViewModel
}
public bool ShowEmptySceneHint => StagedScene != null && StagedScene.Elements.Count == 0;
public int LayerCount => StagedScene?.Elements.Count(e => !e.IsZoomLayer) ?? 0;
public bool ShowSourcesEmptyHint => StagedScene == null || StagedScene.Elements.Count == 0;
public bool IsCountdownAvailable => StagedScene != null