summaryrefslogtreecommitdiff
path: root/src/ui/tui.h
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2024-12-28 08:03:23 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2024-12-28 08:03:23 +0330
commitd7802371b56734446a16962363322282ba772257 (patch)
tree8b5a62d12b080381e4a512b107e675a3ad14186b /src/ui/tui.h
parent55d29d0df8681efe01e88e0475c8512c44ec4bc4 (diff)
added many stuff which I can't even remember
Diffstat (limited to 'src/ui/tui.h')
-rw-r--r--src/ui/tui.h54
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,