TizenKeyboardDevice.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Avalonia.Input;
  7. using Tizen.NUI.Components;
  8. using Tizen.Uix.InputMethod;
  9. using static System.Net.Mime.MediaTypeNames;
  10. namespace Avalonia.Tizen.Platform.Input;
  11. internal class TizenKeyboardDevice : KeyboardDevice, IKeyboardDevice
  12. {
  13. private static readonly Dictionary<string, Key> SpecialKeys = new Dictionary<string, Key>
  14. {
  15. // Media keys
  16. { "XF86Red", Key.MediaRed },
  17. { "XF86Green", Key.MediaGreen },
  18. { "XF86Yellow", Key.MediaYellow },
  19. { "XF86Blue", Key.MediaBlue },
  20. { "XF86Info", Key.MediaInfo },
  21. { "XF86SimpleMenu", Key.MediaMenu },
  22. { "XF86Caption", Key.MediaSubtitle },
  23. { "XF86MTS", Key.None },
  24. { "XF86PictureSize", Key.None },
  25. { "XF86More", Key.MediaMore },
  26. { "XF86Search", Key.MediaSearch },
  27. { "XF863D", Key.None },
  28. { "XF86AudioRewind", Key.MediaPreviousTrack },
  29. { "XF86AudioPause", Key.MediaPlayPause },
  30. { "XF86AudioNext", Key.MediaNextTrack },
  31. { "XF86AudioRecord", Key.MediaRecord },
  32. { "XF86AudioPlay", Key.MediaPlayPause },
  33. { "XF86AudioStop", Key.MediaStop },
  34. { "XF86ChannelGuide", Key.MediaTvGuide },
  35. { "XF86SysMenu", Key.Apps },
  36. { "minus", Key.OemMinus },
  37. { "XF86PreviousChannel", Key.MediaPreviousChannel },
  38. { "XF86AudioMute", Key.VolumeMute },
  39. { "XF86ChannelList", Key.MediaChannelList },
  40. { "XF86RaiseChannel", Key.MediaChannelRaise },
  41. { "XF86LowerChannel", Key.MediaChannelLower },
  42. { "XF86AudioRaiseVolume", Key.VolumeUp },
  43. { "XF86AudioLowerVolume", Key.VolumeDown },
  44. { "XF86Display", Key.None },
  45. { "XF86PowerOff", Key.Sleep },
  46. { "XF86PlayBack", Key.MediaPlayPause },
  47. { "XF86Home", Key.MediaHome },
  48. { "XF86Back", Key.Escape }, // Back button should be mapped as Esc
  49. { "XF86Exit", Key.Cancel },
  50. { "Shift_L", Key.LeftShift },
  51. { "Control_L", Key.LeftCtrl },
  52. { "Alt_L", Key.LeftAlt },
  53. { "Super_L", Key.LWin },
  54. { "Alt_R", Key.RightAlt },
  55. { "Control_R", Key.RightCtrl },
  56. { "Shift_R", Key.RightShift },
  57. { "Super_R", Key.RWin },
  58. { "Menu", Key.Apps },
  59. { "Tab", Key.Tab },
  60. { "BackSpace", Key.Back },
  61. { "Return", Key.Return },
  62. { "Delete", Key.Delete },
  63. { "End", Key.End },
  64. { "Next", Key.Next },
  65. { "Prior", Key.Prior },
  66. { "Home", Key.Home },
  67. { "Insert", Key.Insert },
  68. { "Num_Lock", Key.NumLock },
  69. { "Left", Key.Left },
  70. { "Up", Key.Up },
  71. { "Right", Key.Right },
  72. { "Down", Key.Down },
  73. { "Escape", Key.Escape },
  74. { "Caps_Lock", Key.CapsLock },
  75. { "Pause", Key.Pause },
  76. { "Scroll_Lock", Key.Scroll },
  77. { "Scroll", Key.Scroll },
  78. };
  79. internal static Key GetSpecialKey(string key)
  80. {
  81. return SpecialKeys.TryGetValue(key, out var result) ? result : Key.None;
  82. }
  83. internal static Key GetAsciiKey(char keyCode) => keyCode switch
  84. {
  85. '`' or '~' => Key.Oem7,
  86. '0' or ')' => Key.D0,
  87. '1' or '!' => Key.D1,
  88. '2' or '@' => Key.D2,
  89. '3' or '#' => Key.D3,
  90. '4' or '$' => Key.D4,
  91. '5' or '%' => Key.D5,
  92. '6' or '^' => Key.D6,
  93. '7' or '&' => Key.D7,
  94. '8' or '*' => Key.D8,
  95. '9' or '(' => Key.D9,
  96. '\'' or '"' => Key.OemQuotes,
  97. '-' or '_' => Key.OemMinus,
  98. '=' or '+' => Key.OemPlus,
  99. '<' or ',' => Key.OemComma,
  100. '>' or '.' => Key.OemPeriod,
  101. ';' or ':' => Key.OemSemicolon,
  102. '/' or '?' => Key.OemQuestion,
  103. '[' or '{' => Key.OemOpenBrackets,
  104. ']' or '}' => Key.OemCloseBrackets,
  105. '\\' or '|' => Key.OemPipe,
  106. 'a' or 'A' => Key.A,
  107. 'b' or 'B' => Key.B,
  108. 'c' or 'C' => Key.C,
  109. 'd' or 'D' => Key.D,
  110. 'e' or 'E' => Key.E,
  111. 'f' or 'F' => Key.F,
  112. 'g' or 'G' => Key.G,
  113. 'h' or 'H' => Key.H,
  114. 'i' or 'I' => Key.I,
  115. 'j' or 'J' => Key.J,
  116. 'k' or 'K' => Key.K,
  117. 'l' or 'L' => Key.L,
  118. 'm' or 'M' => Key.M,
  119. 'n' or 'N' => Key.N,
  120. 'o' or 'O' => Key.O,
  121. 'p' or 'P' => Key.P,
  122. 'q' or 'Q' => Key.Q,
  123. 'r' or 'R' => Key.R,
  124. 's' or 'S' => Key.S,
  125. 't' or 'T' => Key.T,
  126. 'u' or 'U' => Key.U,
  127. 'v' or 'V' => Key.V,
  128. 'w' or 'W' => Key.W,
  129. 'x' or 'X' => Key.X,
  130. 'y' or 'Y' => Key.Y,
  131. 'z' or 'Z' => Key.Z,
  132. _ => Key.None
  133. };
  134. }