diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs
index 1c49b24f52..bf7d0e232a 100644
--- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs
+++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs
@@ -9,7 +9,7 @@ namespace Avalonia.Diagnostics.ViewModels
{
internal class MainViewModel : ViewModelBase, IDisposable
{
- private readonly IControl _root;
+ private readonly TopLevel _root;
private readonly TreePageViewModel _logicalTree;
private readonly TreePageViewModel _visualTree;
private readonly EventsPageViewModel _events;
@@ -19,8 +19,10 @@ namespace Avalonia.Diagnostics.ViewModels
private string _focusedControl;
private string _pointerOverElement;
private bool _shouldVisualizeMarginPadding = true;
+ private bool _shouldVisualizeDirtyRects;
+ private bool _showFpsOverlay;
- public MainViewModel(IControl root)
+ public MainViewModel(TopLevel root)
{
_root = root;
_logicalTree = new TreePageViewModel(this, LogicalTreeNode.Create(root));
@@ -40,12 +42,42 @@ namespace Avalonia.Diagnostics.ViewModels
get => _shouldVisualizeMarginPadding;
set => RaiseAndSetIfChanged(ref _shouldVisualizeMarginPadding, value);
}
+
+ public bool ShouldVisualizeDirtyRects
+ {
+ get => _shouldVisualizeDirtyRects;
+ set
+ {
+ _root.Renderer.DrawDirtyRects = value;
+ RaiseAndSetIfChanged(ref _shouldVisualizeDirtyRects, value);
+ }
+ }
+
+ public void ToggleVisualizeDirtyRects()
+ {
+ ShouldVisualizeDirtyRects = !ShouldVisualizeDirtyRects;
+ }
public void ToggleVisualizeMarginPadding()
{
ShouldVisualizeMarginPadding = !ShouldVisualizeMarginPadding;
}
+ public bool ShowFpsOverlay
+ {
+ get => _showFpsOverlay;
+ set
+ {
+ _root.Renderer.DrawFps = value;
+ RaiseAndSetIfChanged(ref _showFpsOverlay, value);
+ }
+ }
+
+ public void ToggleFpsOverlay()
+ {
+ ShowFpsOverlay = !ShowFpsOverlay;
+ }
+
public ConsoleViewModel Console { get; }
public ViewModelBase Content
@@ -128,10 +160,7 @@ namespace Avalonia.Diagnostics.ViewModels
{
var tree = Content as TreePageViewModel;
- if (tree != null)
- {
- tree.SelectControl(control);
- }
+ tree?.SelectControl(control);
}
public void Dispose()
@@ -140,6 +169,8 @@ namespace Avalonia.Diagnostics.ViewModels
_pointerOverSubscription.Dispose();
_logicalTree.Dispose();
_visualTree.Dispose();
+ _root.Renderer.DrawDirtyRects = false;
+ _root.Renderer.DrawFps = false;
}
private void UpdateFocusedControl()
diff --git a/src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml b/src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml
index 0165398718..8c4db33f91 100644
--- a/src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml
+++ b/src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml
@@ -24,6 +24,20 @@
IsEnabled="False"/>
+
+