using Engine.Core; namespace Engine.Integration.SDL3; public interface IWindow : IBehaviour { Event OnStateChanged { get; } Event OnFocusStateChanged { get; } Event OnModeChanged { get; } Event OnShowStateChanged { get; } Event OnResizeModeChanged { get; } Event OnTitleChanged { get; } Event OnTargetFpsChanged { get; } Event OnSizeChanged { get; } Event OnBackgroundColorChanged { get; } WindowState State { get; set; } WindowFocusState FocusState { get; } WindowMode Mode { get; set; } WindowShowState ShowState { get; set; } WindowResizeMode ResizeMode { get; set; } string Title { get; set; } uint TargetFps { get; set; } Vector2DInt Size { get; set; } ColorRGB BackgroundColor { get; set; } readonly record struct StateChangedArguments(WindowState PreviousState); readonly record struct FocusStateChangedArguments(WindowFocusState PreviousFocusState); readonly record struct ModeChangedArguments(WindowMode PreviousMode); readonly record struct ShowStateChangedArguments(WindowShowState PreviousShowState); readonly record struct ResizeModeChangedArguments(WindowResizeMode PreviousResizeMode); readonly record struct TitleChangedArguments(string PreviousTitle); readonly record struct TargetFpsChangedArguments(uint PreviousTargetFps); readonly record struct SizeChangedArguments(Vector2DInt PreviousSize); readonly record struct BackgroundColorChangedArguments(ColorRGB PreviousColor); } public enum WindowFocusState { Focused, Unfocused } public enum WindowState { Open, Closed } public enum WindowMode { Windowed, Fullscreen, BorderlessFullscreen, BorderlessWindowed } public enum WindowShowState { Normal, Minimized, Maximized } public enum WindowResizeMode { Fixed, Resizable, AspectLocked }