skip to content
==> tests/canvas.c <==
1/* Braille dots at the corners, a clipped diagonal, half blocks, layers. */
2#include "mesh/check.h"
3#include "tui/canvas.h"
4
5#include <string.h>
6
7int main(void) {
8    tui_arena a = {0};
9    tui_buffer b;
10    tui_buffer_init(&b, (tui_rect){0, 0, 2, 2});
11    double xb[2] = {0, 1}, yb[2] = {0, 1};
12    tui_canvas *c = tui_canvas_new(&a, 2, 2, xb, yb, TUI_MARKER_BRAILLE);
13    tui_point pts[2] = {{0, 1}, {1, 0}};
14    tui_canvas_points(c, pts, 2, TUI_RED);
15    tui_canvas_render(&a, c, NULL, TUI_RESET, b.area, &b);
16    CHECK_S(tui_cell_symbol(tui_buffer_cell(&b, 0, 0)), "⠁"); /* top left dot */
17    CHECK_S(tui_cell_symbol(tui_buffer_cell(&b, 1, 1)), "⢀"); /* bottom right dot */
18    CHECK(tui_color_eq(tui_buffer_cell(&b, 1, 1)->fg, TUI_RED));
19    CHECK_S(tui_cell_symbol(tui_buffer_cell(&b, 1, 0)), " ");
20    /* A diagonal from far outside is clipped to the window. */
21    tui_buffer_clear(&b, b.area);
22    c = tui_canvas_new(&a, 2, 2, xb, yb, TUI_MARKER_DOT);
23    tui_canvas_line(c, -1, -1, 2, 2, TUI_BLUE);
24    tui_canvas_render(&a, c, NULL, TUI_RESET, b.area, &b);
25    CHECK_S(tui_cell_symbol(tui_buffer_cell(&b, 0, 1)), "•");
26    CHECK_S(tui_cell_symbol(tui_buffer_cell(&b, 1, 0)), "•");
27    CHECK_S(tui_cell_symbol(tui_buffer_cell(&b, 0, 0)), " ");
28    /* Half blocks: two pixels a cell. */
29    tui_buffer_clear(&b, b.area);
30    c = tui_canvas_new(&a, 2, 2, xb, yb, TUI_MARKER_HALF_BLOCK);
31    tui_point top[1] = {{0, 1}};
32    tui_canvas_points(c, top, 1, TUI_GREEN);
33    tui_canvas_marker(c, TUI_MARKER_HALF_BLOCK);
34    tui_point bottom[1] = {{1, 0}};
35    tui_canvas_points(c, bottom, 1, TUI_RED);
36    tui_canvas_render(&a, c, NULL, TUI_RESET, b.area, &b);
37    CHECK_S(tui_cell_symbol(tui_buffer_cell(&b, 0, 0)), "▀");
38    CHECK_S(tui_cell_symbol(tui_buffer_cell(&b, 1, 1)), "▄");
39    tui_buffer_free(&b);
40    tui_arena_free(&a);
41    return mesh_check_done();
42}