Fast and reasonably complete (framebuffer) terminal emulator (Zig fork)

Add bright default FG/BG support

mintsuki 5798447d d519713f

Changed files
+55
backends
+27
backends/framebuffer.c
···
ctx->text_bg = 0xffffffff;
}
+
static void fbterm_set_text_fg_default_bright(struct term_context *_ctx) {
+
struct fbterm_context *ctx = (void *)_ctx;
+
+
ctx->text_fg = ctx->default_fg_bright;
+
}
+
+
static void fbterm_set_text_bg_default_bright(struct term_context *_ctx) {
+
struct fbterm_context *ctx = (void *)_ctx;
+
+
ctx->text_bg = ctx->default_bg_bright;
+
}
+
static void draw_cursor(struct term_context *_ctx) {
struct fbterm_context *ctx = (void *)_ctx;
···
uint32_t *canvas,
uint32_t *ansi_colours, uint32_t *ansi_bright_colours,
uint32_t *default_bg, uint32_t *default_fg,
+
uint32_t *default_bg_bright, uint32_t *default_fg_bright,
void *font, size_t font_width, size_t font_height, size_t font_spacing,
size_t font_scale_x, size_t font_scale_y,
size_t margin
···
ctx->default_fg = 0x00aaaaaa; // foreground (grey)
}
+
if (default_bg_bright != NULL) {
+
ctx->default_bg_bright = *default_bg_bright;
+
} else {
+
ctx->default_bg_bright = 0x00555555; // background (black)
+
}
+
+
if (default_fg_bright != NULL) {
+
ctx->default_fg_bright = *default_fg_bright;
+
} else {
+
ctx->default_fg_bright = 0x00ffffff; // foreground (grey)
+
}
+
ctx->text_fg = ctx->default_fg;
ctx->text_bg = 0xffffffff;
···
_ctx->set_text_bg_rgb = fbterm_set_text_bg_rgb;
_ctx->set_text_fg_default = fbterm_set_text_fg_default;
_ctx->set_text_bg_default = fbterm_set_text_bg_default;
+
_ctx->set_text_fg_default_bright = fbterm_set_text_fg_default_bright;
+
_ctx->set_text_bg_default_bright = fbterm_set_text_bg_default_bright;
_ctx->move_character = fbterm_move_character;
_ctx->scroll = fbterm_scroll;
_ctx->revscroll = fbterm_revscroll;
+2
backends/framebuffer.h
···
uint32_t ansi_colours[8];
uint32_t ansi_bright_colours[8];
uint32_t default_fg, default_bg;
+
uint32_t default_fg_bright, default_bg_bright;
size_t canvas_size;
uint32_t *canvas;
···
uint32_t *canvas,
uint32_t *ansi_colours, uint32_t *ansi_bright_colours,
uint32_t *default_bg, uint32_t *default_fg,
+
uint32_t *default_bg_bright, uint32_t *default_fg_bright,
void *font, size_t font_width, size_t font_height, size_t font_spacing,
size_t font_scale_x, size_t font_scale_y,
size_t margin
+24
term.c
···
} else {
ctx->set_text_bg_bright(ctx, ctx->current_primary);
}
+
} else {
+
if (!ctx->reverse_video) {
+
ctx->set_text_fg_default_bright(ctx);
+
} else {
+
ctx->set_text_bg_default_bright(ctx);
+
}
}
continue;
}
···
ctx->set_text_bg_bright(ctx, ctx->current_bg);
} else {
ctx->set_text_fg_bright(ctx, ctx->current_bg);
+
}
+
} else {
+
if (!ctx->reverse_video) {
+
ctx->set_text_bg_default_bright(ctx);
+
} else {
+
ctx->set_text_fg_default_bright(ctx);
}
}
continue;
···
} else {
ctx->set_text_bg(ctx, ctx->current_primary);
}
+
} else {
+
if (!ctx->reverse_video) {
+
ctx->set_text_fg_default(ctx);
+
} else {
+
ctx->set_text_bg_default(ctx);
+
}
}
continue;
}
···
ctx->set_text_bg(ctx, ctx->current_bg);
} else {
ctx->set_text_fg(ctx, ctx->current_bg);
+
}
+
} else {
+
if (!ctx->reverse_video) {
+
ctx->set_text_bg_default(ctx);
+
} else {
+
ctx->set_text_fg_default(ctx);
}
}
continue;
+2
term.h
···
void (*set_text_bg_rgb)(struct term_context *, uint32_t bg);
void (*set_text_fg_default)(struct term_context *);
void (*set_text_bg_default)(struct term_context *);
+
void (*set_text_fg_default_bright)(struct term_context *);
+
void (*set_text_bg_default_bright)(struct term_context *);
void (*move_character)(struct term_context *, size_t new_x, size_t new_y, size_t old_x, size_t old_y);
void (*scroll)(struct term_context *);
void (*revscroll)(struct term_context *);