1
0
Эх сурвалжийг харах

feat(DevTools): Startup Screen

Giuseppe Lippolis 4 жил өмнө
parent
commit
c7da3ccdc5

+ 4 - 1
samples/ControlCatalog/MainWindow.xaml.cs

@@ -17,7 +17,10 @@ namespace ControlCatalog
         public MainWindow()
         {
             this.InitializeComponent();
-            this.AttachDevTools();
+            this.AttachDevTools(new Avalonia.Diagnostics.DevToolsOptions()
+            {
+                StartupScreen = 1,
+            });
             //Renderer.DrawFps = true;
             //Renderer.DrawDirtyRects = Renderer.DrawFps = true;
 

+ 3 - 1
src/Avalonia.Diagnostics/Diagnostics/DevTools.cs

@@ -10,7 +10,8 @@ namespace Avalonia.Diagnostics
 {
     public static class DevTools
     {
-        private static readonly Dictionary<TopLevel, Window> s_open = new Dictionary<TopLevel, Window>();
+        private static readonly Dictionary<TopLevel, MainWindow> s_open =
+            new Dictionary<TopLevel, MainWindow>();
 
         public static IDisposable Attach(TopLevel root, KeyGesture gesture)
         {
@@ -52,6 +53,7 @@ namespace Avalonia.Diagnostics
                     Width = options.Size.Width,
                     Height = options.Size.Height,
                 };
+                window.SetOptions(options);
 
                 window.Closed += DevToolsClosed;
                 s_open.Add(root, window);

+ 5 - 0
src/Avalonia.Diagnostics/Diagnostics/DevToolsOptions.cs

@@ -22,5 +22,10 @@ namespace Avalonia.Diagnostics
         /// Gets or sets the initial size of the DevTools window. The default value is 1280x720.
         /// </summary>
         public Size Size { get; set; } = new Size(1280, 720);
+
+        /// <summary>
+        /// Get or set the startup screen number where the DevTools window will be displayed.
+        /// </summary>
+        public int? StartupScreen { get; set; }
     }
 }

+ 8 - 1
src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs

@@ -151,7 +151,7 @@ namespace Avalonia.Diagnostics.ViewModels
             get { return _pointerOverElement; }
             private set { RaiseAndSetIfChanged(ref _pointerOverElement, value); }
         }
-
+        
         private void UpdateConsoleContext(ConsoleContext context)
         {
             context.root = _root;
@@ -213,5 +213,12 @@ namespace Avalonia.Diagnostics.ViewModels
                 tree.SelectControl(control);
             }
         }
+
+        public int? StartupScreenIndex { get; private set; } = default;
+
+        public void SetOptions(DevToolsOptions options)
+        {
+            StartupScreenIndex = options.StartupScreen;
+        }
     }
 }

+ 20 - 0
src/Avalonia.Diagnostics/Diagnostics/Views/MainWindow.xaml.cs

@@ -24,6 +24,23 @@ namespace Avalonia.Diagnostics.Views
             _keySubscription = InputManager.Instance.Process
                 .OfType<RawKeyEventArgs>()
                 .Subscribe(RawKeyDown);
+
+            EventHandler? lh = default;
+            lh = (s, e) =>
+              {
+                  this.Opened -= lh;
+                  if ((DataContext as MainViewModel)?.StartupScreenIndex is int index)
+                  {
+                      var screens = this.Screens;
+                      if (index < screens.ScreenCount)                          
+                      {
+                          var screen = screens.All[index];
+                          this.Position = screen.Bounds.TopLeft;
+                          this.WindowState = WindowState.Maximized;
+                      }
+                  }
+              };
+            this.Opened += lh;
         }
 
         public TopLevel? Root
@@ -115,5 +132,8 @@ namespace Avalonia.Diagnostics.Views
         }
 
         private void RootClosed(object? sender, EventArgs e) => Close();
+
+        public void SetOptions(DevToolsOptions options) =>
+            (DataContext as MainViewModel)?.SetOptions(options);
     }
 }