suggestion picker: a persistent layer to complement virtual keyboards like wvkbd
Diffstat (limited to 'keyboard.c')
-rw-r--r--keyboard.c40
1 files changed, 15 insertions, 25 deletions
diff --git a/keyboard.c b/keyboard.c
index 00a568b..540f6c9 100644
--- a/keyboard.c
+++ b/keyboard.c
@@ -12,33 +12,30 @@
exit(1)
void
-kbd_init(struct kbd *kb, struct layout *layouts) {
+kbd_init(struct kbd *kb) {
fprintf(stderr, "Initializing keyboard\n");
- kb->layouts = layouts;
-
- kb->layer_index = 0;
-
- enum layout_id layer;
- layer = kb->layers[kb->layer_index];
- kb->layout = &kb->layouts[layer];
+ kb->suggs[0].label = "Hello";
+ kb->suggs[1].label = "World";
+ kb->suggs[2].label = "World";
+ kb->suggs[3].label = NULL;
}
void
-kbd_init_layout(struct layout *l, uint32_t width, uint32_t height) {
+kbd_init_suggs(struct key *suggs, uint32_t width, uint32_t height) {
uint32_t x = 0, y = 0;
uint8_t rows = 1;
- l->keyheight = height / rows;
+ uint32_t keyheight = height / rows;
- struct key *k = l->keys;
+ struct key *k = suggs;
double rowlength = kbd_get_row_length(k);
while (k->label != NULL) {
k->x = x;
k->y = y;
k->w = width / rowlength;
x += k->w;
- k->h = l->keyheight;
+ k->h = keyheight;
k++;
}
}
@@ -55,8 +52,7 @@ kbd_get_row_length(struct key *k) {
struct key *
kbd_get_key(struct kbd *kb, uint32_t x, uint32_t y) {
- struct layout *l = kb->layout;
- struct key *k = l->keys;
+ struct key *k = kb->suggs;
if (kb->debug)
fprintf(stderr, "get key: +%d+%d\n", x, y);
while (k->label != NULL) {
@@ -95,18 +91,12 @@ kbd_press_key(struct kbd *kb, struct key *k, uint32_t time) {
if (k->label) {
kb->last_press = k;
kbd_draw_key(kb, k, Press);
- kbd_print_key_stdout(kb, k);
+ printf("%s", k->label);
+ fflush(stdout);
}
}
void
-kbd_print_key_stdout(struct kbd *kb, struct key *k) {
- /* we generally print what is on the key LABEL and only support the normal */
- printf("%s", k->label);
- fflush(stdout);
-}
-
-void
kbd_draw_key(struct kbd *kb, struct key *k, enum key_draw_type type) {
struct drwsurf *d = kb->surf;
const char *label = k->label;
@@ -131,7 +121,7 @@ kbd_draw_key(struct kbd *kb, struct key *k, enum key_draw_type type) {
void
kbd_draw_layout(struct kbd *kb) {
struct drwsurf *d = kb->surf;
- struct key *next_key = kb->layout->keys;
+ struct key *next_key = kb->suggs;
if (kb->debug)
fprintf(stderr, "Draw layout");
@@ -144,13 +134,13 @@ kbd_draw_layout(struct kbd *kb) {
}
void
-kbd_resize(struct kbd *kb, struct layout *layouts) {
+kbd_resize(struct kbd *kb) {
struct drwsurf *d = kb->surf;
fprintf(stderr, "Resize %dx%d %d\n", kb->w, kb->h, kb->s);
drwsurf_resize(d, kb->w, kb->h, kb->s);
- kbd_init_layout(&layouts[0], kb->w, kb->h);
+ kbd_init_suggs(kb->suggs, kb->w, kb->h);
kbd_draw_layout(kb);
}