A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

54 lines
1.8 KiB

using System.Collections.Generic;
using Avalonia.Utilities;
#nullable enable
namespace Avalonia.Platform
{
public static class ScreenHelper
{
public static Screen? ScreenFromPoint(PixelPoint point, IReadOnlyList<Screen> screens)
{
foreach (Screen screen in screens)
{
if (screen.Bounds.ContainsExclusive(point))
{
return screen;
}
}
return null;
}
public static Screen? ScreenFromRect(PixelRect bounds, IReadOnlyList<Screen> screens)
{
Screen? currMaxScreen = null;
double maxAreaSize = 0;
foreach (Screen screen in screens)
{
double left = MathUtilities.Clamp(bounds.X, screen.Bounds.X, screen.Bounds.X + screen.Bounds.Width);
double top = MathUtilities.Clamp(bounds.Y, screen.Bounds.Y, screen.Bounds.Y + screen.Bounds.Height);
double right = MathUtilities.Clamp(bounds.X + bounds.Width, screen.Bounds.X, screen.Bounds.X + screen.Bounds.Width);
double bottom = MathUtilities.Clamp(bounds.Y + bounds.Height, screen.Bounds.Y, screen.Bounds.Y + screen.Bounds.Height);
double area = (right - left) * (bottom - top);
if (area > maxAreaSize)
{
maxAreaSize = area;
currMaxScreen = screen;
}
}
return currMaxScreen;
}
public static Screen? ScreenFromWindow(IWindowBaseImpl window, IReadOnlyList<Screen> screens)
{
var rect = new PixelRect(
window.Position,
PixelSize.FromSize(window.FrameSize ?? window.ClientSize, window.DesktopScaling));
return ScreenFromRect(rect, screens);
}
}
}