Code/InteractiveComputer/Core/ComputerWindowLayoutPolicy.cs
using System;
namespace PaneOS.InteractiveComputer.Core;
public readonly record struct ComputerWindowBounds( int X, int Y, int Width, int Height );
public static class ComputerWindowLayoutPolicy
{
public static ComputerWindowBounds ResolveInitialBounds( ComputerAppDescriptor descriptor, int resolutionX, int resolutionY, int visibleWindowCount )
{
return ResolveInitialBounds( descriptor, resolutionX, resolutionY, visibleWindowCount, descriptor.DefaultWindowWidth, descriptor.DefaultWindowHeight );
}
public static ComputerWindowBounds ResolveInitialBounds( ComputerAppDescriptor descriptor, int resolutionX, int resolutionY, int visibleWindowCount, int? defaultWidthOverride, int? defaultHeightOverride )
{
var cascadeOffset = Math.Max( 0, visibleWindowCount ) * 22;
var width = defaultWidthOverride ?? Math.Min( 620, Math.Max( 420, resolutionX - 150 ) );
var height = defaultHeightOverride ?? Math.Min( 420, Math.Max( 280, resolutionY - 170 ) );
return new ComputerWindowBounds(
descriptor.DefaultWindowOffsetX + cascadeOffset,
descriptor.DefaultWindowOffsetY + cascadeOffset,
Math.Clamp( width, 260, Math.Max( 260, resolutionX ) ),
Math.Clamp( height, 180, Math.Max( 180, resolutionY ) ) );
}
}