unfettered-keyboard/include/layout.h
2024-04-15 22:11:20 -04:00

49 lines
1 KiB
C

/* SPDX-License-Identifier: GPL-3.0-only */
/*
* Keyboard layout management.
*
* Copyright (c) 2024, Richard Acayan. All rights reserved.
*/
#ifndef UFKBD_LAYOUT_H
#define UFKBD_LAYOUT_H
#include <stddef.h>
struct ufkbd_key;
struct ufkbd_layout_column {
double x1_unscaled, x2_unscaled;
int x1, x2;
struct ufkbd_key *key;
};
struct ufkbd_layout_row {
double y1_unscaled, y2_unscaled;
int y1, y2;
size_t n_cols;
struct ufkbd_layout_column *cols;
};
struct ufkbd_layout {
size_t max_cols;
size_t n_rows;
struct ufkbd_layout_row *rows;
};
struct ufkbd_layout *ufkbd_layout_init(void);
void ufkbd_layout_uninit(struct ufkbd_layout *layout);
struct ufkbd_key *ufkbd_layout_search(struct ufkbd_layout *layout, int x, int y,
int *x1, int *y1, int *x2, int *y2);
void ufkbd_layout_foreach(struct ufkbd_layout *layout,
void (*func)(struct ufkbd_key *key,
int x1, int y1, int x2, int y2,
void *data),
void *data);
void ufkbd_layout_resize(struct ufkbd_layout *layout, int width, int height);
#endif