KeyboardUtils.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. //-----------------------------------------------------------------------------
  2. // KeyboardUtils.cs
  3. //
  4. // Microsoft XNA Community Game Platform
  5. // Copyright (C) Microsoft Corporation. All rights reserved.
  6. //-----------------------------------------------------------------------------
  7. using System;
  8. using System.Collections.Generic;
  9. using Microsoft.Xna.Framework.Input;
  10. namespace PerformanceMeasuring.GameDebugTools
  11. {
  12. /// <summary>
  13. /// Helper class for keyboard input.
  14. /// </summary>
  15. public static class KeyboardUtils
  16. {
  17. /// <summary>
  18. /// Character pair class that holds normal character and character with
  19. /// shift key pressed.
  20. /// </summary>
  21. class CharPair
  22. {
  23. public CharPair(char normalChar, Nullable<char> shiftChar)
  24. {
  25. this.NormalChar = normalChar;
  26. this.ShiftChar = shiftChar;
  27. }
  28. public char NormalChar;
  29. public Nullable<char> ShiftChar;
  30. }
  31. // key:Keys, value:CharPair
  32. static private Dictionary<Keys, CharPair> keyMap =
  33. new Dictionary<Keys, CharPair>();
  34. /// <summary>
  35. /// Gets a character from key information.
  36. /// </summary>
  37. /// <param name="key">Pressing key</param>
  38. /// <param name="shitKeyPressed">Is shift key pressed?</param>
  39. /// <param name="character">Converted character from key input.</param>
  40. /// <returns>Returns true when it gets a character</returns>
  41. public static bool KeyToString(Keys key, bool shitKeyPressed,
  42. out char character)
  43. {
  44. bool result = false;
  45. character = ' ';
  46. CharPair charPair;
  47. if ((Keys.A <= key && key <= Keys.Z) || key == Keys.Space)
  48. {
  49. // Use as is if it is A~Z, or Space key.
  50. character = (shitKeyPressed) ? (char)key : Char.ToLower((char)key);
  51. result = true;
  52. }
  53. else if (keyMap.TryGetValue(key, out charPair))
  54. {
  55. // Otherwise, convert by key map.
  56. if (!shitKeyPressed)
  57. {
  58. character = charPair.NormalChar;
  59. result = true;
  60. }
  61. else if (charPair.ShiftChar.HasValue)
  62. {
  63. character = charPair.ShiftChar.Value;
  64. result = true;
  65. }
  66. }
  67. return result;
  68. }
  69. static KeyboardUtils()
  70. {
  71. InitializeKeyMap();
  72. }
  73. /// <summary>
  74. /// Initialize character map.
  75. /// </summary>
  76. static void InitializeKeyMap()
  77. {
  78. // First row of US keyboard.
  79. AddKeyMap(Keys.OemTilde, "`~");
  80. AddKeyMap(Keys.D1, "1!");
  81. AddKeyMap(Keys.D2, "2@");
  82. AddKeyMap(Keys.D3, "3#");
  83. AddKeyMap(Keys.D4, "4$");
  84. AddKeyMap(Keys.D5, "5%");
  85. AddKeyMap(Keys.D6, "6^");
  86. AddKeyMap(Keys.D7, "7&");
  87. AddKeyMap(Keys.D8, "8*");
  88. AddKeyMap(Keys.D9, "9(");
  89. AddKeyMap(Keys.D0, "0)");
  90. AddKeyMap(Keys.OemMinus, "-_");
  91. AddKeyMap(Keys.OemPlus, "=+");
  92. // Second row of US keyboard.
  93. AddKeyMap(Keys.OemOpenBrackets, "[{");
  94. AddKeyMap(Keys.OemCloseBrackets, "]}");
  95. AddKeyMap(Keys.OemPipe, "\\|");
  96. // Third row of US keyboard.
  97. AddKeyMap(Keys.OemSemicolon, ";:");
  98. AddKeyMap(Keys.OemQuotes, "'\"");
  99. AddKeyMap(Keys.OemComma, ",<");
  100. AddKeyMap(Keys.OemPeriod, ".>");
  101. AddKeyMap(Keys.OemQuestion, "/?");
  102. // Keypad keys of US keyboard.
  103. AddKeyMap(Keys.NumPad1, "1");
  104. AddKeyMap(Keys.NumPad2, "2");
  105. AddKeyMap(Keys.NumPad3, "3");
  106. AddKeyMap(Keys.NumPad4, "4");
  107. AddKeyMap(Keys.NumPad5, "5");
  108. AddKeyMap(Keys.NumPad6, "6");
  109. AddKeyMap(Keys.NumPad7, "7");
  110. AddKeyMap(Keys.NumPad8, "8");
  111. AddKeyMap(Keys.NumPad9, "9");
  112. AddKeyMap(Keys.NumPad0, "0");
  113. AddKeyMap(Keys.Add, "+");
  114. AddKeyMap(Keys.Divide, "/");
  115. AddKeyMap(Keys.Multiply, "*");
  116. AddKeyMap(Keys.Subtract, "-");
  117. AddKeyMap(Keys.Decimal, ".");
  118. }
  119. /// <summary>
  120. /// Added key and character map.
  121. /// </summary>
  122. /// <param name="key">Keyboard key/param>
  123. /// <param name="charPair">
  124. /// Character, If it is two characters, first character is for not holding the shift key,
  125. /// and the second character for holding the shift key.</param>
  126. static void AddKeyMap(Keys key, string charPair)
  127. {
  128. char char1 = charPair[0];
  129. Nullable<char> char2 = null;
  130. if (charPair.Length > 1)
  131. char2 = charPair[1];
  132. keyMap.Add(key, new CharPair(char1, char2));
  133. }
  134. }
  135. }