From 9ad9448cd67e5a5e2f416cb7baad916266bbd3cf Mon Sep 17 00:00:00 2001 From: nick black Date: Mon, 15 Mar 2021 01:26:29 -0400 Subject: [PATCH] [pixels] rasterize sprixels post-raster #1401 --- src/lib/internal.h | 1 + src/lib/render.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/lib/internal.h b/src/lib/internal.h index d222f357c..591545d5e 100644 --- a/src/lib/internal.h +++ b/src/lib/internal.h @@ -352,6 +352,7 @@ typedef struct sprixel { int id; // embedded into glusters field of nccell int cols; int rows; + int invalidated; struct sprixel* next; } sprixel; diff --git a/src/lib/render.c b/src/lib/render.c index e10962db5..f0b9bdf16 100644 --- a/src/lib/render.c +++ b/src/lib/render.c @@ -918,6 +918,20 @@ emit_bg_palindex(notcurses* nc, FILE* out, const nccell* srccell){ return 0; } +static int +rasterize_sprixels(notcurses* nc, FILE* out){ + for(sprixel* s = nc->sprixelcache ; s ; s = s->next){ + if(s->invalidated){ + if(ncfputs(s->glyph, out) < 0){ + return -1; + } + s->invalidated = false; + nc->rstate.hardcursorpos = true; + } + } + return 0; +} + // Producing the frame requires three steps: // * render -- build up a flat framebuffer from a set of ncplanes // * rasterize -- build up a UTF-8/ASCII stream of escapes and EGCs @@ -1041,6 +1055,10 @@ notcurses_rasterize_inner(notcurses* nc, const ncpile* p, FILE* out){ //fprintf(stderr, "damageidx: %ld\n", damageidx); } } + if(rasterize_sprixels(nc, out)){ + return -1; + } + // FIXME now emit damaged cells sitting atop sprixels if(fflush(out)){ return -1; }