| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- using System;
- namespace Ryujinx.HLE.HOS.Services.Hid
- {
- public class TouchDevice : BaseDevice
- {
- public TouchDevice(Switch device, bool active) : base(device, active) { }
- public void Update(params TouchPoint[] points)
- {
- ref ShMemTouchScreen touchscreen = ref _device.Hid.SharedMemory.TouchScreen;
- int currentIndex = UpdateEntriesHeader(ref touchscreen.Header, out int previousIndex);
- if (!Active)
- {
- return;
- }
- ref TouchScreenState currentEntry = ref touchscreen.Entries[currentIndex];
- TouchScreenState previousEntry = touchscreen.Entries[previousIndex];
- currentEntry.SampleTimestamp = previousEntry.SampleTimestamp + 1;
- currentEntry.SampleTimestamp2 = previousEntry.SampleTimestamp2 + 1;
- currentEntry.NumTouches = (ulong)points.Length;
- int pointsLength = Math.Min(points.Length, currentEntry.Touches.Length);
- for (int i = 0; i < pointsLength; ++i)
- {
- TouchPoint pi = points[i];
- currentEntry.Touches[i] = new TouchScreenStateData
- {
- SampleTimestamp = currentEntry.SampleTimestamp,
- X = pi.X,
- Y = pi.Y,
- TouchIndex = (uint)i,
- DiameterX = pi.DiameterX,
- DiameterY = pi.DiameterY,
- Angle = pi.Angle
- };
- }
- }
- }
- }
|