KeyboardUtils.cs 5.4 KB

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