mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-09-09 19:28:52 +00:00
Fix Avalonia Native MouseWheel-Support (ryubing/ryujinx!116)
See merge request ryubing/ryujinx!116
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
|
using Avalonia.Threading;
|
||||||
using Ryujinx.Input;
|
using Ryujinx.Input;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -16,6 +17,8 @@ namespace Ryujinx.Ava.Input
|
|||||||
private bool _isDisposed;
|
private bool _isDisposed;
|
||||||
private Size _size;
|
private Size _size;
|
||||||
private readonly TopLevel _window;
|
private readonly TopLevel _window;
|
||||||
|
private DispatcherTimer _scrollStopTimer;
|
||||||
|
private const int _dispatchTimerMS = 100;
|
||||||
|
|
||||||
public bool[] PressedButtons { get; }
|
public bool[] PressedButtons { get; }
|
||||||
public Vector2 CurrentPosition { get; private set; }
|
public Vector2 CurrentPosition { get; private set; }
|
||||||
@@ -39,6 +42,11 @@ namespace Ryujinx.Ava.Input
|
|||||||
_window.PointerReleased += Parent_PointerReleasedEvent;
|
_window.PointerReleased += Parent_PointerReleasedEvent;
|
||||||
_window.PointerWheelChanged += Parent_PointerWheelChanged;
|
_window.PointerWheelChanged += Parent_PointerWheelChanged;
|
||||||
|
|
||||||
|
_scrollStopTimer = new DispatcherTimer
|
||||||
|
{
|
||||||
|
Interval = TimeSpan.FromMilliseconds(_dispatchTimerMS)
|
||||||
|
};
|
||||||
|
|
||||||
PressedButtons = new bool[(int)MouseButton.Count];
|
PressedButtons = new bool[(int)MouseButton.Count];
|
||||||
|
|
||||||
_size = new Size((int)parent.Bounds.Width, (int)parent.Bounds.Height);
|
_size = new Size((int)parent.Bounds.Width, (int)parent.Bounds.Height);
|
||||||
@@ -62,10 +70,26 @@ namespace Ryujinx.Ava.Input
|
|||||||
{
|
{
|
||||||
_size = new Size((int)rect.Width, (int)rect.Height);
|
_size = new Size((int)rect.Width, (int)rect.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void HandleScrollStopped()
|
||||||
|
{
|
||||||
|
Scroll = new Vector2(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
private void Parent_PointerWheelChanged(object o, PointerWheelEventArgs args)
|
private void Parent_PointerWheelChanged(object o, PointerWheelEventArgs args)
|
||||||
{
|
{
|
||||||
Scroll = new Vector2((float)args.Delta.X, (float)args.Delta.Y);
|
Scroll = new Vector2((float)args.Delta.X, (float)args.Delta.Y);
|
||||||
|
|
||||||
|
_scrollStopTimer?.Stop();
|
||||||
|
|
||||||
|
_scrollStopTimer.Tick += (_, __) =>
|
||||||
|
{
|
||||||
|
_scrollStopTimer.Stop();
|
||||||
|
|
||||||
|
HandleScrollStopped();
|
||||||
|
|
||||||
|
};
|
||||||
|
_scrollStopTimer.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Parent_PointerReleasedEvent(object o, PointerReleasedEventArgs args)
|
private void Parent_PointerReleasedEvent(object o, PointerReleasedEventArgs args)
|
||||||
|
Reference in New Issue
Block a user