summaryrefslogtreecommitdiff
path: root/include/wsap_vtcore/wsap_vtcore_input.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/wsap_vtcore/wsap_vtcore_input.h')
-rw-r--r--include/wsap_vtcore/wsap_vtcore_input.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/include/wsap_vtcore/wsap_vtcore_input.h b/include/wsap_vtcore/wsap_vtcore_input.h
new file mode 100644
index 0000000..337a292
--- /dev/null
+++ b/include/wsap_vtcore/wsap_vtcore_input.h
@@ -0,0 +1,202 @@
+#ifndef WSAP_VTCORE_INPUT_H
+#define WSAP_VTCORE_INPUT_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include "wsap_vtcore_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum wsap_vtcore_key {
+ WSAP_VTCORE_KEY_NONE = 0,
+
+ WSAP_VTCORE_KEY_RETURN,
+ WSAP_VTCORE_KEY_BACKSPACE,
+ WSAP_VTCORE_KEY_TAB,
+ WSAP_VTCORE_KEY_ESCAPE,
+
+ WSAP_VTCORE_KEY_UP,
+ WSAP_VTCORE_KEY_DOWN,
+ WSAP_VTCORE_KEY_RIGHT,
+ WSAP_VTCORE_KEY_LEFT,
+ WSAP_VTCORE_KEY_HOME,
+ WSAP_VTCORE_KEY_END,
+ WSAP_VTCORE_KEY_PAGE_UP,
+ WSAP_VTCORE_KEY_PAGE_DOWN,
+ WSAP_VTCORE_KEY_INSERT,
+ WSAP_VTCORE_KEY_DELETE,
+
+ WSAP_VTCORE_KEY_F1, WSAP_VTCORE_KEY_F2, WSAP_VTCORE_KEY_F3, WSAP_VTCORE_KEY_F4, WSAP_VTCORE_KEY_F5,
+ WSAP_VTCORE_KEY_F6, WSAP_VTCORE_KEY_F7, WSAP_VTCORE_KEY_F8, WSAP_VTCORE_KEY_F9, WSAP_VTCORE_KEY_F10,
+ WSAP_VTCORE_KEY_F11, WSAP_VTCORE_KEY_F12, WSAP_VTCORE_KEY_F13, WSAP_VTCORE_KEY_F14, WSAP_VTCORE_KEY_F15,
+ WSAP_VTCORE_KEY_F16, WSAP_VTCORE_KEY_F17, WSAP_VTCORE_KEY_F18, WSAP_VTCORE_KEY_F19, WSAP_VTCORE_KEY_F20,
+ WSAP_VTCORE_KEY_F21, WSAP_VTCORE_KEY_F22, WSAP_VTCORE_KEY_F23, WSAP_VTCORE_KEY_F24, WSAP_VTCORE_KEY_F25,
+ WSAP_VTCORE_KEY_F26, WSAP_VTCORE_KEY_F27, WSAP_VTCORE_KEY_F28, WSAP_VTCORE_KEY_F29, WSAP_VTCORE_KEY_F30,
+ WSAP_VTCORE_KEY_F31, WSAP_VTCORE_KEY_F32, WSAP_VTCORE_KEY_F33, WSAP_VTCORE_KEY_F34, WSAP_VTCORE_KEY_F35,
+
+ WSAP_VTCORE_KEY_KP_0, WSAP_VTCORE_KEY_KP_1, WSAP_VTCORE_KEY_KP_2, WSAP_VTCORE_KEY_KP_3, WSAP_VTCORE_KEY_KP_4,
+ WSAP_VTCORE_KEY_KP_5, WSAP_VTCORE_KEY_KP_6, WSAP_VTCORE_KEY_KP_7, WSAP_VTCORE_KEY_KP_8, WSAP_VTCORE_KEY_KP_9,
+ WSAP_VTCORE_KEY_KP_DECIMAL,
+ WSAP_VTCORE_KEY_KP_ENTER,
+ WSAP_VTCORE_KEY_KP_ADD,
+ WSAP_VTCORE_KEY_KP_SUBTRACT,
+ WSAP_VTCORE_KEY_KP_MULTIPLY,
+ WSAP_VTCORE_KEY_KP_DIVIDE,
+ WSAP_VTCORE_KEY_KP_EQUAL,
+ WSAP_VTCORE_KEY_KP_SEPARATOR,
+ WSAP_VTCORE_KEY_KP_LEFT,
+ WSAP_VTCORE_KEY_KP_RIGHT,
+ WSAP_VTCORE_KEY_KP_UP,
+ WSAP_VTCORE_KEY_KP_DOWN,
+ WSAP_VTCORE_KEY_KP_PAGE_UP,
+ WSAP_VTCORE_KEY_KP_PAGE_DOWN,
+ WSAP_VTCORE_KEY_KP_HOME,
+ WSAP_VTCORE_KEY_KP_END,
+ WSAP_VTCORE_KEY_KP_INSERT,
+ WSAP_VTCORE_KEY_KP_DELETE,
+ WSAP_VTCORE_KEY_KP_BEGIN,
+
+ WSAP_VTCORE_KEY_CAPS_LOCK,
+ WSAP_VTCORE_KEY_SCROLL_LOCK,
+ WSAP_VTCORE_KEY_NUM_LOCK,
+ WSAP_VTCORE_KEY_PRINT_SCREEN,
+ WSAP_VTCORE_KEY_PAUSE,
+ WSAP_VTCORE_KEY_MENU,
+
+ WSAP_VTCORE_KEY_MEDIA_PLAY,
+ WSAP_VTCORE_KEY_MEDIA_PAUSE,
+ WSAP_VTCORE_KEY_MEDIA_STOP,
+ WSAP_VTCORE_KEY_MEDIA_FORWARD,
+ WSAP_VTCORE_KEY_MEDIA_REWIND,
+ WSAP_VTCORE_KEY_MEDIA_NEXT,
+ WSAP_VTCORE_KEY_MEDIA_PREV,
+ WSAP_VTCORE_KEY_MEDIA_RECORD,
+ WSAP_VTCORE_KEY_VOLUME_DOWN,
+ WSAP_VTCORE_KEY_VOLUME_UP,
+ WSAP_VTCORE_KEY_MUTE,
+
+ WSAP_VTCORE_KEY_LSHIFT,
+ WSAP_VTCORE_KEY_LCTRL,
+ WSAP_VTCORE_KEY_LALT,
+ WSAP_VTCORE_KEY_LSUPER,
+ WSAP_VTCORE_KEY_LHYPER,
+ WSAP_VTCORE_KEY_LMETA,
+ WSAP_VTCORE_KEY_RSHIFT,
+ WSAP_VTCORE_KEY_RCTRL,
+ WSAP_VTCORE_KEY_RALT,
+ WSAP_VTCORE_KEY_RSUPER,
+ WSAP_VTCORE_KEY_RHYPER,
+ WSAP_VTCORE_KEY_RMETA,
+ WSAP_VTCORE_KEY_ISO_LEVEL3_SHIFT,
+ WSAP_VTCORE_KEY_ISO_LEVEL5_SHIFT,
+
+ WSAP_VTCORE_KEY_COUNT
+};
+
+enum wsap_vtcore_mod {
+ WSAP_VTCORE_MOD_SHIFT = 1,
+ WSAP_VTCORE_MOD_ALT = 2,
+ WSAP_VTCORE_MOD_CTRL = 4,
+ WSAP_VTCORE_MOD_SUPER = 8,
+ WSAP_VTCORE_MOD_HYPER = 16,
+ WSAP_VTCORE_MOD_META = 32,
+ WSAP_VTCORE_MOD_CAPS = 64,
+ WSAP_VTCORE_MOD_NUM = 128,
+};
+
+enum wsap_vtcore_key_action {
+ WSAP_VTCORE_KEY_PRESS = 1,
+ WSAP_VTCORE_KEY_REPEAT = 2,
+ WSAP_VTCORE_KEY_RELEASE = 3,
+};
+
+enum wsap_vtcore_mouse_button {
+ WSAP_VTCORE_MOUSE_BUTTON_PRIMARY = 0,
+ WSAP_VTCORE_MOUSE_BUTTON_MIDDLE,
+ WSAP_VTCORE_MOUSE_BUTTON_SECONDARY,
+ WSAP_VTCORE_MOUSE_BUTTON_NONE,
+ /* Extra buttons 8 through 11 in xterm mouse reporting (encoded as 128..131). */
+ WSAP_VTCORE_MOUSE_BUTTON_EXTRA_1,
+ WSAP_VTCORE_MOUSE_BUTTON_EXTRA_2,
+ WSAP_VTCORE_MOUSE_BUTTON_EXTRA_3,
+ WSAP_VTCORE_MOUSE_BUTTON_EXTRA_4,
+ WSAP_VTCORE_MOUSE_WHEEL_UP = 16,
+ WSAP_VTCORE_MOUSE_WHEEL_DOWN,
+ WSAP_VTCORE_MOUSE_WHEEL_LEFT,
+ WSAP_VTCORE_MOUSE_WHEEL_RIGHT,
+};
+
+enum wsap_vtcore_mouse_event_kind {
+ WSAP_VTCORE_MOUSE_PRESS = 0,
+ WSAP_VTCORE_MOUSE_RELEASE,
+ WSAP_VTCORE_MOUSE_MOTION,
+ WSAP_VTCORE_MOUSE_SCROLL,
+ WSAP_VTCORE_MOUSE_LEAVE,
+};
+
+struct wsap_vtcore_key_event {
+ enum wsap_vtcore_key_action action;
+ uint16_t key; /* enum wsap_vtcore_key; WSAP_VTCORE_KEY_NONE for a text key */
+ uint16_t keypad; /* the WSAP_VTCORE_KEY_KP_* key when the key is on the keypad */
+ unsigned mods; /* enum wsap_vtcore_mod */
+ uint32_t codepoint; /* the code point of the key without modifiers */
+ uint32_t shifted; /* the code point of the key with Shift */
+ uint32_t base; /* the code point of the key in the US layout */
+ uint32_t text; /* the code point the key types, or 0 */
+ bool text_deferred; /* an input method sends the text later */
+};
+
+struct wsap_vtcore_mouse_event {
+ struct wsap_vtcore_vector2i pos; /* Grid cell coordinates (col, row) */
+ struct wsap_vtcore_vector2i pixel; /* Absolute pixel position in terminal grid */
+ /*
+ * Button identifier:
+ * - Press and release: the button that changed state (WSAP_VTCORE_MOUSE_BUTTON_*).
+ * - Motion: the held button for drag events, or WSAP_VTCORE_MOUSE_BUTTON_NONE for hover.
+ * - Scroll: the wheel direction (WSAP_VTCORE_MOUSE_WHEEL_*).
+ */
+ int button;
+ unsigned mods;
+ int scroll_lines;
+ float scroll_delta;
+ enum wsap_vtcore_mouse_event_kind kind;
+};
+
+/* The keys that are down. An all-zero value has no keys down. */
+struct wsap_vtcore_keyboard_state {
+ uint64_t down[(WSAP_VTCORE_KEY_COUNT + 63) / 64];
+};
+
+/* Record a press, repeat, or release in s. */
+WSAP_VTCORE_API void wsap_vtcore_keyboard_update(struct wsap_vtcore_keyboard_state *s, const struct wsap_vtcore_key_event *ev);
+WSAP_VTCORE_API bool wsap_vtcore_keyboard_key_down(const struct wsap_vtcore_keyboard_state *s, enum wsap_vtcore_key key);
+
+/* Kitty keyboard protocol flags, as in wsap_vtcore_modes.keyboard. */
+enum wsap_vtcore_keyboard_flag {
+ WSAP_VTCORE_KEYBOARD_DISAMBIGUATE = 1,
+ WSAP_VTCORE_KEYBOARD_EVENT_TYPES = 2,
+ WSAP_VTCORE_KEYBOARD_ALTERNATE_KEYS = 4,
+ WSAP_VTCORE_KEYBOARD_ALL_KEYS = 8,
+ WSAP_VTCORE_KEYBOARD_ASSOCIATED_TEXT = 16,
+};
+
+enum wsap_vtcore_input_status {
+ WSAP_VTCORE_INPUT_UNHANDLED = 0, /* the terminal does not use the event */
+ WSAP_VTCORE_INPUT_CONSUMED, /* the terminal uses the event but sends nothing */
+ WSAP_VTCORE_INPUT_BYTES, /* send the len bytes in buf to the program */
+ WSAP_VTCORE_INPUT_BUFFER_FULL, /* buf is too small; len is 0 */
+};
+
+struct wsap_vtcore_input_result {
+ size_t len;
+ enum wsap_vtcore_input_status status;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WSAP_VTCORE_INPUT_H */