44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
using Microsoft.AspNetCore.Components;
|
|
|
|
namespace DeepDrftPublic.Client.Controls.AudioPlayerBar;
|
|
|
|
/// <summary>
|
|
/// Centre zone of the player: seek slider over the spectrum visualizer.
|
|
/// Owns the pointer-gesture seek logic (drag-to-seek) in one place so it is no
|
|
/// longer duplicated inline between the desktop and mobile branches of the parent.
|
|
/// </summary>
|
|
public partial class PlayerSeekZone : ComponentBase
|
|
{
|
|
private double _seekPosition;
|
|
|
|
[Parameter] public double DisplayTime { get; set; }
|
|
[Parameter] public double? Duration { get; set; }
|
|
[Parameter] public bool CanSeek { get; set; }
|
|
[Parameter] public EventCallback OnSeekStart { get; set; }
|
|
[Parameter] public EventCallback<double> OnSeekEnd { get; set; }
|
|
[Parameter] public EventCallback<double> OnSeekChange { get; set; }
|
|
[Parameter] public string? Class { get; set; }
|
|
|
|
private async Task HandlePointerDown()
|
|
{
|
|
_seekPosition = DisplayTime;
|
|
await OnSeekStart.InvokeAsync();
|
|
}
|
|
|
|
private async Task HandlePointerUp()
|
|
{
|
|
await OnSeekEnd.InvokeAsync(_seekPosition);
|
|
}
|
|
|
|
private async Task HandlePointerLeave()
|
|
{
|
|
await OnSeekEnd.InvokeAsync(_seekPosition);
|
|
}
|
|
|
|
private async Task HandleValueChanged(double value)
|
|
{
|
|
_seekPosition = value;
|
|
await OnSeekChange.InvokeAsync(value);
|
|
}
|
|
}
|