SDL Window Engine  20200905
swe_inputs_keys.h
1 /***************************************************************************
2  * Copyright (C) 2017 by SWE team <sdl.window.engine@gmail.com> *
3  * *
4  * Part of the SWE: SDL Window Engine: *
5  * https://github.com/AndreyBarmaley/sdl-window-engine *
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 3 of the License, or *
10  * (at your option) any later version. *
11  * *
12  * This program is distributed in the hope that it will be useful, *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15  * GNU General Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with this program; if not, write to the *
19  * Free Software Foundation, Inc., *
20  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
21  ***************************************************************************/
22 
23 #ifndef _SWE_KEYS_
24 #define _SWE_KEYS_
25 
26 #include <string>
27 #include "swe_types.h"
28 
30 namespace SWE
31 {
32 
33 #ifdef SWE_SDL12
34  typedef SDL_keysym SDL_Keysym;
35 #endif
36 
37  struct KeyName
38  {
39  int key;
40  const char* name;
41 
42  bool iskey(int v) const;
43  bool isname(const std::string &) const;
44 
45  KeyName() : key(0), name(nullptr) {}
46  KeyName(int k, const char* v) : key(k), name(v) {}
47  };
48 
50  namespace Key
51  {
53  enum
54  {
55  NONE = SDLK_UNKNOWN,
56  BACKSPACE = SDLK_BACKSPACE,
57  TAB = SDLK_TAB,
58  CLEAR = SDLK_CLEAR,
59  RETURN = SDLK_RETURN,
60  PAUSE = SDLK_PAUSE,
61  ESCAPE = SDLK_ESCAPE,
62  SPACE = SDLK_SPACE,
63  EXCLAIM = SDLK_EXCLAIM,
64  QUOTEDBL = SDLK_QUOTEDBL,
65  HASH = SDLK_HASH,
66  DOLLAR = SDLK_DOLLAR,
67  AMPERSAND = SDLK_AMPERSAND,
68  QUOTE = SDLK_QUOTE,
69  LEFTPAREN = SDLK_LEFTPAREN,
70  RIGHTPAREN = SDLK_RIGHTPAREN,
71  ASTERISK = SDLK_ASTERISK,
72  PLUS = SDLK_PLUS,
73  COMMA = SDLK_COMMA,
74  MINUS = SDLK_MINUS,
75  PERIOD = SDLK_PERIOD,
76  SLASH = SDLK_SLASH,
77  K0 = SDLK_0,
78  K1 = SDLK_1,
79  K2 = SDLK_2,
80  K3 = SDLK_3,
81  K4 = SDLK_4,
82  K5 = SDLK_5,
83  K6 = SDLK_6,
84  K7 = SDLK_7,
85  K8 = SDLK_8,
86  K9 = SDLK_9,
87  COLON = SDLK_COLON,
88  SEMICOLON = SDLK_SEMICOLON,
89  LESS = SDLK_LESS,
90  EQUALS = SDLK_EQUALS,
91  GREATER = SDLK_GREATER,
92  QUESTION = SDLK_QUESTION,
93  AT = SDLK_AT,
94  LEFTBRACKET = SDLK_LEFTBRACKET,
95  BACKSLASH = SDLK_BACKSLASH,
96  RIGHTBRACKET = SDLK_RIGHTBRACKET,
97  CARET = SDLK_CARET,
98  UNDERSCORE = SDLK_UNDERSCORE,
99  BACKQUOTE = SDLK_BACKQUOTE,
100  a = SDLK_a,
101  b = SDLK_b,
102  c = SDLK_c,
103  d = SDLK_d,
104  e = SDLK_e,
105  f = SDLK_f,
106  g = SDLK_g,
107  h = SDLK_h,
108  i = SDLK_i,
109  j = SDLK_j,
110  k = SDLK_k,
111  l = SDLK_l,
112  m = SDLK_m,
113  n = SDLK_n,
114  o = SDLK_o,
115  p = SDLK_p,
116  q = SDLK_q,
117  r = SDLK_r,
118  s = SDLK_s,
119  t = SDLK_t,
120  u = SDLK_u,
121  v = SDLK_v,
122  w = SDLK_w,
123  x = SDLK_x,
124  y = SDLK_y,
125  z = SDLK_z,
126  DELETE = SDLK_DELETE,
127 #ifdef SWE_SDL12
128  KP_K0 = SDLK_KP0,
129  KP_K1 = SDLK_KP1,
130  KP_K2 = SDLK_KP2,
131  KP_K3 = SDLK_KP3,
132  KP_K4 = SDLK_KP4,
133  KP_K5 = SDLK_KP5,
134  KP_K6 = SDLK_KP6,
135  KP_K7 = SDLK_KP7,
136  KP_K8 = SDLK_KP8,
137  KP_K9 = SDLK_KP9,
138 #else
139  KP_K0 = SDLK_KP_0,
140  KP_K1 = SDLK_KP_1,
141  KP_K2 = SDLK_KP_2,
142  KP_K3 = SDLK_KP_3,
143  KP_K4 = SDLK_KP_4,
144  KP_K5 = SDLK_KP_5,
145  KP_K6 = SDLK_KP_6,
146  KP_K7 = SDLK_KP_7,
147  KP_K8 = SDLK_KP_8,
148  KP_K9 = SDLK_KP_9,
149 #endif
150  KP_PERIOD = SDLK_KP_PERIOD,
151  KP_DIVIDE = SDLK_KP_DIVIDE,
152  KP_MULTIPLY = SDLK_KP_MULTIPLY,
153  KP_MINUS = SDLK_KP_MINUS,
154  KP_PLUS = SDLK_KP_PLUS,
155  KP_ENTER = SDLK_KP_ENTER,
156  KP_EQUALS = SDLK_KP_EQUALS,
157  UP = SDLK_UP,
158  DOWN = SDLK_DOWN,
159  RIGHT = SDLK_RIGHT,
160  LEFT = SDLK_LEFT,
161  INSERT = SDLK_INSERT,
162  HOME = SDLK_HOME,
163  END = SDLK_END,
164  PAGEUP = SDLK_PAGEUP,
165  PAGEDOWN = SDLK_PAGEDOWN,
166  F1 = SDLK_F1,
167  F2 = SDLK_F2,
168  F3 = SDLK_F3,
169  F4 = SDLK_F4,
170  F5 = SDLK_F5,
171  F6 = SDLK_F6,
172  F7 = SDLK_F7,
173  F8 = SDLK_F8,
174  F9 = SDLK_F9,
175  F10 = SDLK_F10,
176  F11 = SDLK_F11,
177  F12 = SDLK_F12,
178  F13 = SDLK_F13,
179  F14 = SDLK_F14,
180  F15 = SDLK_F15,
181  CAPSLOCK = SDLK_CAPSLOCK,
182 #ifdef SWE_SDL12
183  SCROLLOCK = SDLK_SCROLLOCK,
184 #else
185  SCROLLOCK = SDLK_SCROLLLOCK,
186 #endif
187  RSHIFT = SDLK_RSHIFT,
188  LSHIFT = SDLK_LSHIFT,
189  RCTRL = SDLK_RCTRL,
190  LCTRL = SDLK_LCTRL,
191  RALT = SDLK_RALT,
192  LALT = SDLK_LALT,
193  MODE = SDLK_MODE,
194  HELP = SDLK_HELP,
195 #ifdef SWE_SDL12
196  PRINT = SDLK_PRINT,
197 #else
198  PRINT = SDLK_PRINTSCREEN,
199 #endif
200  SYSREQ = SDLK_SYSREQ,
201  MENU = SDLK_MENU,
202  POWER = SDLK_POWER,
203  UNDO = SDLK_UNDO,
204 
205  AC_BACK = 0x4000010e,
206 
207  LAST
208  };
209 
210  int toKey(const std::string &);
211  const char* toName(int);
212  bool isPressed(int);
213 
214  const std::initializer_list<KeyName> & allKeys(void);
215  }
216 
217  struct KeyMod
218  {
219  u16 mod;
220 
221  KeyMod() : mod(SDL_GetModState()) {}
222  KeyMod(u16 val) : mod(val) {}
223 
224  bool isCtrl(void) const { return mod & KMOD_CTRL; }
225  bool isLeftCtrl(void) const { return mod & KMOD_LCTRL; }
226  bool isRightCtrl(void) const { return mod & KMOD_RCTRL; }
227  bool isShift(void) const { return mod & KMOD_SHIFT; }
228  bool isLeftShift(void) const { return mod & KMOD_LSHIFT; }
229  bool isRightShift(void) const { return mod & KMOD_RSHIFT; }
230  bool isAlt(void) const { return mod & KMOD_ALT; }
231  bool isLeftAlt(void) const { return mod & KMOD_LALT; }
232  bool isRightAlt(void) const { return mod & KMOD_RALT; }
233 
234 #ifndef SWE_SDL12
235  bool isGui(void) const { return mod & KMOD_GUI; }
236  bool isLGui(void) const { return mod & KMOD_LGUI; }
237  bool isRGui(void) const { return mod & KMOD_RGUI; }
238 #endif
239 
240  bool isNum(void) const { return mod & KMOD_NUM; }
241  bool isCaps(void) const { return mod & KMOD_CAPS; }
242  bool isMode(void) const { return mod & KMOD_MODE; }
243  };
244 
245  struct KeySym : std::pair<KeyMod, int>
246  {
247  KeySym(int sym = SDLK_UNKNOWN, int mod = SDL_GetModState()) : std::pair<KeyMod, int>(KeyMod(mod), sym) {}
248  KeySym(const SDL_Keysym & sdl) : std::pair<KeyMod, int>(KeyMod(sdl.mod), sdl.sym) {}
249 
250  const KeyMod & keymod(void) const
251  {
252  return first;
253  }
254 
255  const int & keycode(void) const
256  {
257  return second;
258  }
259 
260  int keychar(void) const;
261 
262 #ifdef SWE_SDL12
263  int scancode(void) const
264  {
265  return 0;
266  }
267 #else
268  int scancode(void) const
269  {
270  return SDL_GetScancodeFromKey(keycode());
271  }
272 #endif
273  const char* keyname(void) const
274  {
275  return Key::toName(keycode());
276  }
277 
278  bool isKeyCode(int code) const
279  {
280  return code == second;
281  }
282  };
283 
284 } // SWE
285 #endif
пространство SWE.
Definition: swe_binarybuf.cpp:30
Definition: swe_inputs_keys.h:245
Definition: swe_inputs_keys.h:37
Definition: swe_inputs_keys.h:217