forked from Mirror/Ryujinx
3443023a08
* hid: Rewrite shared memory management This entirely rewrite our ancient (and original) HID shared memory interface to be more usable and accurate. HID update logics were updated to reflect those changes but should work still the same way it previously did. This need heavy testing just in case to avoid possible regressions. * Silence warnings * Address gdkchan's comments * Address Ac_K's comments * Address one missing nit
35 lines
No EOL
1.2 KiB
C#
35 lines
No EOL
1.2 KiB
C#
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common;
|
|
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse;
|
|
|
|
namespace Ryujinx.HLE.HOS.Services.Hid
|
|
{
|
|
public class MouseDevice : BaseDevice
|
|
{
|
|
public MouseDevice(Switch device, bool active) : base(device, active) { }
|
|
|
|
public void Update(int mouseX, int mouseY, uint buttons = 0, int scrollX = 0, int scrollY = 0)
|
|
{
|
|
ref RingLifo<MouseState> lifo = ref _device.Hid.SharedMemory.Mouse;
|
|
|
|
ref MouseState previousEntry = ref lifo.GetCurrentEntryRef();
|
|
|
|
MouseState newState = new MouseState()
|
|
{
|
|
SamplingNumber = previousEntry.SamplingNumber + 1,
|
|
};
|
|
|
|
if (Active)
|
|
{
|
|
newState.Buttons = (MouseButton)buttons;
|
|
newState.X = mouseX;
|
|
newState.Y = mouseY;
|
|
newState.DeltaX = mouseX - previousEntry.DeltaX;
|
|
newState.DeltaY = mouseY - previousEntry.DeltaY;
|
|
newState.WheelDeltaX = scrollX;
|
|
newState.WheelDeltaY = scrollY;
|
|
}
|
|
|
|
lifo.Write(ref newState);
|
|
}
|
|
}
|
|
} |