0bd17ab428
- Source.ShowDesktop bool persisted in DB (schema migration + LayoutStore) - ClearBackdropCaptureAsync clears CaptureKey + VideoImageSource for static fallback - Top bar: red/green/pulsing status light, avatar via BitmapImage, Log In button - ShowStartStream now requires IsConnected - RunMockChatPreviewAsync: simple async loop, ChatPreviewEnabled property on Source - EnsureDefaultBackdrop called on every scene switch, seeds all 5 scenes - SeedEndingBackdrop replaces existing, SeedChatBackdrop added - SceneCatalog: Chat scene display name corrected (layer = 'YouTube Chat') - Left panel spacing consistency, context menu reordered - Border animation rendering via code-behind Storyboard approach - 3 new backdrop assets (ending-backdrop.jpg, chat-backdrop.jpg, live-backdrop.jpg) - Build 0 warnings, 178 tests passing
35 lines
1.3 KiB
C#
35 lines
1.3 KiB
C#
namespace ytLive.Services;
|
|
|
|
/// <summary>
|
|
/// Identifies which monitor holds a full-screen window (a game/app running
|
|
/// borderless or exclusive fullscreen). Seam so ScreenCaptureManager is
|
|
/// testable without Win32 interop.
|
|
/// </summary>
|
|
public interface IFullScreenDetector
|
|
{
|
|
/// <summary>
|
|
/// The index of the monitor a full-screen foreground window covers, or null
|
|
/// when the foreground window is windowed, missing, or one of our own.
|
|
/// </summary>
|
|
int? GetForegroundFullScreenMonitorIndex();
|
|
|
|
/// <summary>Index of the primary (taskbar-hosting) monitor.</summary>
|
|
int PrimaryMonitorIndex();
|
|
|
|
/// <summary>All monitors in capture-key order (enumeration order).</summary>
|
|
IReadOnlyList<DisplayInfo> GetDisplays();
|
|
|
|
/// <summary>
|
|
/// Raised on the UI thread whenever the foreground window changes.
|
|
/// Payload is the full-screen monitor index, or null when the new
|
|
/// foreground window is not full-screen / is one of our own windows.
|
|
/// </summary>
|
|
event Action<int?>? FullscreenMonitorChanged;
|
|
|
|
/// <summary>Hook EVENT_SYSTEM_FOREGROUND so <see cref="FullscreenMonitorChanged"/> fires.</summary>
|
|
void StartWatching();
|
|
|
|
/// <summary>Unhook the foreground listener.</summary>
|
|
void StopWatching();
|
|
}
|