Skip to content

Commit 87d9097

Browse files
authored
SignaturePad: Support Mobile (#542)
1 parent 68029b9 commit 87d9097

File tree

10 files changed

+219
-165
lines changed

10 files changed

+219
-165
lines changed

CodeBeam.MudBlazor.Extensions.Docs.Wasm/wwwroot/CodeBeam.MudBlazor.Extensions.xml

Lines changed: 16 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CodeBeam.MudBlazor.Extensions/Components/SignaturePad/MudSignaturePad.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
@using System.Text
55
@namespace MudExtensions
66
@inject IJSRuntime JsRuntime
7+
@inject IBrowserViewportService BrowserViewportService
78
@inherits ComponentBase
89

910
<MudPaper Elevation="@Elevation" Class="@OuterClass">

CodeBeam.MudBlazor.Extensions/Components/SignaturePad/MudSignaturePad.razor.cs

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.AspNetCore.Components;
22
using Microsoft.JSInterop;
33
using MudBlazor;
4+
using MudBlazor.Services;
45
using MudBlazor.Utilities;
56
using MudExtensions.Utilities;
67

@@ -9,10 +10,10 @@ namespace MudExtensions
910
/// <summary>
1011
/// Signature pad component.
1112
/// </summary>
12-
public partial class MudSignaturePad : ComponentBase, IAsyncDisposable
13+
public partial class MudSignaturePad : ComponentBase, IBrowserViewportObserver, IAsyncDisposable
1314
{
1415
/// <summary>
15-
///
16+
/// Constructor for MudSignaturePad.
1617
/// </summary>
1718
public MudSignaturePad()
1819
{
@@ -23,6 +24,7 @@ public MudSignaturePad()
2324
///
2425
/// </summary>
2526
protected string CanvasContainerClassname => new CssBuilder()
27+
.AddClass("mud-signature-pad-container")
2628
.AddClass(CanvasContainerClass)
2729
.Build();
2830

@@ -67,7 +69,7 @@ record JsOptionsStructRecord(decimal LineWidth, string LineCap, string LineJoin,
6769
public SignaturePadLocalizedStrings LocalizedStrings { get; set; } = new();
6870

6971
/// <summary>
70-
///
72+
/// Options for the signature pad.
7173
/// </summary>
7274
[Parameter]
7375
public SignaturePadOptions Options { get; set; } = new SignaturePadOptions();
@@ -79,13 +81,13 @@ record JsOptionsStructRecord(decimal LineWidth, string LineCap, string LineJoin,
7981
public string? ToolbarClass { get; set; }
8082

8183
/// <summary>
82-
///
84+
/// Style for the toolbar.
8385
/// </summary>
8486
[Parameter]
8587
public string? ToolbarStyle { get; set; }
8688

8789
/// <summary>
88-
///
90+
/// Outer class for the component.
8991
/// </summary>
9092
[Parameter]
9193
public string? OuterClass { get; set; }
@@ -107,16 +109,16 @@ record JsOptionsStructRecord(decimal LineWidth, string LineCap, string LineJoin,
107109
/// </summary>
108110
[Parameter]
109111
public string? CanvasContainerStyle { get; set; } =
110-
"height: 100%;width: 100%; box-shadow: rgb(204, 219, 232) 3px 3px 6px 0px inset, rgba(255, 255, 255, 0.5) -3px -3px 6px 1px inset;";
112+
"height: 100%;width: 100%; display: block; box-shadow: rgb(204, 219, 232) 3px 3px 6px 0px inset, rgba(255, 255, 255, 0.5) -3px -3px 6px 1px inset;";
111113

112114
/// <summary>
113-
///
115+
/// Shows the eraser toggle button.
114116
/// </summary>
115117
[Parameter]
116118
public bool ShowClear { get; set; } = true;
117119

118120
/// <summary>
119-
///
121+
///
120122
/// </summary>
121123
[Parameter]
122124
public bool ShowLineWidth { get; set; } = true;
@@ -128,7 +130,7 @@ record JsOptionsStructRecord(decimal LineWidth, string LineCap, string LineJoin,
128130
public bool ShowStrokeStyle { get; set; } = true;
129131

130132
/// <summary>
131-
///
133+
///
132134
/// </summary>
133135
[Parameter]
134136
public bool ShowDownload { get; set; } = true;
@@ -155,7 +157,7 @@ record JsOptionsStructRecord(decimal LineWidth, string LineCap, string LineJoin,
155157
///
156158
/// </summary>
157159
[Parameter]
158-
public Variant Variant { get; set; }
160+
public Variant Variant { get; set; } = MudGlobal.InputDefaults.Variant;
159161

160162
/// <summary>
161163
///
@@ -178,8 +180,9 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
178180
{
179181
if (firstRender)
180182
{
181-
await JsRuntime.InvokeVoidAsync("mudSignaturePad.addPad", _dotnetObjectRef, _reference,
182-
JsOptionsStruct);
183+
await JsRuntime.InvokeVoidAsync("mudSignaturePad.addPad", _dotnetObjectRef, _reference, JsOptionsStruct);
184+
await BrowserViewportService.SubscribeAsync(this, fireImmediately: true);
185+
183186
if (Value.Length > 0)
184187
{
185188
await PushImageUpdateToJsRuntime();
@@ -250,11 +253,13 @@ public async ValueTask DisposeAsync()
250253
try
251254
{
252255
await JsRuntime.InvokeVoidAsync("mudSignaturePad.disposePad", _reference);
256+
await BrowserViewportService.UnsubscribeAsync(this);
253257
}
254258
catch
255259
{
256260
//ignore
257261
}
262+
_dotnetObjectRef?.Dispose();
258263
}
259264

260265
/// <summary>
@@ -276,5 +281,25 @@ public async Task SignatureDataChangedAsync()
276281

277282
await ValueChanged.InvokeAsync(Value);
278283
}
284+
285+
Guid IBrowserViewportObserver.Id { get; } = Guid.NewGuid();
286+
287+
ResizeOptions IBrowserViewportObserver.ResizeOptions { get; } = new()
288+
{
289+
ReportRate = 200,
290+
NotifyOnBreakpointOnly = false
291+
};
292+
293+
/// <summary>
294+
///
295+
/// </summary>
296+
/// <param name="args"></param>
297+
/// <returns></returns>
298+
public async Task NotifyBrowserViewportChangeAsync(BrowserViewportEventArgs args)
299+
{
300+
await JsRuntime.InvokeVoidAsync("mudSignaturePad.setCanvasSize", _reference);
301+
}
302+
279303
}
304+
280305
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
.mud-signature-pad-container {
3+
touch-action: none;
4+
}

CodeBeam.MudBlazor.Extensions/Styles/MudExtensions.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,9 @@
384384
.mud-range-display {
385385
text-align: center; }
386386

387+
.mud-signature-pad-container {
388+
touch-action: none; }
389+
387390
.mud-splitter {
388391
display: grid;
389392
position: relative;

CodeBeam.MudBlazor.Extensions/Styles/MudExtensions.min.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CodeBeam.MudBlazor.Extensions/Styles/MudExtensions.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
@import 'components/_page';
44
@import 'components/_popup';
55
@import 'components/_rangeslider';
6+
@import 'components/_signaturepad';
67
@import 'components/_splitter';
78
@import 'components/_stepper';
89
@import 'components/_switchm3';

0 commit comments

Comments
 (0)