From f87f7b4f0aaccc65d03ccee5bb11915ead6fb0e1 Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Sun, 27 Apr 2025 12:52:06 +0200 Subject: First pass at preparing for Github --- source/archived/input_box.c | 81 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 source/archived/input_box.c (limited to 'source/archived/input_box.c') diff --git a/source/archived/input_box.c b/source/archived/input_box.c new file mode 100644 index 0000000..729af02 --- /dev/null +++ b/source/archived/input_box.c @@ -0,0 +1,81 @@ +#define Assert(expr) if (!(expr)) { \ + tb_shutdown(); \ + raise(SIGTRAP); \ +} + +#define TB_IMPL +#include "termbox2.h" +#undef TB_IMPL + +#define TEXTBOX_MAX_INPUT 255 + +#define UI_IMPL +#include "ui.h" + +#define ARENA_IMPL +#include "arena.h" + +#include + +#include +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +typedef int8_t s8; +typedef int16_t s16; +typedef int32_t s32; +typedef int64_t s64; +typedef u32 b32; + +int +main(void) +{ + struct tb_event ev = {0}; + + u32 InputLen = 0; + wchar_t Input[TEXTBOX_MAX_INPUT] = {0}; + rect TextBox = {0, 0, 32, 5}; + rect TextR = { + 2, 1, + TextBox.W - 2*TEXTBOX_PADDING_X - 2*TEXTBOX_BORDER_WIDTH, + TextBox.H - 2*TEXTBOX_BORDER_WIDTH + }; + // Used for scrolling the text. Text before TextOffset will not be printed. + u32 TextOffset = 0; + // Position in input based on cursor position. + u32 InputPos = 0; + + Assert(setlocale(LC_ALL, "")); + tb_init(); + bytebuf_puts(&global.out, global.caps[TB_CAP_SHOW_CURSOR]); + global.cursor_x = TextR.X; + global.cursor_y = TextR.Y; + + DrawBox(TextBox, 0); + + while (ev.key != TB_KEY_CTRL_C) + { + DrawTextBoxWrapped(TextR, Input + TextOffset, InputLen - TextOffset); + + InputPos = TextOffset + (global.cursor_x - TextR.X) + (global.cursor_y - TextR.Y) * TextR.W; + Assert(InputPos <= InputLen); + + tb_present(); + tb_poll_event(&ev); + + u32 Ret = TextBoxKeypress(ev, TextR, Input, &InputLen, InputPos, &TextOffset); + + u32 ShouldInsert = (!Ret) && (ev.ch && InputLen < TEXTBOX_MAX_INPUT); + // Insert new character in Input at InputPos + if (ShouldInsert) + { + TextBoxInsert(Input, InputPos, InputLen++, ev.ch); + TextBoxScrollRight(TextR, &TextOffset); + } + } + + + tb_shutdown(); + return 0; +} -- cgit v1.2.3