upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/main/keyboard.h
blob: 9c4118f5b54047a7a56cea6bdf892bfe8eb57b38 (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
#ifndef KEYBOARD_H
#define KEYBOARD_H

#include <stdint.h>
#include <stdbool.h>

#define KB_INPUT_MAX     64

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 {
    char input[KB_INPUT_MAX + 1];
    int cursor;
    bool reveal;
    kb_layer_t layer;
} kb_state_t;

typedef struct {
    kb_action_t action;
    char ch;
} kb_result_t;

typedef struct {
    int key_w;
    int key_h;
    int key_gap;
    int start_y;
    int screen_w;
    int row_count;
} kb_layout_t;

void kb_state_init(kb_state_t *st);
void kb_set_layout(const kb_layout_t *layout);
const kb_layout_t *kb_get_layout(void);
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