diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2024-12-28 08:03:23 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2024-12-28 08:03:23 +0330 |
commit | d7802371b56734446a16962363322282ba772257 (patch) | |
tree | 8b5a62d12b080381e4a512b107e675a3ad14186b /src/ui/tui.h | |
parent | 55d29d0df8681efe01e88e0475c8512c44ec4bc4 (diff) |
added many stuff which I can't even remember
Diffstat (limited to 'src/ui/tui.h')
-rw-r--r-- | src/ui/tui.h | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/src/ui/tui.h b/src/ui/tui.h index 605376f..731ec76 100644 --- a/src/ui/tui.h +++ b/src/ui/tui.h @@ -6,6 +6,8 @@ #include <termios.h> #include <ui/color.h> +#include "ui/text.h" + extern const int MAX_WIDTH; extern const int MAX_HEIGHT; @@ -14,7 +16,7 @@ extern const int MIN_HEIGHT; extern const int FRAME_UNLIMITED; -typedef enum MOUSE_BUTTON { +typedef enum MOUSE_BUTTON : uint8_t { MOUSE_BUTTON_LEFT_CLICK = 32, MOUSE_BUTTON_MIDDLE_CLICK = 33, MOUSE_BUTTON_RIGHT_CLICK = 34, @@ -22,13 +24,38 @@ typedef enum MOUSE_BUTTON { MOUSE_BUTTON_SCROLL_DOWN = 97, } MOUSE_BUTTON; +typedef enum INPUT_TYPE : uint8_t { + INPUT_TYPE_NONE, + INPUT_TYPE_MOUSE, + INPUT_TYPE_KEYBOARD, +} INPUT_TYPE; + typedef struct MOUSE_ACTION { MOUSE_BUTTON button; - unsigned int x; - unsigned int y; + uint x; + uint y; } MOUSE_ACTION; -typedef void (*ON_CLICK_CALLBACK)(const MOUSE_ACTION *mouse_action); +typedef struct INPUT_ACTION { + union { + MOUSE_BUTTON mouse_button; + char key; + } action; + INPUT_TYPE type; + uint x; + uint y; +} INPUT_ACTION; + +typedef void (*ON_TEXT_INPUT)(char c); +typedef void (*ON_CLICK_CALLBACK)(MOUSE_ACTION mouse_action); +typedef void (*ON_INPUT_CALLBACK)(INPUT_ACTION input_action); +typedef void (*ON_RAW_INPUT_CALLBACK)(INPUT_ACTION input_action, + void *metadata); + +typedef struct ON_ACTION_CALLBACK { + ON_RAW_INPUT_CALLBACK on_raw_input_callback; + void *metadata; +} ON_ACTION_CALLBACK; #ifndef __cplusplus #if (__STDC_VERSION__ < 202000L) @@ -40,7 +67,8 @@ typedef struct TERMINAL_CELL { char c; COLOR color; COLOR background_color; - ON_CLICK_CALLBACK on_click_callback; + TEXT_STYLE style; + ON_ACTION_CALLBACK on_action_callback; } TERMINAL_CELL; typedef struct TUI { @@ -52,8 +80,6 @@ typedef struct TUI { uint64_t last_frame; // in nanoseconds } TUI; -constexpr int64_t NANO_TO_SECOND = 1000000000; - typedef enum WIDGET_TYPE { WIDGET_TYPE_TEXT, WIDGET_TYPE_BUTTON, @@ -78,6 +104,7 @@ typedef struct WIDGET_ARRAY { typedef struct TEXT_METADATA { char *text; COLOR color; + TEXT_STYLE style; } TEXT_METADATA; typedef struct BUTTON_METADATA { @@ -110,11 +137,10 @@ typedef struct PADDING_METADATA { int padding_right; } PADDING_METADATA; -typedef void (*ON_TEXT_INPUT)(char c); - typedef struct TEXT_INPUT_METADATA { char *text; COLOR color; + TEXT_STYLE style; ON_TEXT_INPUT on_text_input; } TEXT_INPUT_METADATA; @@ -155,8 +181,10 @@ extern void tui_main_loop(TUI *tui, WIDGET_BUILDER widget_builder, int fps); extern WIDGET *tui_new_widget(WIDGET_TYPE type, void *metadata); extern void tui_delete_widget(WIDGET *restrict widget); -extern WIDGET *tui_make_text(char *restrict text, COLOR color); -extern TEXT_METADATA *_tui_make_text_metadata(char *restrict text, COLOR color); +extern WIDGET *tui_make_text(char *restrict text, COLOR color, + TEXT_STYLE style); +extern TEXT_METADATA *_tui_make_text_metadata(char *restrict text, COLOR color, + TEXT_STYLE style); extern void _tui_delete_text(WIDGET *restrict text); extern WIDGET *tui_make_button(WIDGET *restrict child, @@ -185,9 +213,11 @@ extern CENTER_METADATA *_tui_make_center_metadata(WIDGET *restrict child); extern void _tui_delete_center(WIDGET *restrict center); extern WIDGET *tui_make_text_input(char *restrict text, COLOR color, + TEXT_STYLE style, ON_TEXT_INPUT on_text_input); extern TEXT_INPUT_METADATA *_tui_make_text_input_metadata( - char *restrict text, COLOR color, ON_TEXT_INPUT on_text_input); + char *restrict text, COLOR color, TEXT_STYLE style, + ON_TEXT_INPUT on_text_input); extern void _tui_delete_input_text(WIDGET *restrict text_input); extern WIDGET *tui_make_padding(WIDGET *restrict child, int padding_top, |