From 910fe47b2ed1284d93ff4d274f5c2341cb0d2d0b Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 18 May 2026 22:46:53 +0530 Subject: feat: add on-screen keyboard with layout/hit detection tests --- main/keyboard.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 main/keyboard.h (limited to 'main/keyboard.h') diff --git a/main/keyboard.h b/main/keyboard.h new file mode 100644 index 0000000..d7b3400 --- /dev/null +++ b/main/keyboard.h @@ -0,0 +1,47 @@ +#ifndef KEYBOARD_H +#define KEYBOARD_H + +#include +#include + +#define KB_INPUT_MAX 64 +#define KB_KEY_W 28 +#define KB_KEY_H 36 +#define KB_KEY_GAP 2 +#define KB_ROW_COUNT 4 +#define KB_START_Y 310 + +typedef enum { + KB_ALPHA_LOWER, + KB_ALPHA_UPPER, + KB_NUMSYM +} kb_layer_t; + +typedef enum { + KB_ACTION_NONE = 0, + KB_ACTION_CHAR, + KB_ACTION_SHIFT, + KB_ACTION_BACKSPACE, + KB_ACTION_DONE, + KB_ACTION_LAYER, + KB_ACTION_SPACE +} kb_action_t; + +typedef struct { + kb_action_t action; + char ch; +} kb_result_t; + +typedef struct { + char input[KB_INPUT_MAX + 1]; + int cursor; + bool reveal; + kb_layer_t layer; +} kb_state_t; + +void kb_state_init(kb_state_t *st); +int kb_get_row_keys(int row, kb_layer_t layer, const char **keys_out); +kb_result_t kb_hit_test(int tx, int ty, kb_layer_t layer); +void kb_apply(kb_state_t *st, kb_result_t result); + +#endif -- cgit v1.2.3