diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor index d0ca42b4..cfbaf571 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditor.razor @@ -1,6 +1,7 @@ @using EnvelopeGenerator.Application.Resources @using EnvelopeGenerator.Application.Common.Dto @using System.Globalization +@using Microsoft.AspNetCore.Components.Web @using Microsoft.Extensions.Localization @inject IStringLocalizer UiLocalizer @inject IJSRuntime JSRuntime @@ -11,18 +12,26 @@
+ GoToPage="OnGoToPageAsync" + ZoomOut="OnZoomOutAsync" + ZoomIn="OnZoomInAsync" + SetZoomPercent="OnSetZoomPercentAsync" />
}
+
} -
+
@for (var pageIndex = 0; pageIndex < PageCount; pageIndex++) { var pagePreview = pageIndex < Pages.Count ? Pages[pageIndex] : null; @@ -128,6 +137,12 @@ private double _grabOffsetXPt; private double _grabOffsetYPt; private int _currentPage = 1; + private int _zoomPercent = 112; + private bool _zoomOverrideInitialized; + + private const int MinZoomPercent = 50; + private const int MaxZoomPercent = 300; + private const int ZoomStepPercent = 5; private static string GetFieldStyle(SenderPdfFieldOverlay field, double pageWidthPt, double pageHeightPt) { @@ -170,6 +185,12 @@ return $"aspect-ratio:{ratioText};cursor:{cursor};"; } + private string GetZoomStyle() + { + var factor = (_zoomPercent / 100.0).ToString("F4", CultureInfo.InvariantCulture); + return $"zoom:{factor};"; + } + protected override void OnParametersSet() { if (PageCount <= 0) @@ -181,6 +202,18 @@ _currentPage = Math.Max(1, Math.Min(_currentPage, PageCount)); } + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (_zoomOverrideInitialized) + return; + + await JSRuntime.InvokeVoidAsync( + "envelopeEditor.ensureZoomOverride", + "sender-editor-pdf-viewer"); + + _zoomOverrideInitialized = true; + } + private async Task HandleClickAsync(MouseEventArgs args) { if (EditorClick.HasDelegate) @@ -296,6 +329,47 @@ await InvokeAsync(StateHasChanged); } + private async Task OnZoomOutAsync() + { + SetZoomPercent(_zoomPercent - ZoomStepPercent); + await InvokeAsync(StateHasChanged); + } + + private async Task OnZoomInAsync() + { + SetZoomPercent(_zoomPercent + ZoomStepPercent); + await InvokeAsync(StateHasChanged); + } + + private async Task OnSetZoomPercentAsync(int zoomPercent) + { + SetZoomPercent(zoomPercent); + await InvokeAsync(StateHasChanged); + } + + private async Task OnEditorWheelAsync(WheelEventArgs args) + { + if (args.CtrlKey) + { + if (args.DeltaY < 0) + await OnZoomInAsync(); + else if (args.DeltaY > 0) + await OnZoomOutAsync(); + + return; + } + + await JSRuntime.InvokeVoidAsync( + "envelopeEditor.scrollPdfViewerByDelta", + "sender-editor-pdf-viewer", + args.DeltaY); + } + + private void SetZoomPercent(int value) + { + _zoomPercent = Math.Max(MinZoomPercent, Math.Min(value, MaxZoomPercent)); + } + private void OnEditorMouseUp(MouseEventArgs args) { _draggedFieldIndex = null; diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor index 0f2a3e36..6e1fd0a4 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/PdfEditor/SenderPdfImageEditorToolbar.razor @@ -58,7 +58,7 @@
-
- + -