using System; using System.Globalization; using System.Linq; using System.Net.Http.Headers; using Avalonia; using Avalonia.Controls; using Avalonia.Media; using Avalonia.Platform; using Avalonia.Rendering; using Avalonia.Threading; namespace ControlCatalog.Pages { public class ScreenPage : UserControl { private double _leftMost; private double _topMost; private IBrush _primaryBrush = SolidColorBrush.Parse("#FF0078D7"); private IBrush _defaultBrush = Brushes.LightGray; private IPen _activePen = new Pen(Brushes.Black); private IPen _defaultPen = new Pen(Brushes.DarkGray); public ScreenPage() { var button = new Button(); button.Content = "Request ScreenDetails"; button.VerticalAlignment = Avalonia.Layout.VerticalAlignment.Top; button.Click += async (sender, args) => { var success = TopLevel.GetTopLevel(this)!.Screens is { } screens ? await screens.RequestScreenDetails() : false; button.Content = "Request ScreenDetails: " + (success ? "Granted" : "Denied"); }; Content = button; } protected override bool BypassFlowDirectionPolicies => true; protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { base.OnAttachedToVisualTree(e); var topLevel = TopLevel.GetTopLevel(this); if (topLevel is Window w) { w.PositionChanged += (_, _) => InvalidateVisual(); } if (topLevel?.Screens is { } screens) { screens.Changed += (_, _) => { Console.WriteLine("Screens Changed"); InvalidateVisual(); }; } } public override void Render(DrawingContext context) { base.Render(context); double beginOffset = (Content as Visual)?.Bounds.Height + 10 ?? 0; var topLevel = TopLevel.GetTopLevel(this)!; if (topLevel.Screens is not { } screens) { var formattedText = CreateFormattedText("Current platform doesn't support Screens API."); context.DrawText(formattedText, new Point(15, 15 + beginOffset)); return; } var activeScreen = screens.ScreenFromTopLevel(topLevel); double maxBottom = 0; for (int i = 0; i