Browse Source

Merge pull request #4609 from pr8x/feature-devtools-dirtyrects

DevTools: Add option to enable/disable dirty rects and fps overlay
pull/4620/head
danwalmsley 6 years ago
committed by GitHub
parent
commit
45a9560302
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 43
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs
  2. 14
      src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml

43
src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs

@ -9,7 +9,7 @@ namespace Avalonia.Diagnostics.ViewModels
{ {
internal class MainViewModel : ViewModelBase, IDisposable internal class MainViewModel : ViewModelBase, IDisposable
{ {
private readonly IControl _root; private readonly TopLevel _root;
private readonly TreePageViewModel _logicalTree; private readonly TreePageViewModel _logicalTree;
private readonly TreePageViewModel _visualTree; private readonly TreePageViewModel _visualTree;
private readonly EventsPageViewModel _events; private readonly EventsPageViewModel _events;
@ -19,8 +19,10 @@ namespace Avalonia.Diagnostics.ViewModels
private string _focusedControl; private string _focusedControl;
private string _pointerOverElement; private string _pointerOverElement;
private bool _shouldVisualizeMarginPadding = true; private bool _shouldVisualizeMarginPadding = true;
private bool _shouldVisualizeDirtyRects;
private bool _showFpsOverlay;
public MainViewModel(IControl root) public MainViewModel(TopLevel root)
{ {
_root = root; _root = root;
_logicalTree = new TreePageViewModel(this, LogicalTreeNode.Create(root)); _logicalTree = new TreePageViewModel(this, LogicalTreeNode.Create(root));
@ -40,12 +42,42 @@ namespace Avalonia.Diagnostics.ViewModels
get => _shouldVisualizeMarginPadding; get => _shouldVisualizeMarginPadding;
set => RaiseAndSetIfChanged(ref _shouldVisualizeMarginPadding, value); 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() public void ToggleVisualizeMarginPadding()
{ {
ShouldVisualizeMarginPadding = !ShouldVisualizeMarginPadding; 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 ConsoleViewModel Console { get; }
public ViewModelBase Content public ViewModelBase Content
@ -128,10 +160,7 @@ namespace Avalonia.Diagnostics.ViewModels
{ {
var tree = Content as TreePageViewModel; var tree = Content as TreePageViewModel;
if (tree != null) tree?.SelectControl(control);
{
tree.SelectControl(control);
}
} }
public void Dispose() public void Dispose()
@ -140,6 +169,8 @@ namespace Avalonia.Diagnostics.ViewModels
_pointerOverSubscription.Dispose(); _pointerOverSubscription.Dispose();
_logicalTree.Dispose(); _logicalTree.Dispose();
_visualTree.Dispose(); _visualTree.Dispose();
_root.Renderer.DrawDirtyRects = false;
_root.Renderer.DrawFps = false;
} }
private void UpdateFocusedControl() private void UpdateFocusedControl()

14
src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml

@ -24,6 +24,20 @@
IsEnabled="False"/> IsEnabled="False"/>
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem Header="Visualize dirty rects" Command="{Binding ToggleVisualizeDirtyRects}">
<MenuItem.Icon>
<CheckBox BorderThickness="0"
IsChecked="{Binding ShouldVisualizeDirtyRects}"
IsEnabled="False"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Show fps overlay" Command="{Binding ToggleFpsOverlay}">
<MenuItem.Icon>
<CheckBox BorderThickness="0"
IsChecked="{Binding ShowFpsOverlay}"
IsEnabled="False"/>
</MenuItem.Icon>
</MenuItem>
</MenuItem> </MenuItem>
</Menu> </Menu>

Loading…
Cancel
Save