aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/Input.cpp
blob: a5e25dc8369b771c4d4c69e88707a3a665560f19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include "cru/platform/gui/Input.h"

#include <array>
#include <string>
#include <string_view>

namespace cru::platform::gui {
const std::array<std::string_view, static_cast<int>(KeyCode::NumPad9) + 1>
    key_code_string_list{"Unknown",
                         "LeftButton",
                         "MiddleButton",
                         "RightButton",
                         "Escape",
                         "F1",
                         "F2",
                         "F3",
                         "F4",
                         "F5",
                         "F6",
                         "F7",
                         "F8",
                         "F9",
                         "F10",
                         "F11",
                         "F12",
                         "N0",
                         "N1",
                         "N2",
                         "N3",
                         "N4",
                         "N5",
                         "N6",
                         "N7",
                         "N8",
                         "N9",
                         "A",
                         "B",
                         "C",
                         "D",
                         "E",
                         "F",
                         "G",
                         "H",
                         "I",
                         "J",
                         "K",
                         "L",
                         "M",
                         "N",
                         "O",
                         "P",
                         "Q",
                         "R",
                         "S",
                         "T",
                         "U",
                         "V",
                         "W",
                         "X",
                         "Y",
                         "Z",
                         "GraveAccent",
                         "Tab",
                         "CapsLock",
                         "LeftShift",
                         "LeftCtrl",
                         "LeftSuper",
                         "LeftAlt",
                         "Minus",
                         "Equal",
                         "Backspace",
                         "LeftSquareBracket",
                         "RightSquareBracket",
                         "BackSlash",
                         "Semicolon",
                         "Quote",
                         "Comma",
                         "Period",
                         "Slash",
                         "RightShift",
                         "RightCtrl",
                         "RightSuper",
                         "RightAlt",
                         "Insert",
                         "Delete",
                         "Home",
                         "End",
                         "PageUp",
                         "PageDown",
                         "Up",
                         "Left",
                         "Down",
                         "Right",
                         "PrintScreen",
                         "ScrollLock",
                         "Pause",
                         "NumPad0",
                         "NumPad1",
                         "NumPad2",
                         "NumPad3",
                         "NumPad4",
                         "NumPad5",
                         "NumPad6",
                         "NumPad7",
                         "NumPad8",
                         "NumPad9"};

std::string ToString(KeyCode key_code) {
  if (static_cast<int>(key_code) < 0 ||
      static_cast<int>(key_code) >=
          static_cast<int>(key_code_string_list.size()))
    return "UNKNOWN_KEYCODENAME";

  return std::string(key_code_string_list[static_cast<int>(key_code)]);
}

std::string ToString(KeyModifier key_modifier, std::string_view separator) {
  std::vector<std::string> list;
  if (key_modifier & KeyModifiers::Shift) {
    list.push_back("Shift");
  }

  if (key_modifier & KeyModifiers::Ctrl) {
    list.push_back("Ctrl");
  }

  if (key_modifier & KeyModifiers::Alt) {
    list.push_back("Shift");
  }

  if (list.empty()) return "";
  std::string result = list.front();
  for (auto iter = list.cbegin() + 1; iter != list.cend(); ++iter) {
    result += separator;
    result += *iter;
  }

  return result;
}
}  // namespace cru::platform::gui