Add TouchScreen Manager (#2333)

This commit is contained in:
emmauss 2021-06-14 06:42:55 +00:00 committed by GitHub
parent b898bc84ce
commit bfcc6a8ad6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 418 additions and 83 deletions

View file

@ -6,6 +6,7 @@ namespace Ryujinx.Input.HLE
{
public IGamepadDriver KeyboardDriver { get; private set; }
public IGamepadDriver GamepadDriver { get; private set; }
public IGamepadDriver MouseDriver { get; private set; }
public InputManager(IGamepadDriver keyboardDriver, IGamepadDriver gamepadDriver)
{
@ -13,10 +14,27 @@ namespace Ryujinx.Input.HLE
GamepadDriver = gamepadDriver;
}
public void SetMouseDriver(IGamepadDriver mouseDriver)
{
MouseDriver?.Dispose();
MouseDriver = mouseDriver;
}
public NpadManager CreateNpadManager()
{
return new NpadManager(KeyboardDriver, GamepadDriver);
}
public TouchScreenManager CreateTouchScreenManager()
{
if (MouseDriver == null)
{
throw new InvalidOperationException("Mouse Driver has not been initialized.");
}
return new TouchScreenManager(MouseDriver.GetGamepad("0") as IMouse);
}
protected virtual void Dispose(bool disposing)
{
@ -24,6 +42,7 @@ namespace Ryujinx.Input.HLE
{
KeyboardDriver?.Dispose();
GamepadDriver?.Dispose();
MouseDriver?.Dispose();
}
}

View file

@ -0,0 +1,57 @@
using Ryujinx.HLE;
using Ryujinx.HLE.HOS.Services.Hid;
using System;
namespace Ryujinx.Input.HLE
{
public class TouchScreenManager : IDisposable
{
private readonly IMouse _mouse;
private Switch _device;
public TouchScreenManager(IMouse mouse)
{
_mouse = mouse;
}
public void Initialize(Switch device)
{
_device = device;
}
public bool Update(bool isFocused, float aspectRatio = 0)
{
if (!isFocused)
{
_device.Hid.Touchscreen.Update();
return false;
}
if (aspectRatio > 0)
{
var snapshot = IMouse.GetMouseStateSnapshot(_mouse);
var touchPosition = IMouse.GetTouchPosition(snapshot.Position, _mouse.ClientSize, aspectRatio);
TouchPoint currentPoint = new TouchPoint
{
X = (uint)touchPosition.X,
Y = (uint)touchPosition.Y,
// Placeholder values till more data is acquired
DiameterX = 10,
DiameterY = 10,
Angle = 90
};
_device.Hid.Touchscreen.Update(currentPoint);
return true;
}
return false;
}
public void Dispose() { }
}
}