49 lines
1 KiB
C
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
|