Fast and reasonably complete (framebuffer) terminal emulator (Zig fork)
1#ifndef _TERM_FRAMEBUFFER_H
2#define _TERM_FRAMEBUFFER_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8#include <stdint.h>
9#include <stddef.h>
10#include <stdbool.h>
11
12#include "../term.h"
13
14#define FBTERM_FONT_GLYPHS 256
15
16struct fbterm_char {
17 uint32_t c;
18 uint32_t fg;
19 uint32_t bg;
20};
21
22struct fbterm_queue_item {
23 size_t x, y;
24 struct fbterm_char c;
25};
26
27struct fbterm_context {
28 struct term_context term;
29
30 size_t font_width;
31 size_t font_height;
32 size_t glyph_width;
33 size_t glyph_height;
34
35 size_t font_scale_x;
36 size_t font_scale_y;
37
38 size_t offset_x, offset_y;
39
40 volatile uint32_t *framebuffer;
41 size_t pitch;
42 size_t width;
43 size_t height;
44 size_t bpp;
45
46 size_t font_bits_size;
47 uint8_t *font_bits;
48 size_t font_bool_size;
49 bool *font_bool;
50
51 uint32_t ansi_colours[8];
52 uint32_t ansi_bright_colours[8];
53 uint32_t default_fg, default_bg;
54
55 size_t canvas_size;
56 uint32_t *canvas;
57
58 size_t grid_size;
59 size_t queue_size;
60 size_t map_size;
61
62 struct fbterm_char *grid;
63
64 struct fbterm_queue_item *queue;
65 size_t queue_i;
66
67 struct fbterm_queue_item **map;
68
69 uint32_t text_fg;
70 uint32_t text_bg;
71 bool cursor_status;
72 size_t cursor_x;
73 size_t cursor_y;
74
75 uint32_t saved_state_text_fg;
76 uint32_t saved_state_text_bg;
77 size_t saved_state_cursor_x;
78 size_t saved_state_cursor_y;
79
80 size_t old_cursor_x;
81 size_t old_cursor_y;
82};
83
84struct term_context *fbterm_init(
85 void *(*_malloc)(size_t),
86 uint32_t *framebuffer, size_t width, size_t height, size_t pitch,
87 uint32_t *canvas,
88 uint32_t *ansi_colours, uint32_t *ansi_bright_colours,
89 uint32_t *default_bg, uint32_t *default_fg,
90 void *font, size_t font_width, size_t font_height, size_t font_spacing,
91 size_t font_scale_x, size_t font_scale_y,
92 size_t margin
93);
94
95#ifdef __cplusplus
96}
97#endif
98
99#endif