File size: 1,877 Bytes
18a519f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | using System;
using System.Runtime.InteropServices;
using UnityEngine.InputSystem.Utilities;
namespace UnityEngine.InputSystem.LowLevel
{
/// <summary>
/// Command to query the name of the current keyboard layout from a device.
/// </summary>
[StructLayout(LayoutKind.Explicit, Size = InputDeviceCommand.kBaseCommandSize + kMaxNameLength)]
public unsafe struct QueryKeyboardLayoutCommand : IInputDeviceCommandInfo
{
public static FourCC Type { get { return new FourCC('K', 'B', 'L', 'T'); } }
internal const int kMaxNameLength = 256;
[FieldOffset(0)]
public InputDeviceCommand baseCommand;
[FieldOffset(InputDeviceCommand.kBaseCommandSize)]
public fixed byte nameBuffer[kMaxNameLength];
/// <summary>
/// Read the current keyboard layout name from <see cref="nameBuffer"/>.
/// </summary>
/// <returns></returns>
public string ReadLayoutName()
{
fixed(QueryKeyboardLayoutCommand * thisPtr = &this)
return StringHelpers.ReadStringFromBuffer(new IntPtr(thisPtr->nameBuffer), kMaxNameLength);
}
/// <summary>
/// Write the given string to <see cref="nameBuffer"/>.
/// </summary>
/// <param name="name">Keyboard layout name.</param>
public void WriteLayoutName(string name)
{
fixed(QueryKeyboardLayoutCommand * thisPtr = &this)
StringHelpers.WriteStringToBuffer(name, new IntPtr(thisPtr->nameBuffer), kMaxNameLength);
}
public FourCC typeStatic => Type;
public static QueryKeyboardLayoutCommand Create()
{
return new QueryKeyboardLayoutCommand
{
baseCommand = new InputDeviceCommand(Type, InputDeviceCommand.kBaseCommandSize + kMaxNameLength)
};
}
}
}
|