···
440
+
/* Unscaled code path if font_scale_{x,y} == 1 */
441
+
static void plot_char_unscaled(struct flanterm_fb_context *ctx, struct flanterm_fb_char *c, size_t x, size_t y) {
442
+
uint32_t default_bg = ctx->default_bg;
444
+
x = ctx->offset_x + x * ctx->glyph_width;
445
+
y = ctx->offset_y + y * ctx->glyph_height;
447
+
bool *glyph = &ctx->font_bool[c->c * ctx->font_height * ctx->font_width];
448
+
// naming: fx,fy for font coordinates, gx,gy for glyph coordinates
449
+
for (size_t gy = 0; gy < ctx->glyph_height; gy++) {
450
+
volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4);
451
+
uint32_t *canvas_line = ctx->canvas + x + (y + gy) * ctx->width;
452
+
bool *glyph_pointer = glyph + (gy * ctx->font_width);
453
+
for (size_t fx = 0; fx < ctx->font_width; fx++) {
455
+
if (ctx->canvas != NULL) {
456
+
bg = c->bg == 0xffffffff ? canvas_line[fx] : c->bg;
457
+
fg = c->fg == 0xffffffff ? canvas_line[fx] : c->fg;
459
+
bg = c->bg == 0xffffffff ? default_bg : c->bg;
460
+
fg = c->fg == 0xffffffff ? default_bg : c->fg;
462
+
fb_line[fx] = *(glyph_pointer++) ? fg : bg;
static void plot_char(struct flanterm_context *_ctx, struct flanterm_fb_char *c, size_t x, size_t y) {
struct flanterm_fb_context *ctx = (void *)_ctx;
···
474
+
if(ctx->font_scale_x == 1 && ctx->font_scale_y == 1) {
475
+
plot_char_unscaled(ctx, c, x, y);
uint32_t default_bg = ctx->default_bg;
x = ctx->offset_x + x * ctx->glyph_width;
···
uint8_t fy = gy / ctx->font_scale_y;
volatile uint32_t *fb_line = ctx->framebuffer + x + (y + gy) * (ctx->pitch / 4);
uint32_t *canvas_line = ctx->canvas + x + (y + gy) * ctx->width;
490
+
bool *glyph_pointer = glyph + (fy * ctx->font_width);
for (size_t fx = 0; fx < ctx->font_width; fx++) {
459
-
bool draw = glyph[fy * ctx->font_width + fx];
for (size_t i = 0; i < ctx->font_scale_x; i++) {
size_t gx = ctx->font_scale_x * fx + i;
···
bg = c->bg == 0xffffffff ? default_bg : c->bg;
fg = c->fg == 0xffffffff ? default_bg : c->fg;
470
-
fb_line[gx] = draw ? fg : bg;
502
+
fb_line[gx] = *glyph_pointer ? fg : bg;