No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

QueryKeyboardLayoutCommand.cs 1.8KB

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