34 #ifndef __CU_KEYBOARD_H__
35 #define __CU_KEYBOARD_H__
37 #include <cugl/input/CUInput.h>
38 #include <cugl/util/CUTimestamp.h>
55 enum class KeyCode : int {
131 ARROW_DOWN = SDLK_DOWN,
133 ARROW_LEFT = SDLK_LEFT,
135 ARROW_RIGHT = SDLK_RIGHT,
142 BACKSLASH = SDLK_BACKSLASH,
146 EQUALS = SDLK_EQUALS,
148 BACKQUOTE = SDLK_BACKQUOTE,
150 LEFT_BRACKET = SDLK_LEFTBRACKET,
154 PERIOD = SDLK_PERIOD,
156 RIGHT_BRACKET = SDLK_RIGHTBRACKET,
158 SEMICOLON = SDLK_SEMICOLON,
162 BACKSPACE = SDLK_BACKSPACE,
173 ESCAPE = SDLK_ESCAPE,
179 PAGE_DOWN = SDLK_PAGEDOWN,
181 PAGE_UP = SDLK_PAGEUP,
185 RETURN = SDLK_RETURN,
187 ENTER = SDLK_RETURN2,
190 CAPS_LOCK = SDLK_CAPSLOCK,
192 LEFT_ALT = SDLK_LALT,
194 LEFT_CTRL = SDLK_LCTRL,
196 LEFT_SHIFT = SDLK_LSHIFT,
198 LEFT_META = SDLK_LGUI,
200 RIGHT_ALT = SDLK_RALT,
202 RIGHT_CTRL = SDLK_RCTRL,
204 RIGHT_SHIFT = SDLK_RSHIFT,
206 RIGHT_META = SDLK_RGUI,
208 NUMLOCK = SDLK_NUMLOCKCLEAR,
211 KEYPAD_0 = SDLK_KP_0,
213 KEYPAD_1 = SDLK_KP_1,
215 KEYPAD_2 = SDLK_KP_2,
217 KEYPAD_3 = SDLK_KP_3,
219 KEYPAD_4 = SDLK_KP_4,
221 KEYPAD_5 = SDLK_KP_5,
223 KEYPAD_6 = SDLK_KP_6,
225 KEYPAD_7 = SDLK_KP_7,
227 KEYPAD_8 = SDLK_KP_8,
229 KEYPAD_9 = SDLK_KP_9,
231 KEYPAD_CLEAR = SDLK_KP_CLEAR,
233 KEYPAD_EQUALS = SDLK_KP_EQUALS,
235 KEYPAD_DIVIDE = SDLK_KP_DIVIDE,
237 KEYPAD_MULTIPLY = SDLK_KP_MULTIPLY,
239 KEYPAD_MINUS = SDLK_KP_MINUS,
241 KEYPAD_PLUS = SDLK_KP_PLUS,
243 KEYPAD_ENTER = SDLK_KP_ENTER,
253 std::size_t operator()(
const KeyCode& k)
const {
254 return (std::hash<int>()(static_cast<int>(k)));
265 enum class KeyCategory {
308 keycode = code; timestamp = stamp;
343 #pragma mark Listener
369 typedef std::function<void(const KeyEvent& event, bool focus)>
Listener;
376 std::unordered_set<KeyCode,KeyCodeHasher>
_current;
383 #pragma mark Constructor
402 virtual void dispose()
override;
405 #pragma mark Data Polling
414 return _current.find(code) != _current.end();
428 return _current.find(code) != _current.end() && _previous.find(code) == _previous.end();
442 return _current.find(code) == _current.end() && _previous.find(code) != _previous.end();
450 unsigned int keyCount()
const {
return (
unsigned int)_current.size(); }
460 const std::vector<KeyCode>
keySet()
const;
473 #pragma mark Listeners
585 #pragma mark Input Device
617 virtual void queryEvents(std::vector<Uint32>& eventset)
override;
bool removeKeyDownListener(Uint32 key)
bool addKeyDownListener(Uint32 key, Listener listener)
Keyboard()
Definition: CUKeyboard.h:390
bool keyDown(KeyCode code) const
Definition: CUKeyboard.h:413
static KeyCategory keyCategory(KeyCode code)
Definition: CUTimestamp.h:61
std::function< void(const KeyEvent &event, bool focus)> Listener
Definition: CUKeyboard.h:369
bool addKeyUpListener(Uint32 key, Listener listener)
bool isListener(Uint32 key) const
unsigned int keyCount() const
Definition: CUKeyboard.h:450
const Listener getKeyDownListener(Uint32 key) const
Definition: CUKeyboard.h:252
bool keyPressed(KeyCode code) const
Definition: CUKeyboard.h:427
KeyEvent()
Definition: CUKeyboard.h:299
virtual bool updateState(const SDL_Event &event, const Timestamp &stamp) override
Timestamp timestamp
Definition: CUKeyboard.h:292
std::unordered_map< Uint32, Listener > _downListeners
Definition: CUKeyboard.h:379
std::unordered_set< KeyCode, KeyCodeHasher > _current
Definition: CUKeyboard.h:376
const Listener getKeyUpListener(Uint32 key) const
KeyCode keycode
Definition: CUKeyboard.h:294
std::unordered_set< KeyCode, KeyCodeHasher > _previous
Definition: CUKeyboard.h:374
std::unordered_map< Uint32, Listener > _upListeners
Definition: CUKeyboard.h:381
Definition: CUKeyboard.h:289
bool removeKeyUpListener(Uint32 key)
KeyCategory keyCategory()
virtual void queryEvents(std::vector< Uint32 > &eventset) override
const std::vector< KeyCode > keySet() const
virtual ~Keyboard()
Definition: CUKeyboard.h:395
Definition: CUAction.h:51
Definition: CUKeyboard.h:341
virtual bool requestFocus(Uint32 key) override
KeyEvent(KeyCode code, const Timestamp &stamp)
Definition: CUKeyboard.h:307
virtual void dispose() override
bool keyReleased(KeyCode code)
Definition: CUKeyboard.h:441
virtual void clearState() override