From b3c91ca4dda192993497bf9e47c9e84083bcc3d9 Mon Sep 17 00:00:00 2001 From: nick black Date: Sun, 18 Apr 2021 16:09:26 -0400 Subject: [PATCH] sprixel_state: deal with margins #1561 --- src/lib/internal.h | 2 +- src/lib/kitty.c | 4 +++- src/lib/render.c | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lib/internal.h b/src/lib/internal.h index 49cce271b..8d2a5cc15 100644 --- a/src/lib/internal.h +++ b/src/lib/internal.h @@ -993,11 +993,11 @@ sprixel_state(const sprixel* s, int y, int x){ const ncplane* stdn = notcurses_stdplane_const(ncplane_notcurses_const(s->n)); int localy = y - (s->n->absy - stdn->absy); int localx = x - (s->n->absx - stdn->absx); +//fprintf(stderr, "TAM %d at %d/%d (%d/%d)\n", s->n->tacache[localy * s->dimx + localx], localy, localx, y, x); assert(localy >= 0); assert(localy < s->dimy); assert(localx >= 0); assert(localx < s->dimx); -//fprintf(stderr, "TAM %d at %d/%d (%d/%d)\n", s->n->tacache[localy * s->dimx + localx], localy, localx, y, x); return s->n->tacache[localy * s->dimx + localx]; } diff --git a/src/lib/kitty.c b/src/lib/kitty.c index 8f8bd61bf..f6c32274b 100644 --- a/src/lib/kitty.c +++ b/src/lib/kitty.c @@ -381,8 +381,10 @@ int kitty_delete(const notcurses* nc, const ncpile* p, FILE* out, sprixel* s){ for(int xx = s->movedfromx ; xx < s->movedfromx + s->dimx && xx < p->dimx ; ++xx){ struct crender *r = &p->crender[yy * p->dimx + xx]; if(s->n){ + const ncplane* stdn = notcurses_stdplane_const(nc); //fprintf(stderr, "CHECKING %d/%d\n", yy - s->movedfromy, xx - s->movedfromx); - sprixcell_e state = sprixel_state(s, yy, xx); + sprixcell_e state = sprixel_state(s, yy - s->movedfromy + s->n->absy - stdn->absy, + xx - s->movedfromx + s->n->absx - stdn->absx); if(state != SPRIXCELL_OPAQUE){ //fprintf(stderr, "DAMAGING %d/%d!\n", yy, xx); r->s.damaged = 1; diff --git a/src/lib/render.c b/src/lib/render.c index 8613dc625..b859f1733 100644 --- a/src/lib/render.c +++ b/src/lib/render.c @@ -1022,8 +1022,8 @@ rasterize_core(notcurses* nc, const ncpile* p, FILE* out, unsigned phase){ // this is used to invalidate the sprixel in the first text round, // which is only necessary for sixel, not kitty. if(rvec[damageidx].sprixel - && sprixel_state(rvec[damageidx].sprixel, y, x) != SPRIXCELL_TRANSPARENT - && sprixel_state(rvec[damageidx].sprixel, y, x) != SPRIXCELL_ANNIHILATED + && sprixel_state(rvec[damageidx].sprixel, y - nc->stdplane->absy, x - nc->stdplane->absx) != SPRIXCELL_TRANSPARENT + && sprixel_state(rvec[damageidx].sprixel, y - nc->stdplane->absy, x - nc->stdplane->absx) != SPRIXCELL_ANNIHILATED && !rvec[damageidx].s.p_beats_sprixel && !sprixel_kitty_p(&nc->tcache)){ //fprintf(stderr, "INVALIDATING at %d/%d (%u)\n", y, x, rvec[damageidx].s.p_beats_sprixel);