Baby steps towards input handling
This commit is contained in:
parent
7817917cd1
commit
4e9eb97960
2 changed files with 141 additions and 6 deletions
80
input.h
Normal file
80
input.h
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
#ifndef INPUT_H
|
||||
#define INPUT_H
|
||||
|
||||
// NOTE: KEY_STATE_RELEASED does not imply KEY_STATE_UNPRESSED, which can be funky. Maybe give this another look?
|
||||
typedef enum {
|
||||
KEY_STATE_UNPRESSED = 0,
|
||||
KEY_STATE_RELEASED = 1,
|
||||
KEY_STATE_PRESSED = 1 << 1,
|
||||
KEY_STATE_HELD = 1 << 2
|
||||
} key_state_t;
|
||||
|
||||
typedef enum {
|
||||
KEYBOARD_STATE_UNPLUGGED = 0,
|
||||
KEYBOARD_STATE_UNFOCUSED = 1,
|
||||
KEYBOARD_STATE_FOCUSED = 1 << 1,
|
||||
KEYBOARD_STATE_IME = 1 << 2
|
||||
} keyboard_state_t;
|
||||
|
||||
typedef enum {
|
||||
MOUSE_STATE_UNPLUGGED = 0,
|
||||
MOUSE_STATE_UNFOCUSED = 1,
|
||||
MOUSE_STATE_FOCUSED = 1 << 1
|
||||
} mouse_state_t;
|
||||
|
||||
typedef enum {
|
||||
MOUSE_KEY_LEFT = 0,
|
||||
MOUSE_KEY_RIGHT = 1,
|
||||
MOUSE_KEY_MIDDLE = 2,
|
||||
MOUSE_KEY_SIDE = 3,
|
||||
MOUSE_KEY_EXTRA = 4,
|
||||
MOUSE_KEY_FORWARD = 5,
|
||||
MOUSE_KEY_BACK = 6,
|
||||
MOUSE_KEY_TASK = 7,
|
||||
MOUSE_KEY_EXTRA_0 = 8,
|
||||
MOUSE_KEY_EXTRA_1 = 9,
|
||||
MOUSE_KEY_EXTRA_2 = 10,
|
||||
MOUSE_KEY_EXTRA_3 = 11,
|
||||
MOUSE_KEY_EXTRA_4 = 12,
|
||||
MOUSE_KEY_EXTRA_5 = 13,
|
||||
MOUSE_KEY_EXTRA_6 = 14,
|
||||
MOUSE_KEY_EXTRA_7 = 15,
|
||||
MOUSE_KEY_EXTRA_8 = 16,
|
||||
MOUSE_KEY_EXTRA_9 = 17,
|
||||
MOUSE_KEY_TOTAL = 18
|
||||
} mouse_keysym_t;
|
||||
|
||||
#define IME_STR_MAX 200 // TODO: check if this limit is sensible
|
||||
|
||||
typedef struct {
|
||||
uint8_t keyboard_state; // mostly used to check if we are using the IME
|
||||
uint8_t keys[256]; // the state of the full keyboard
|
||||
uint8_t mouse_state;
|
||||
int32_t mouse_x;
|
||||
int32_t mouse_y;
|
||||
uint8_t mouse_keys[MOUSE_KEY_TOTAL];
|
||||
uint32_t modifiers; // TODO: Decide on a format for keyboard mod keys
|
||||
uint8_t ime_str[IME_STR_MAX]; // the final string coming from the IME for text input fields as utf8
|
||||
} input_t;
|
||||
|
||||
int32_t is_key_down(input_t *i, uint8_t key)
|
||||
{
|
||||
return i->keys[key] & KEY_STATE_PRESSED;
|
||||
}
|
||||
|
||||
int32_t is_key_pressed(input_t *i, uint8_t key)
|
||||
{
|
||||
return i->keys[key] & KEY_STATE_PRESSED && !(i->keys[key] & KEY_STATE_HELD);
|
||||
}
|
||||
|
||||
int32_t is_key_held(input_t *i, uint8_t key)
|
||||
{
|
||||
return i->keys[key] & KEY_STATE_HELD;
|
||||
}
|
||||
|
||||
int32_t is_key_released(input_t *i, uint8_t key)
|
||||
{
|
||||
return i->keys[key] & KEY_STATE_RELEASED;
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue