diff --git a/src/BlazorDesktop/Wpf/BlazorDesktopWindow.cs b/src/BlazorDesktop/Wpf/BlazorDesktopWindow.cs index 452420b..8e3de6e 100644 --- a/src/BlazorDesktop/Wpf/BlazorDesktopWindow.cs +++ b/src/BlazorDesktop/Wpf/BlazorDesktopWindow.cs @@ -49,6 +49,8 @@ public partial class BlazorDesktopWindow : Window private readonly IConfiguration _config; private readonly IWebHostEnvironment _environment; private readonly UISettings _uiSettings; + private readonly double[] _zoomSizes = + [5, 4, 3, 2.5, 2, 1.75, 1.5, 1.25, 1.1, 1, 0.9, 0.8, 0.75, 0.66, 0.5, 0.33, 0.25]; private const string DragScript = @" window.addEventListener('DOMContentLoaded', () => { @@ -120,6 +122,54 @@ public void ToggleFullScreen() } } + /// + /// Resets the zoom level. + /// + public void ResetZoom() + { + WebView.WebView.ZoomFactor = 1; + } + + /// + /// Zooms in. + /// + public void ZoomIn() + { + var closest = _zoomSizes.Select(z => new { Zoom = z, Distance = Math.Abs(z - WebView.WebView.ZoomFactor) }) + .OrderBy(p => p.Distance) + .Select(p => p.Zoom) + .First(); + + var closestIndex = Array.IndexOf(_zoomSizes, closest); + + if (closestIndex > 0) + { + var newZoomSize = _zoomSizes[closestIndex - 1]; + + WebView.WebView.ZoomFactor = newZoomSize; + } + } + + /// + /// Zooms in. + /// + public void ZoomOut() + { + var closest = _zoomSizes.Select(z => new { Zoom = z, Distance = Math.Abs(z - WebView.WebView.ZoomFactor) }) + .OrderBy(p => p.Distance) + .Select(p => p.Zoom) + .First(); + + var closestIndex = Array.IndexOf(_zoomSizes, closest); + + if (closestIndex < _zoomSizes.Length - 1) + { + var newZoomSize = _zoomSizes[closestIndex + 1]; + + WebView.WebView.ZoomFactor = newZoomSize; + } + } + private void InitializeWindow() { var height = _config.GetValue(WindowDefaults.Height) ?? 768;