==> 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}