From b12c0bce3d09622a790f35adfa427066209451ac Mon Sep 17 00:00:00 2001 From: Dave Higgins Date: Wed, 19 Jan 2022 16:29:33 +0000 Subject: [PATCH 1/4] fix strange happengings in IsCorrupted, sizes being updated without any IsCorrupted true returned. --- src/Web/Avalonia.Web.Blazor/BlazorSkiaGpuRenderTarget.cs | 6 ++++++ src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs | 2 ++ src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs | 2 ++ 3 files changed, 10 insertions(+) diff --git a/src/Web/Avalonia.Web.Blazor/BlazorSkiaGpuRenderTarget.cs b/src/Web/Avalonia.Web.Blazor/BlazorSkiaGpuRenderTarget.cs index ee7374634f..5df844b11d 100644 --- a/src/Web/Avalonia.Web.Blazor/BlazorSkiaGpuRenderTarget.cs +++ b/src/Web/Avalonia.Web.Blazor/BlazorSkiaGpuRenderTarget.cs @@ -38,6 +38,12 @@ namespace Avalonia.Web.Blazor { get { + if( _blazorSkiaSurface.IsDirty ) + { + _blazorSkiaSurface.IsDirty = false; + return true; + } + var result = _size.Width != _renderTarget.Width || _size.Height != _renderTarget.Height; return result; diff --git a/src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs b/src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs index 512309cfe3..3e5bc8934d 100644 --- a/src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs +++ b/src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs @@ -26,5 +26,7 @@ namespace Avalonia.Web.Blazor public double Scaling { get; set; } public SKHtmlCanvasInterop.GLInfo GlInfo { get; set; } + + public bool IsDirty { get; set; } } } diff --git a/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs b/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs index 1d667c0f0c..0158dc4f31 100644 --- a/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs +++ b/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs @@ -51,6 +51,8 @@ namespace Avalonia.Web.Blazor if (_currentSurface is { }) { _currentSurface.Size = new PixelSize((int)size.Width, (int)size.Height); + + _currentSurface.IsDirty = true; } Resized?.Invoke(newSize, PlatformResizeReason.User); From 21a76d476538183a69fff4a7e12e62a7ea3dba30 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 20 Jan 2022 22:03:24 +0000 Subject: [PATCH 2/4] fix render target corruption detection. --- .../BlazorSkiaGpuRenderTarget.cs | 16 +--------------- src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs | 2 -- .../Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs | 2 -- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/src/Web/Avalonia.Web.Blazor/BlazorSkiaGpuRenderTarget.cs b/src/Web/Avalonia.Web.Blazor/BlazorSkiaGpuRenderTarget.cs index 5df844b11d..fa6a39f210 100644 --- a/src/Web/Avalonia.Web.Blazor/BlazorSkiaGpuRenderTarget.cs +++ b/src/Web/Avalonia.Web.Blazor/BlazorSkiaGpuRenderTarget.cs @@ -34,20 +34,6 @@ namespace Avalonia.Web.Blazor return new BlazorSkiaGpuRenderSession(_blazorSkiaSurface, _renderTarget); } - public bool IsCorrupted - { - get - { - if( _blazorSkiaSurface.IsDirty ) - { - _blazorSkiaSurface.IsDirty = false; - return true; - } - - var result = _size.Width != _renderTarget.Width || _size.Height != _renderTarget.Height; - - return result; - } - } + public bool IsCorrupted => _blazorSkiaSurface.Size != _size; } } diff --git a/src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs b/src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs index 3e5bc8934d..512309cfe3 100644 --- a/src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs +++ b/src/Web/Avalonia.Web.Blazor/BlazorSkiaSurface.cs @@ -26,7 +26,5 @@ namespace Avalonia.Web.Blazor public double Scaling { get; set; } public SKHtmlCanvasInterop.GLInfo GlInfo { get; set; } - - public bool IsDirty { get; set; } } } diff --git a/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs b/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs index 0158dc4f31..1d667c0f0c 100644 --- a/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs +++ b/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs @@ -51,8 +51,6 @@ namespace Avalonia.Web.Blazor if (_currentSurface is { }) { _currentSurface.Size = new PixelSize((int)size.Width, (int)size.Height); - - _currentSurface.IsDirty = true; } Resized?.Invoke(newSize, PlatformResizeReason.User); From efb366c83859d931b1cddb1a3317f89a9c9d35b3 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 20 Jan 2022 23:09:38 +0000 Subject: [PATCH 3/4] fix scaling and resizing. --- src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs b/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs index 1d667c0f0c..1942e2d0d4 100644 --- a/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs +++ b/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs @@ -44,6 +44,16 @@ namespace Avalonia.Web.Blazor { var newSize = new Size(size.Width, size.Height); + if (RenderScaling != dpi) + { + if (_currentSurface is { }) + { + _currentSurface.Scaling = dpi; + } + + ScalingChanged?.Invoke(dpi); + } + if (newSize != _clientSize) { _clientSize = newSize; @@ -53,7 +63,7 @@ namespace Avalonia.Web.Blazor _currentSurface.Size = new PixelSize((int)size.Width, (int)size.Height); } - Resized?.Invoke(newSize, PlatformResizeReason.User); + Resized?.Invoke(newSize * dpi, PlatformResizeReason.User); } } From 2b263544e50aa0c3fa7f1742716aa8ed3b54e2aa Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 20 Jan 2022 23:14:09 +0000 Subject: [PATCH 4/4] correctly resize. --- src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs b/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs index 1942e2d0d4..3cadbfaa60 100644 --- a/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs +++ b/src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs @@ -44,7 +44,7 @@ namespace Avalonia.Web.Blazor { var newSize = new Size(size.Width, size.Height); - if (RenderScaling != dpi) + if (Math.Abs(RenderScaling - dpi) > 0.0001) { if (_currentSurface is { }) { @@ -63,7 +63,7 @@ namespace Avalonia.Web.Blazor _currentSurface.Size = new PixelSize((int)size.Width, (int)size.Height); } - Resized?.Invoke(newSize * dpi, PlatformResizeReason.User); + Resized?.Invoke(newSize, PlatformResizeReason.User); } }