/* 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 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