From 744a155fedb8d696448e3f3a67694faa9dc4c5da Mon Sep 17 00:00:00 2001 From: mivirl Date: Sun, 25 May 2025 15:33:11 +0000 Subject: [PATCH] Add example for termbox2 renderer --- examples/termbox2-demo/CMakeLists.txt | 26 + examples/termbox2-demo/main.c | 818 ++++++++++++++++++ examples/termbox2-demo/readme.md | 61 ++ .../resources/512px-Shark_antwerp_zoo.jpeg | Bin 0 -> 67516 bytes 4 files changed, 905 insertions(+) create mode 100644 examples/termbox2-demo/CMakeLists.txt create mode 100644 examples/termbox2-demo/main.c create mode 100644 examples/termbox2-demo/readme.md create mode 100644 examples/termbox2-demo/resources/512px-Shark_antwerp_zoo.jpeg diff --git a/examples/termbox2-demo/CMakeLists.txt b/examples/termbox2-demo/CMakeLists.txt new file mode 100644 index 0000000..4dbbb3d --- /dev/null +++ b/examples/termbox2-demo/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.25) +project(clay_examples_termbox2_demo C) +set(CMAKE_C_STANDARD 99) + +include(FetchContent) +set(FETCHCONTENT_QUIET FALSE) + +FetchContent_Declare( + termbox2 + GIT_REPOSITORY "https://github.com/termbox/termbox2.git" + GIT_TAG "8ee9dc17e1ca61c630f91db0aa7f81fa29a32040" + GIT_PROGRESS TRUE + GIT_SHALLOW TRUE +) +FetchContent_MakeAvailable(termbox2) + +add_executable(clay_examples_termbox2_demo main.c) + +target_compile_options(clay_examples_termbox2_demo PUBLIC) +target_include_directories(clay_examples_termbox2_demo PUBLIC . PRIVATE ${termbox2_SOURCE_DIR}) + +add_custom_command( + TARGET clay_examples_termbox2_demo POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_SOURCE_DIR}/resources + ${CMAKE_CURRENT_BINARY_DIR}/resources) diff --git a/examples/termbox2-demo/main.c b/examples/termbox2-demo/main.c new file mode 100644 index 0000000..26107a6 --- /dev/null +++ b/examples/termbox2-demo/main.c @@ -0,0 +1,818 @@ +/* + Unlicense + + Copyright (c) 2025 Mivirl + + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to +*/ + +#define CLAY_IMPLEMENTATION +#include "../../clay.h" +#include "../../renderers/termbox2/clay_renderer_termbox2.c" + +#define TB_IMPL +#include "termbox2.h" + + +// ------------------------------------------------------------------------------------------------- +// -- Data structures + +typedef struct { + unsigned char *data; + long size; +} image; + + +// ------------------------------------------------------------------------------------------------- +// -- Internal state + +// If the program should exit the main render/interaction loop +bool end_loop = false; + +// If the debug tools should be displayed +bool debugMode = false; + + +// ------------------------------------------------------------------------------------------------- +// -- Internal utility functions + +/** + Load an image into memory as bytes + + \param filename Filepath to image to be loaded + */ +image load_image(const char *filename) +{ + image rv = { .data = NULL, .size = 0 }; + + if (NULL == filename) { + return rv; + } + + FILE *image_file = NULL; + + image_file = fopen(filename, "r"); + if (NULL == image_file) { + fprintf(stderr, "Failed to open image %s: %s\n", filename, strerror(errno)); + return rv; + } + + int err = fseek(image_file, 0, SEEK_END); + if (-1 == err) { + fprintf(stderr, "Failed to seek image %s: %s\n", filename, strerror(errno)); + goto done; + } + + long image_size = ftell(image_file); + if (-1 == image_size) { + fprintf(stderr, "Failed to get filesize for image %s: %s\n", filename, strerror(errno)); + goto done; + } + rewind(image_file); + + unsigned char *image_data = malloc(image_size); + if (NULL == image_data) { + fprintf(stderr, "Failed to allocate memory for image %s: %s\n", filename, strerror(errno)); + goto done; + } + + size_t written = fread(image_data, image_size, 1, image_file); + if (1 != written) { + fprintf(stderr, "Failed to load image %s into memory: %s\n", filename, strerror(errno)); + goto error_read; + } + + rv.data = image_data; + rv.size = image_size; + goto done; + +error_read: + free(image_data); +done: + fclose(image_file); + return rv; +} + +/** + Free an image from memory + + \param image Image to free + */ +void free_image(image image) +{ + free(image.data); + image.data = NULL; + image.size = 0; +} + +/** + Block until an event is received for termbox + */ +void termbox_waitfor_event(void) +{ + int termbox_ttyfd, termbox_resizefd; + tb_get_fds(&termbox_ttyfd, &termbox_resizefd); + int nfds = CLAY__MAX(termbox_ttyfd, termbox_resizefd) + 1; + fd_set monitor_set; + FD_ZERO(&monitor_set); + FD_SET(termbox_ttyfd, &monitor_set); + FD_SET(termbox_resizefd, &monitor_set); + select(nfds, &monitor_set, NULL, NULL, NULL); +} + + +// ------------------------------------------------------------------------------------------------- +// -- Clay components + +void component_text_pair(const char *key, const char *value) +{ + size_t keylen = strlen(key); + size_t vallen = strlen(value); + Clay_String keytext = (Clay_String) { + .length = keylen, + .chars = key, + }; + Clay_String valtext = (Clay_String) { + .length = vallen, + .chars = value, + }; + Clay_TextElementConfig *textconfig = + CLAY_TEXT_CONFIG({ .textColor = { 0xff, 0xff, 0xff, 0xff } }); + CLAY({ + .layout = { + .sizing = { + .width = { + .size.minMax = { + .min = strlen("Border chars CLAY_TB_BORDER_CHARS_UNICODE") * Clay_Termbox_Cell_Width(), + } + }, + } + }, + }) { + CLAY_TEXT(keytext, textconfig); + CLAY({ .layout = { .sizing = CLAY_SIZING_GROW(1) } }) { } + CLAY_TEXT(valtext, textconfig); + } + +} + +void component_termbox_settings(void) +{ + CLAY({ + .floating = { + .attachTo = CLAY_ATTACH_TO_PARENT, + .zIndex = 1, + .attachPoints = { CLAY_ATTACH_POINT_CENTER_CENTER, CLAY_ATTACH_POINT_CENTER_TOP }, + .offset = { 0, 0 } + }, + }) { + CLAY({ + .layout = { + .sizing = CLAY_SIZING_FIT(), + .padding = { + 6 * Clay_Termbox_Cell_Width(), + 6 * Clay_Termbox_Cell_Width(), + 2 * Clay_Termbox_Cell_Height(), + 2 * Clay_Termbox_Cell_Height(), + } + }, + .border = { + .width = CLAY_BORDER_ALL(1), + .color = { 0x00, 0x00, 0x00, 0xff } + }, + .backgroundColor = { 0x7f, 0x00, 0x00, 0x7f } + }) { + const char *color_mode = NULL; + switch (clay_tb_color_mode) { + case TB_OUTPUT_NORMAL: { + color_mode = "TB_OUTPUT_NORMAL"; + break; + } + case TB_OUTPUT_256: { + color_mode = "TB_OUTPUT_256"; + break; + } + case TB_OUTPUT_216: { + color_mode = "TB_OUTPUT_216"; + break; + } + case TB_OUTPUT_GRAYSCALE: { + color_mode = "TB_OUTPUT_GRAYSCALE"; + break; + } + case TB_OUTPUT_TRUECOLOR: { + color_mode = "TB_OUTPUT_TRUECOLOR"; + break; + } + case CLAY_TB_OUTPUT_NOCOLOR: { + color_mode = "CLAY_TB_OUTPUT_NOCOLOR"; + break; + } + default: { + color_mode = "INVALID"; + break; + } + } + const char *border_mode = NULL; + switch (clay_tb_border_mode) { + case CLAY_TB_BORDER_MODE_ROUND: { + border_mode = "CLAY_TB_BORDER_MODE_ROUND"; + break; + } + case CLAY_TB_BORDER_MODE_MINIMUM: { + border_mode = "CLAY_TB_BORDER_MODE_MINIMUM"; + break; + } + default: { + color_mode = "INVALID"; + break; + } + } + const char *border_chars = NULL; + switch (clay_tb_border_chars) { + case CLAY_TB_BORDER_CHARS_ASCII: { + border_chars = "CLAY_TB_BORDER_CHARS_ASCII"; + break; + } + case CLAY_TB_BORDER_CHARS_UNICODE: { + border_chars = "CLAY_TB_BORDER_CHARS_UNICODE"; + break; + } + case CLAY_TB_BORDER_CHARS_NONE: { + border_chars = "CLAY_TB_BORDER_CHARS_NONE"; + break; + } + default: { + border_chars = "INVALID"; + break; + } + } + const char *transparency = NULL; + if (clay_tb_transparency) { + transparency = "true"; + } else { + transparency = "false"; + } + + CLAY({ + .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM }, + }) { + component_text_pair("Color mode", color_mode); + component_text_pair("Border mode", border_mode); + component_text_pair("Border chars", border_chars); + component_text_pair("Transparency", transparency); + } + } + } +} + +void component_color_palette(void) +{ + CLAY({ + .layout = { + .childGap = 16, + .padding = { + 2 * Clay_Termbox_Cell_Width(), + 2 * Clay_Termbox_Cell_Width(), + 2 * Clay_Termbox_Cell_Height(), + 2 * Clay_Termbox_Cell_Height(), + } + }, + .border = { + .width = CLAY_BORDER_OUTSIDE(2), + .color = { 0x00, 0x00, 0x00, 0xff } + }, + .backgroundColor = { 0x7f, 0x7f, 0x7f, 0xff } + }) { + for (int type = 0; type < 2; ++type) { + CLAY({ + .layout ={ + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .sizing = CLAY_SIZING_FIT(), + .childGap = Clay_Termbox_Cell_Height() + }, + }) { + for (float ri = 0; ri < 4; ri += 1) { + CLAY({ + .layout ={ + .sizing = CLAY_SIZING_FIT(), + .childGap = Clay_Termbox_Cell_Width() + }, + }) { + for (float r = ri * 0x44; r < (ri + 1) * 0x44; r += 0x22) { + CLAY({ + .layout ={ + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .sizing = CLAY_SIZING_FIT(), + }, + }) { + for (float g = 0; g < 0xff; g += 0x22) { + CLAY({ + .layout ={ + .sizing = CLAY_SIZING_FIT(), + }, + }) { + for (float b = 0; b < 0xff; b += 0x22) { + Clay_Color color = { r, g, b, 0x7f }; + + Clay_LayoutConfig layout = (Clay_LayoutConfig) { + .sizing = { + .width = CLAY_SIZING_FIXED(2 * Clay_Termbox_Cell_Width()), + .height = CLAY_SIZING_FIXED(1 * Clay_Termbox_Cell_Height()) + } + }; + if (0 == type) { + CLAY({ + .layout = layout, + .backgroundColor = color + }) {} + } else if (1 == type) { + CLAY({ + .layout = layout, + }) { + CLAY_TEXT(CLAY_STRING("#"), CLAY_TEXT_CONFIG({ .textColor = color })); + } + } + } + } + } + } + } + } + } + } + } + } +} + +void component_unicode_text(void) +{ + CLAY({ + .layout = { + .sizing = CLAY_SIZING_FIT(), + .padding = { + 2 * Clay_Termbox_Cell_Width(), + 2 * Clay_Termbox_Cell_Width(), + 2 * Clay_Termbox_Cell_Height(), + 2 * Clay_Termbox_Cell_Height(), + } + }, + .backgroundColor = { 0xcc, 0xbb, 0xaa, 0xff }, + .border = { + // This border should still be displayed in CLAY_TB_BORDER_MODE_ROUND mode + .width = { + 0.75 * Clay_Termbox_Cell_Width(), + 0.75 * Clay_Termbox_Cell_Width(), + 0.75 * Clay_Termbox_Cell_Height(), + 0.75 * Clay_Termbox_Cell_Height(), + }, + .color = { 0x33, 0x33, 0x33, 0xff }, + }, + }) { + CLAY_TEXT( + CLAY_STRING("Non-ascii character tests:\n" + "\n" + "(from https://www.w3.org/2001/06/utf-8-test/UTF-8-demo.html)\n" + " Mathematics and Sciences:\n" + " ∮ E⋅da = Q, n → ∞, ∑ f(i) = ∏ g(i), ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β),\n" + " ℕ ⊆ ℕ₀ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ, ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (A ⇔ B),\n" + " 2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm\n" + "\n" + " Compact font selection example text:\n" + " ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789\n" + " abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ\n" + " –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд\n" + " ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა\n" + "\n" + "(from https://blog.denisbider.com/2015/09/when-monospace-fonts-arent-unicode.html):\n" + " aeioucsz\n" + " áéíóúčšž\n" + " 台北1234\n" + " QRS12\n" + " アイウ1234\n" + "\n" + "(from https://stackoverflow.com/a/1644280)\n" + " ٩(-̮̮̃-̃)۶ ٩(●̮̮̃•̃)۶ ٩(͡๏̯͡๏)۶ ٩(-̮̮̃•̃)." + ), + CLAY_TEXT_CONFIG({ .textColor = { 0x11, 0x11, 0x11, 0xff } }) + ); + } +} + +void component_keybinds(void) +{ + CLAY({ + .layout = { + .sizing = CLAY_SIZING_FIT(), + .padding = { + 4 * Clay_Termbox_Cell_Width(), + 4 * Clay_Termbox_Cell_Width(), + 2 * Clay_Termbox_Cell_Height(), + 2 * Clay_Termbox_Cell_Height(), + } + }, + .backgroundColor = { 0x00, 0x7f, 0x7f, 0xff } + }) { + CLAY_TEXT( + CLAY_STRING( + "Termbox2 renderer test\n" + "\n" + "Keybinds:\n" + " c/C - Cycle through color modes\n" + " b/B - Cycle through border modes\n" + " h/H - Cycle through border characters\n" + " t/T - Toggle transparency\n" + " d/D - Toggle debug mode\n" + " q/Q - Quit\n" + ), + CLAY_TEXT_CONFIG({ .textColor = { 0xff, 0xff, 0xff, 0xff }}) + ); + } +} + +void component_image(image image) +{ + CLAY({ + .layout = { + .sizing = { + .width = CLAY_SIZING_FIXED(200), + .height = CLAY_SIZING_FIXED(200), + }, + }, + .image = { + .imageData = &image, + .sourceDimensions = { 512, 512 } + } + }) { } +} + +void component_mouse_data(void) +{ + CLAY({ + .layout = { + //.layoutDirection = CLAY_TOP_TO_BOTTOM, + .sizing = { + .width = CLAY_SIZING_GROW(), + }, + }, + }) { + Clay_Context* context = Clay_GetCurrentContext(); + Clay_Vector2 mouse_position = context->pointerInfo.position; + + Clay_LayoutConfig layout = (Clay_LayoutConfig) { + .sizing = { + .width = CLAY_SIZING_FIXED(2 * Clay_Termbox_Cell_Width()), + .height = CLAY_SIZING_FIXED(1 * Clay_Termbox_Cell_Height()) + } + }; + + float v = 255 * mouse_position.x / Clay_Termbox_Width(); + v = (0 > v) ? 0 : v; + v = (255 < v) ? 255 : v; + Clay_Color color = (Clay_Color) { v, v, v, 0xff }; + + CLAY({ + .layout = layout, + .backgroundColor = color + }) {} + + v = 255 * mouse_position.y / Clay_Termbox_Height(); + v = (0 > v) ? 0 : v; + v = (255 < v) ? 255 : v; + color = (Clay_Color) { v, v, v, 0xff }; + + + CLAY({ + .layout = layout, + .backgroundColor = color + }) {} + + } +} + +void component_bordered_text(void) +{ + CLAY({ + .layout = { + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .sizing = { + .width = CLAY_SIZING_FIT(450), + .height = CLAY_SIZING_FIT(), + }, + .padding = CLAY_PADDING_ALL(32) + }, + .backgroundColor = { 0x24, 0x55, 0x34, 0xff }, + }) { + CLAY({ + .border = { .width = { 1, 1, 1, 1, 1 }, .color = { 0xaa, 0x00, 0x00, 0xff } }, + }) { + CLAY_TEXT( + CLAY_STRING("Test"), CLAY_TEXT_CONFIG({ .textColor = { 0xff, 0xff, 0xff, 0xff } })); + } + CLAY({ + .border = { .width = { 1, 1, 1, 1, 1 }, .color = { 0x00, 0xaa, 0x00, 0xff } }, + }) { + CLAY_TEXT(CLAY_STRING("of the border width"), + CLAY_TEXT_CONFIG({ .textColor = { 0xff, 0xff, 0xff, 0xff } })); + } + CLAY({ + .border = { .width = { 1, 1, 1, 1, 1 }, .color = { 0x00, 0x00, 0xaa, 0xff } }, + }) { + CLAY_TEXT(CLAY_STRING("and overlap for multiple lines\nof text"), + CLAY_TEXT_CONFIG({ .textColor = { 0xff, 0xff, 0xff, 0xff } })); + } + CLAY({ + .border = { .width = { 1, 1, 1, 1, 1 }, .color = { 0x00, 0x00, 0xaa, 0xff } }, + }) { + CLAY_TEXT(CLAY_STRING("this text\nis long enough\nto display all\n borders\naround it"), + CLAY_TEXT_CONFIG({ .textColor = { 0xff, 0xff, 0xff, 0xff } })); + } + } +} + +Clay_RenderCommandArray CreateLayout(image image) +{ + Clay_BeginLayout(); + CLAY({ + .layout = { + .sizing = { + .width = CLAY_SIZING_GROW(), + .height = CLAY_SIZING_GROW() + }, + .childAlignment = { + .x = CLAY_ALIGN_X_CENTER, + .y = CLAY_ALIGN_Y_CENTER + }, + .childGap = 64 + }, + .backgroundColor = { 0x24, 0x24, 0x24, 0xff } + }) { + CLAY({ + .layout = { + .childAlignment = { + .x = CLAY_ALIGN_X_RIGHT, + }, + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .sizing = CLAY_SIZING_FIT(), + }, + }) { + component_keybinds(); + component_unicode_text(); + } + CLAY({ + .layout = { + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .childGap = 32, + .sizing = CLAY_SIZING_FIT(), + }, + }) { + component_termbox_settings(); + component_image(image); + component_image(image); + component_mouse_data(); + component_bordered_text(); + } + + component_color_palette(); + } + return Clay_EndLayout(); +} + + +// ------------------------------------------------------------------------------------------------- +// -- Interactive functions + +void handle_clay_errors(Clay_ErrorData errorData) +{ + Clay_Termbox_Close(); + fprintf(stderr, "%s", errorData.errorText.chars); + exit(1); +} + +/** + Process events received from termbox2 and handle interaction + */ +void handle_termbox_events(void) +{ + // Wait up to 100ms for an event (key/mouse press, terminal resize) before continuing + // If an event is already available, this doesn't wait. Will not wait due to the previous call + // to termbox_waitfor_event. Increasing the wait time reduces load without reducing + // responsiveness (but will of course prevent other code from running on this thread while it's + // waiting) + struct tb_event evt; + int ms_to_wait = 100; + int err = tb_peek_event(&evt, ms_to_wait); + + switch (err) { + default: + case TB_ERR_NO_EVENT: { + break; + } + case TB_ERR_POLL: { + if (EINTR != tb_last_errno()) { + Clay_Termbox_Close(); + fprintf(stderr, "Failed to read event from TTY\n"); + exit(1); + } + break; + } + case TB_OK: { + switch (evt.type) { + case TB_EVENT_RESIZE: { + Clay_SetLayoutDimensions((Clay_Dimensions) { + Clay_Termbox_Width(), + Clay_Termbox_Height() + }); + break; + } + case TB_EVENT_KEY: { + if (TB_KEY_CTRL_C == evt.key) { + end_loop = true; + break; + } + switch (evt.ch) { + case 'q': + case 'Q': { + end_loop = true; + break; + } + case 'd': + case 'D': { + debugMode = !debugMode; + Clay_SetDebugModeEnabled(debugMode); + break; + } + case 'c': { + int new_mode = clay_tb_color_mode - 1; + new_mode = (0 <= new_mode) ? new_mode : TB_OUTPUT_TRUECOLOR; + Clay_Termbox_Set_Color_Mode(new_mode); + break; + } + case 'C': { + int new_mode = (clay_tb_color_mode + 1) % (TB_OUTPUT_TRUECOLOR + 1); + Clay_Termbox_Set_Color_Mode(new_mode); + break; + } + case 'b': { + enum border_mode new_mode = clay_tb_border_mode - 1; + new_mode = (CLAY_TB_BORDER_MODE_DEFAULT < new_mode) + ? new_mode + : CLAY_TB_BORDER_MODE_MINIMUM; + Clay_Termbox_Set_Border_Mode(new_mode); + break; + } + case 'B': { + enum border_mode new_mode = (clay_tb_border_mode + 1) + % (CLAY_TB_BORDER_MODE_MINIMUM + 1); + new_mode = (CLAY_TB_BORDER_MODE_DEFAULT < new_mode) + ? new_mode + : CLAY_TB_BORDER_MODE_ROUND; + Clay_Termbox_Set_Border_Mode(new_mode); + break; + } + case 'h': { + enum border_chars new_chars = clay_tb_border_chars - 1; + new_chars = (CLAY_TB_BORDER_CHARS_DEFAULT < new_chars) + ? new_chars + : CLAY_TB_BORDER_CHARS_NONE; + Clay_Termbox_Set_Border_Chars(new_chars); + break; + } + case 'H': { + enum border_chars new_chars + = (clay_tb_border_chars + 1) % (CLAY_TB_BORDER_CHARS_NONE + 1); + new_chars = (CLAY_TB_BORDER_CHARS_DEFAULT < new_chars) + ? new_chars + : CLAY_TB_BORDER_CHARS_ASCII; + Clay_Termbox_Set_Border_Chars(new_chars); + break; + } + case 't': + case 'T': { + Clay_Termbox_Set_Transparency(!clay_tb_transparency); + } + } + break; + } + case TB_EVENT_MOUSE: { + Clay_Vector2 mousePosition = { + (float)evt.x * Clay_Termbox_Cell_Width(), + (float)evt.y * Clay_Termbox_Cell_Height() + }; + + // Mouse release events may not be produced by all terminals, and will + // be sent during hover, so can't be used to detect when the mouse has + // been released + + switch (evt.key) { + case TB_KEY_MOUSE_LEFT: { + Clay_SetPointerState(mousePosition, true); + break; + } + case TB_KEY_MOUSE_RIGHT: { + Clay_SetPointerState(mousePosition, false); + break; + } + case TB_KEY_MOUSE_MIDDLE: { + Clay_SetPointerState(mousePosition, false); + break; + } + case TB_KEY_MOUSE_RELEASE: { + Clay_SetPointerState(mousePosition, false); + break; + } + case TB_KEY_MOUSE_WHEEL_UP: { + Clay_Vector2 scrollDelta = { 0, 1 * Clay_Termbox_Cell_Height() }; + Clay_UpdateScrollContainers(false, scrollDelta, 1); + break; + } + case TB_KEY_MOUSE_WHEEL_DOWN: { + Clay_Vector2 scrollDelta = { 0, -1 * Clay_Termbox_Cell_Height() }; + Clay_UpdateScrollContainers(false, scrollDelta, 1); + break; + } + default: { + break; + } + } + break; + } + default: { + break; + } + } + break; + } + } +} + +int main(void) +{ + image shark_image = load_image("resources/512px-Shark_antwerp_zoo.jpeg"); + if (NULL == shark_image.data) { exit(1); } + + int num_elements = 3 * 8192; + Clay_SetMaxElementCount(num_elements); + + uint64_t size = Clay_MinMemorySize(); + void *memory = malloc(size); + if (NULL == memory) { exit(1); } + + Clay_Arena clay_arena = Clay_CreateArenaWithCapacityAndMemory(size, memory); + + Clay_Termbox_Initialize( + TB_OUTPUT_256, CLAY_TB_BORDER_MODE_DEFAULT, CLAY_TB_BORDER_CHARS_DEFAULT, false); + + Clay_Initialize(clay_arena, (Clay_Dimensions) { Clay_Termbox_Width(), Clay_Termbox_Height() }, + (Clay_ErrorHandler) { handle_clay_errors, NULL }); + + Clay_SetMeasureTextFunction(Clay_Termbox_MeasureText, NULL); + + // Initial render before waiting for events + Clay_SetLayoutDimensions((Clay_Dimensions) { Clay_Termbox_Width(), Clay_Termbox_Height() }); + Clay_RenderCommandArray commands = CreateLayout(shark_image); + tb_clear(); + Clay_Termbox_Render(commands); + tb_present(); + + while (!end_loop) { + // Block until event is available. Optional, but reduces load since this demo is purely + // synchronous to user input. + termbox_waitfor_event(); + + handle_termbox_events(); + + Clay_RenderCommandArray commands = CreateLayout(shark_image); + + tb_clear(); + Clay_Termbox_Render(commands); + tb_present(); + } + + Clay_Termbox_Close(); + free_image(shark_image); + return 0; +} diff --git a/examples/termbox2-demo/readme.md b/examples/termbox2-demo/readme.md new file mode 100644 index 0000000..4a8f305 --- /dev/null +++ b/examples/termbox2-demo/readme.md @@ -0,0 +1,61 @@ +# Termbox2 renderer demo + +Terminal-based renderer using [termbox2](https://github.com/termbox/termbox2) + +This demo shows a color palette and a few different components. It allows +changing configuration settings for colors, border size rounding mode, +characters used for borders, and transparency. + +``` +Keybinds: +c/C - Cycle through color modes +b/B - Cycle through border modes +h/H - Cycle through border characters +t/T - Toggle transparency +d/D - Toggle debug mode +q/Q - Quit +``` + +Configuration can be also be overriden by environment variables: +- `CLAY_TB_COLOR_MODE` + - `NORMAL` + - `256` + - `216` + - `GRAYSCALE` + - `TRUECOLOR` + - `NOCOLOR` +- `CLAY_TB_BORDER_CHARS` + - `DEFAULT` + - `ASCII` + - `UNICODE` + - `NONE` +- `CLAY_TB_TRANSPARENCY` + - `1` + - `0` +- `CLAY_TB_CELL_PIXELS` + - `widthxheight` + +## Building + +Build the binary with cmake + +```sh +mkdir build +cd build +cmake .. +make +``` + +Then run the executable: + +```sh +./clay_examples_termbox2_demo +``` + +## Attributions + +Resources used: +- `512px-Shark_antwerp_zoo.jpeg` + - Retrieved from + - License: [Creative Commons Attribution 3.0 Unported](https://creativecommons.org/licenses/by/3.0/deed.en) + - No changes made diff --git a/examples/termbox2-demo/resources/512px-Shark_antwerp_zoo.jpeg b/examples/termbox2-demo/resources/512px-Shark_antwerp_zoo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a487d8e8d2e6e2dd86fcec75c6a2513386f5da5f GIT binary patch literal 67516 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 vrmE9$R;wbinrA3T1`V}0m?N$6B(j{eWF