Browse Source

fixes(DevTools): NRE when click 'Visualizze dirty rects' and 'Show fps overly' in Option menu

pull/7273/head
Giuseppe Lippolis 5 years ago
parent
commit
215425c45a
  1. 12
      src/Avalonia.Diagnostics/Diagnostics/Controls/Application.cs
  2. 32
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs

12
src/Avalonia.Diagnostics/Diagnostics/Controls/Application.cs

@ -28,7 +28,12 @@ namespace Avalonia.Diagnostics.Controls
};
controller.Exit += eh;
}
RendererRoot = application.ApplicationLifetime switch
{
Lifetimes.IClassicDesktopStyleApplicationLifetime classic => classic.MainWindow.Renderer,
Lifetimes.ISingleViewApplicationLifetime single => (single.MainView as VisualTree.IVisual)?.VisualRoot?.Renderer,
_ => null
};
}
internal App Instance => _application;
@ -105,5 +110,10 @@ namespace Avalonia.Diagnostics.Controls
/// </summary>
public string? Name =>
_application.Name;
/// <summary>
/// Gets the root of the visual tree, if the control is attached to a visual tree.
/// </summary>
internal Rendering.IRenderer? RendererRoot { get; }
}
}

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

@ -76,7 +76,20 @@ namespace Avalonia.Diagnostics.ViewModels
get => _shouldVisualizeDirtyRects;
set
{
((TopLevel)_root).Renderer.DrawDirtyRects = value;
var changed = true;
if (_root is TopLevel topLevel && topLevel.Renderer is { })
{
topLevel.Renderer.DrawDirtyRects = value;
}
else if (_root is Controls.Application app && app.RendererRoot is { })
{
app.RendererRoot.DrawDirtyRects = value;
}
else
{
changed = false;
}
if (changed)
RaiseAndSetIfChanged(ref _shouldVisualizeDirtyRects, value);
}
}
@ -96,8 +109,21 @@ namespace Avalonia.Diagnostics.ViewModels
get => _showFpsOverlay;
set
{
((TopLevel)_root).Renderer.DrawFps = value;
RaiseAndSetIfChanged(ref _showFpsOverlay, value);
var changed = true;
if (_root is TopLevel topLevel && topLevel.Renderer is { })
{
topLevel.Renderer.DrawFps = value;
}
else if (_root is Controls.Application app && app.RendererRoot is { })
{
app.RendererRoot.DrawFps = value;
}
else
{
changed = false;
}
if(changed)
RaiseAndSetIfChanged(ref _showFpsOverlay, value);
}
}

Loading…
Cancel
Save