From c16e377bc61b93ce8947b192d16d72bd5fd21daa Mon Sep 17 00:00:00 2001 From: Marcus Wichelmann Date: Thu, 2 Apr 2020 16:08:38 +0200 Subject: [PATCH 1/2] Fix crash caused by window decorations not being available when using remote rendering --- samples/ControlCatalog/MainView.xaml.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/samples/ControlCatalog/MainView.xaml.cs b/samples/ControlCatalog/MainView.xaml.cs index 5f71b2ecd9..7c17b125d6 100644 --- a/samples/ControlCatalog/MainView.xaml.cs +++ b/samples/ControlCatalog/MainView.xaml.cs @@ -60,8 +60,8 @@ namespace ControlCatalog var decorations = this.Find("Decorations"); decorations.SelectionChanged += (sender, e) => { - Window window = (Window)VisualRoot; - window.SystemDecorations = (SystemDecorations)decorations.SelectedIndex; + if (VisualRoot is Window window) + window.SystemDecorations = (SystemDecorations)decorations.SelectedIndex; }; } @@ -69,7 +69,8 @@ namespace ControlCatalog { base.OnAttachedToVisualTree(e); var decorations = this.Find("Decorations"); - decorations.SelectedIndex = (int)((Window)VisualRoot).SystemDecorations; + if (VisualRoot is Window window) + decorations.SelectedIndex = (int)window.SystemDecorations; } } } From 92770765e3c3b72f3d7a06370d5f9a4b696ee1ef Mon Sep 17 00:00:00 2001 From: Marcus Wichelmann Date: Thu, 2 Apr 2020 16:21:04 +0200 Subject: [PATCH 2/2] Fixed bitmaps not getting disposed correctly causing a memory leak in RemoteWidget --- src/Avalonia.Controls/Remote/RemoteWidget.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Remote/RemoteWidget.cs b/src/Avalonia.Controls/Remote/RemoteWidget.cs index c7a1a24c25..fabb38f87d 100644 --- a/src/Avalonia.Controls/Remote/RemoteWidget.cs +++ b/src/Avalonia.Controls/Remote/RemoteWidget.cs @@ -75,7 +75,11 @@ namespace Avalonia.Controls.Remote var fmt = (PixelFormat) _lastFrame.Format; if (_bitmap == null || _bitmap.PixelSize.Width != _lastFrame.Width || _bitmap.PixelSize.Height != _lastFrame.Height) - _bitmap = new WriteableBitmap(new PixelSize(_lastFrame.Width, _lastFrame.Height), new Vector(96, 96), fmt); + { + _bitmap?.Dispose(); + _bitmap = new WriteableBitmap(new PixelSize(_lastFrame.Width, _lastFrame.Height), + new Vector(96, 96), fmt); + } using (var l = _bitmap.Lock()) { var lineLen = (fmt == PixelFormat.Rgb565 ? 2 : 4) * _lastFrame.Width;