60 lines
1.6 KiB
C#
60 lines
1.6 KiB
C#
using Avalonia.Controls;
|
|
using Avalonia.Input;
|
|
using Avalonia.Interactivity;
|
|
using Harmonia.UI.ViewModels;
|
|
|
|
namespace Harmonia.UI.Views;
|
|
|
|
public partial class PlaybackBar : UserControl
|
|
{
|
|
private readonly PlaybackBarViewModel _viewModel;
|
|
|
|
public PlaybackBar()
|
|
{
|
|
InitializeComponent();
|
|
_viewModel = (PlaybackBarViewModel)DataContext!;
|
|
}
|
|
|
|
private void Slider_Loaded(object? sender, RoutedEventArgs e)
|
|
{
|
|
if (sender is not Slider slider)
|
|
return;
|
|
|
|
slider.AddHandler(PointerPressedEvent, OnSliderPointerPressed, RoutingStrategies.Tunnel);
|
|
slider.AddHandler(PointerReleasedEvent, OnSliderPointerReleased, RoutingStrategies.Tunnel);
|
|
}
|
|
|
|
private void OnSliderPointerPressed(object? sender, PointerPressedEventArgs e)
|
|
{
|
|
if (sender is not Slider slider)
|
|
return;
|
|
|
|
PointerPoint currentPoint = e.GetCurrentPoint(slider);
|
|
|
|
if (currentPoint.Properties.IsLeftButtonPressed == false)
|
|
return;
|
|
|
|
_viewModel.IsPositionChangeInProgress = true;
|
|
}
|
|
|
|
private void OnSliderPointerReleased(object? sender, PointerReleasedEventArgs e)
|
|
{
|
|
if (sender is not Slider slider)
|
|
return;
|
|
|
|
_viewModel.CurrentPosition = slider.Value;
|
|
_viewModel.IsPositionChangeInProgress = false;
|
|
}
|
|
|
|
private void VolumeSlider_PointerWheelChanged(object? sender, PointerWheelEventArgs e)
|
|
{
|
|
double mouseWheelDelta = e.Delta.Y;
|
|
|
|
if (mouseWheelDelta == 0)
|
|
return;
|
|
|
|
double delta = mouseWheelDelta > 0 ? .02 : -.02;
|
|
|
|
_viewModel.Volume += delta;
|
|
}
|
|
} |