InputEvent.cpp 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. // zlib open source license
  2. //
  3. // Copyright (c) 2018 to 2022 David Forsgren Piuva
  4. //
  5. // This software is provided 'as-is', without any express or implied
  6. // warranty. In no event will the authors be held liable for any damages
  7. // arising from the use of this software.
  8. //
  9. // Permission is granted to anyone to use this software for any purpose,
  10. // including commercial applications, and to alter it and redistribute it
  11. // freely, subject to the following restrictions:
  12. //
  13. // 1. The origin of this software must not be misrepresented; you must not
  14. // claim that you wrote the original software. If you use this software
  15. // in a product, an acknowledgment in the product documentation would be
  16. // appreciated but is not required.
  17. //
  18. // 2. Altered source versions must be plainly marked as such, and must not be
  19. // misrepresented as being the original software.
  20. //
  21. // 3. This notice may not be removed or altered from any source
  22. // distribution.
  23. #include "InputEvent.h"
  24. using namespace dsr;
  25. String dsr::getName(DsrKey v) {
  26. if (v == DsrKey_Unhandled) {
  27. return U"Other";
  28. } else if (v == DsrKey_Escape) {
  29. return U"Escape";
  30. } else if (v == DsrKey_F1) {
  31. return U"F1";
  32. } else if (v == DsrKey_F2) {
  33. return U"F2";
  34. } else if (v == DsrKey_F3) {
  35. return U"F3";
  36. } else if (v == DsrKey_F4) {
  37. return U"F4";
  38. } else if (v == DsrKey_F5) {
  39. return U"F5";
  40. } else if (v == DsrKey_F6) {
  41. return U"F6";
  42. } else if (v == DsrKey_F7) {
  43. return U"F7";
  44. } else if (v == DsrKey_F8) {
  45. return U"F8";
  46. } else if (v == DsrKey_F9) {
  47. return U"F9";
  48. } else if (v == DsrKey_F10) {
  49. return U"F10";
  50. } else if (v == DsrKey_F11) {
  51. return U"F11";
  52. } else if (v == DsrKey_F12) {
  53. return U"F12";
  54. } else if (v == DsrKey_Pause) {
  55. return U"Pause";
  56. } else if (v == DsrKey_Space) {
  57. return U"Space";
  58. } else if (v == DsrKey_Tab) {
  59. return U"Tab";
  60. } else if (v == DsrKey_Return) {
  61. return U"Return";
  62. } else if (v == DsrKey_BackSpace) {
  63. return U"BackSpace";
  64. } else if (v == DsrKey_Shift) {
  65. return U"Shift";
  66. } else if (v == DsrKey_Control) {
  67. return U"Control";
  68. } else if (v == DsrKey_Alt) {
  69. return U"Alt";
  70. } else if (v == DsrKey_Delete) {
  71. return U"Delete";
  72. } else if (v == DsrKey_LeftArrow) {
  73. return U"LeftArrow";
  74. } else if (v == DsrKey_RightArrow) {
  75. return U"RightArrow";
  76. } else if (v == DsrKey_UpArrow) {
  77. return U"UpArrow";
  78. } else if (v == DsrKey_DownArrow) {
  79. return U"DownArrow";
  80. } else if (v == DsrKey_0) {
  81. return U"0";
  82. } else if (v == DsrKey_1) {
  83. return U"1";
  84. } else if (v == DsrKey_2) {
  85. return U"2";
  86. } else if (v == DsrKey_3) {
  87. return U"3";
  88. } else if (v == DsrKey_4) {
  89. return U"4";
  90. } else if (v == DsrKey_5) {
  91. return U"5";
  92. } else if (v == DsrKey_6) {
  93. return U"6";
  94. } else if (v == DsrKey_7) {
  95. return U"7";
  96. } else if (v == DsrKey_8) {
  97. return U"8";
  98. } else if (v == DsrKey_9) {
  99. return U"9";
  100. } else if (v == DsrKey_A) {
  101. return U"A";
  102. } else if (v == DsrKey_B) {
  103. return U"B";
  104. } else if (v == DsrKey_C) {
  105. return U"C";
  106. } else if (v == DsrKey_D) {
  107. return U"D";
  108. } else if (v == DsrKey_E) {
  109. return U"E";
  110. } else if (v == DsrKey_F) {
  111. return U"F";
  112. } else if (v == DsrKey_G) {
  113. return U"G";
  114. } else if (v == DsrKey_H) {
  115. return U"H";
  116. } else if (v == DsrKey_I) {
  117. return U"I";
  118. } else if (v == DsrKey_J) {
  119. return U"J";
  120. } else if (v == DsrKey_K) {
  121. return U"K";
  122. } else if (v == DsrKey_L) {
  123. return U"L";
  124. } else if (v == DsrKey_M) {
  125. return U"M";
  126. } else if (v == DsrKey_N) {
  127. return U"N";
  128. } else if (v == DsrKey_O) {
  129. return U"O";
  130. } else if (v == DsrKey_P) {
  131. return U"P";
  132. } else if (v == DsrKey_Q) {
  133. return U"Q";
  134. } else if (v == DsrKey_R) {
  135. return U"R";
  136. } else if (v == DsrKey_S) {
  137. return U"S";
  138. } else if (v == DsrKey_T) {
  139. return U"T";
  140. } else if (v == DsrKey_U) {
  141. return U"U";
  142. } else if (v == DsrKey_V) {
  143. return U"V";
  144. } else if (v == DsrKey_W) {
  145. return U"W";
  146. } else if (v == DsrKey_X) {
  147. return U"X";
  148. } else if (v == DsrKey_Y) {
  149. return U"Y";
  150. } else if (v == DsrKey_Z) {
  151. return U"Z";
  152. } else if (v == DsrKey_Insert) {
  153. return U"Insert";
  154. } else if (v == DsrKey_Home) {
  155. return U"Home";
  156. } else if (v == DsrKey_End) {
  157. return U"End";
  158. } else if (v == DsrKey_PageUp) {
  159. return U"PageUp";
  160. } else if (v == DsrKey_PageDown) {
  161. return U"PageDown";
  162. } else {
  163. return U"Invalid virtual key code";
  164. }
  165. }
  166. String& dsr::string_toStreamIndented(String& target, const DsrKey& source, const ReadableString& indentation) {
  167. string_append(target, indentation, getName(source));
  168. return target;
  169. }
  170. String dsr::getName(KeyboardEventType v) {
  171. if (v == KeyboardEventType::KeyDown) {
  172. return U"KeyDown"; // Pressing down a key on the keyboard.
  173. } else if (v == KeyboardEventType::KeyUp) {
  174. return U"KeyUp"; // Releasing a key on the keyboard.
  175. } else if (v == KeyboardEventType::KeyType) {
  176. return U"KeyType"; // The event that is sent repeatedly after holding down a character for a while.
  177. } else {
  178. return U"Invalid keyboard event type";
  179. }
  180. }
  181. String& dsr::string_toStreamIndented(String& target, const KeyboardEventType& source, const ReadableString& indentation) {
  182. string_append(target, indentation, getName(source));
  183. return target;
  184. }
  185. String dsr::getName(MouseKeyEnum v) {
  186. if (v == MouseKeyEnum::NoKey) {
  187. return U"NoKey"; // For mouse move events.
  188. } else if (v == MouseKeyEnum::Left) {
  189. return U"Left"; // For mouse up and down events.
  190. } else if (v == MouseKeyEnum::Right) {
  191. return U"Right"; // For mouse up and down events.
  192. } else if (v == MouseKeyEnum::Middle) {
  193. return U"Middle"; // For mouse up and down events.
  194. } else if (v == MouseKeyEnum::ScrollUp) {
  195. return U"ScrollUp"; // For scroll events.
  196. } else if (v == MouseKeyEnum::ScrollDown) {
  197. return U"ScrollDown"; // For scroll events.
  198. } else {
  199. return U"Invalid mouse key enumeration";
  200. }
  201. }
  202. String& dsr::string_toStreamIndented(String& target, const MouseKeyEnum& source, const ReadableString& indentation) {
  203. string_append(target, indentation, getName(source));
  204. return target;
  205. }
  206. String dsr::getName(MouseEventType v) {
  207. if (v == MouseEventType::MouseDown) {
  208. return U"MouseDown";
  209. } else if (v == MouseEventType::MouseUp) {
  210. return U"MouseUp";
  211. } else if (v == MouseEventType::MouseMove) {
  212. return U"MouseMove";
  213. } else if (v == MouseEventType::Scroll) {
  214. return U"Scroll";
  215. } else {
  216. return U"Invalid mouse event type";
  217. }
  218. }
  219. String& dsr::string_toStreamIndented(String& target, const MouseEventType& source, const ReadableString& indentation) {
  220. string_append(target, indentation, getName(source));
  221. return target;
  222. }
  223. String dsr::getName(WindowEventType v) {
  224. if (v == WindowEventType::Close) {
  225. return U"Close";
  226. } else if (v == WindowEventType::Redraw) {
  227. return U"Redraw";
  228. } else {
  229. return U"Invalid window event type";
  230. }
  231. }
  232. String& dsr::string_toStreamIndented(String& target, const WindowEventType& source, const ReadableString& indentation) {
  233. string_append(target, indentation, getName(source));
  234. return target;
  235. }
  236. String& dsr::string_toStreamIndented(String& target, const KeyboardEvent& source, const ReadableString& indentation) {
  237. string_append(target, indentation, U"KeyboardEvent(");
  238. string_append(target, U"keyboardEventType = ", source.keyboardEventType);
  239. string_append(target, U", dsrKey = ", source.dsrKey);
  240. string_append(target, U", character = ", (uint32_t)source.character);
  241. string_append(target, U")");
  242. return target;
  243. }
  244. String& dsr::string_toStreamIndented(String& target, const MouseEvent& source, const ReadableString& indentation) {
  245. string_append(target, indentation, U"MouseEvent(");
  246. string_append(target, U"mouseEventType = ", source.mouseEventType);
  247. // TODO: Assert that only the keys allowed by the mouse event type are given.
  248. string_append(target, U", key = ", source.key);
  249. string_append(target, U", position = ", source.position);
  250. string_append(target, U")");
  251. return target;
  252. }
  253. String& dsr::string_toStreamIndented(String& target, const WindowEvent& source, const ReadableString& indentation) {
  254. string_append(target, indentation, U"WindowEvent(");
  255. string_append(target, U"windowEventType = ", source.windowEventType);
  256. // TODO: Assert that width and height are zero when not used by the event type.
  257. string_append(target, U", width = ", source.width);
  258. string_append(target, U", height = ", source.height);
  259. string_append(target, U")");
  260. return target;
  261. }