670fe3a10a
- Add ElementKind (Static/Dynamic) to SceneElement base; Source/WebcamSceneConfig classify - Services/SceneGraph.cs: owns the Scenes collection (ViewModel's Scenes delegates to it), the element mutation surface (Add/Insert/Remove/Move, each invalidating the bake), and the queries that were scattered LINQ (GetBackground/GetWebcam/GetChatBoxes/GetSplitPoint/IsStatic) - SceneCompositor: split-aware BakeStaticBase + CompositeLayers + Render(.., staticBase, split); builds/caches the static base below the split point in source-rect space - FramePump: optional SceneGraph -> optimized bake+composite path; falls back to full render - MainViewModel: routes element mutations through the graph; invalidates the bake on static layout/opacity/visibility/useDefaultBackground changes and after background heal/Ensure - Integration test SceneGraphTests.BakedStaticBase_WithDynamicLayer_CompositesCorrectly Derivative survey (mandated): tried before writing — OBS does per-source opacity/visibility caching and static-scene baking; this mirrors OBS's 'cached static source' optimization. 3 documented defensive deviations from the spec (ChatOverlayLayer stays decoupled; background helpers stay VM-static for direct testability; full facade peel deferred post-1.0) in TASKS.md + ai.md. Scope check passed; clean build 0 warnings.
19 lines
708 B
C#
19 lines
708 B
C#
using System.Windows.Media;
|
|
|
|
namespace ytLive.Models;
|
|
|
|
/// <summary>
|
|
/// A scene's usage of the app-wide webcam — conceptually `webcam.{scene}.config`.
|
|
/// The identity lives once on the <see cref="Webcam"/> entity; this object is that
|
|
/// scene's placement, clip/mirror, border, and visibility for it. Exists only in
|
|
/// scenes where the creator added the webcam.
|
|
/// </summary>
|
|
public class WebcamSceneConfig : SceneElement
|
|
{
|
|
public string WebcamId { get; init; } = string.Empty;
|
|
public override bool IsWebcam => true;
|
|
public override bool IsDraggable => true;
|
|
public override ElementKind Kind => ElementKind.Dynamic;
|
|
public override ImageSource? DisplaySource => VideoImageSource;
|
|
}
|