mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-12 10:39:04 -04:00
[sprixel_create] eliminate copy of glyph
This commit is contained in:
parent
fac56fc2cc
commit
11685e77cc
@ -755,7 +755,7 @@ void sprixel_free(sprixel* s);
|
|||||||
void sprixel_invalidate(sprixel* s);
|
void sprixel_invalidate(sprixel* s);
|
||||||
void sprixel_hide(sprixel* s);
|
void sprixel_hide(sprixel* s);
|
||||||
// dimy and dimx are cell geometry, not pixel
|
// dimy and dimx are cell geometry, not pixel
|
||||||
sprixel* sprixel_create(ncplane* n, const char* s, int bytes, int placey, int placex,
|
sprixel* sprixel_create(ncplane* n, char* s, int bytes, int placey, int placex,
|
||||||
int sprixelid, int dimy, int dimx, int pixy, int pixx,
|
int sprixelid, int dimy, int dimx, int pixy, int pixx,
|
||||||
int parse_start, int* tacache);
|
int parse_start, int* tacache);
|
||||||
API int sprite_wipe_cell(const notcurses* nc, sprixel* s, int y, int x);
|
API int sprite_wipe_cell(const notcurses* nc, sprixel* s, int y, int x);
|
||||||
@ -1160,7 +1160,7 @@ egc_rtl(const char* egc, int* bytes){
|
|||||||
// a reference to the context-wide sprixel cache. this ought be an entirely
|
// a reference to the context-wide sprixel cache. this ought be an entirely
|
||||||
// new, purpose-specific plane.
|
// new, purpose-specific plane.
|
||||||
static inline int
|
static inline int
|
||||||
plane_blit_sixel(ncplane* n, const char* s, int bytes, int placey, int placex,
|
plane_blit_sixel(ncplane* n, char* s, int bytes, int placey, int placex,
|
||||||
int leny, int lenx, int sprixelid, int dimy, int dimx,
|
int leny, int lenx, int sprixelid, int dimy, int dimx,
|
||||||
int parse_start, int* tacache){
|
int parse_start, int* tacache){
|
||||||
sprixel* spx = sprixel_create(n, s, bytes, placey, placex, sprixelid,
|
sprixel* spx = sprixel_create(n, s, bytes, placey, placex, sprixelid,
|
||||||
|
@ -303,6 +303,7 @@ int kitty_blit(ncplane* nc, int linesize, const void* data,
|
|||||||
free(buf);
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
// takes ownership of |buf| on success
|
||||||
if(plane_blit_sixel(nc, buf, size, bargs->placey, bargs->placex,
|
if(plane_blit_sixel(nc, buf, size, bargs->placey, bargs->placex,
|
||||||
rows, cols, bargs->u.pixel.sprixelid, leny, lenx,
|
rows, cols, bargs->u.pixel.sprixelid, leny, lenx,
|
||||||
parse_start, tacache) < 0){
|
parse_start, tacache) < 0){
|
||||||
@ -310,7 +311,6 @@ int kitty_blit(ncplane* nc, int linesize, const void* data,
|
|||||||
free(buf);
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
free(buf);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,6 +507,7 @@ int sixel_blit_inner(ncplane* nc, int leny, int lenx, sixeltable* stab,
|
|||||||
free(buf);
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
// takes ownership of |buf| on success
|
||||||
if(plane_blit_sixel(nc, buf, size, bargs->placey, bargs->placex,
|
if(plane_blit_sixel(nc, buf, size, bargs->placey, bargs->placex,
|
||||||
rows, cols, bargs->u.pixel.sprixelid, leny, lenx,
|
rows, cols, bargs->u.pixel.sprixelid, leny, lenx,
|
||||||
parse_start, tacache) < 0){
|
parse_start, tacache) < 0){
|
||||||
@ -514,7 +515,6 @@ int sixel_blit_inner(ncplane* nc, int leny, int lenx, sixeltable* stab,
|
|||||||
free(buf);
|
free(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
free(buf);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,15 +30,12 @@ sprixel* sprixel_by_id(notcurses* nc, uint32_t id){
|
|||||||
}
|
}
|
||||||
|
|
||||||
// y and x are the cell geometry, not the pixel geometry
|
// y and x are the cell geometry, not the pixel geometry
|
||||||
sprixel* sprixel_create(ncplane* n, const char* s, int bytes, int placey, int placex,
|
sprixel* sprixel_create(ncplane* n, char* s, int bytes, int placey, int placex,
|
||||||
int sprixelid, int dimy, int dimx, int pixy, int pixx,
|
int sprixelid, int dimy, int dimx, int pixy, int pixx,
|
||||||
int parse_start, int* tacache){
|
int parse_start, int* tacache){
|
||||||
sprixel* ret = malloc(sizeof(sprixel));
|
sprixel* ret = malloc(sizeof(sprixel));
|
||||||
if(ret){
|
if(ret){
|
||||||
if((ret->glyph = memdup(s, bytes + 1)) == NULL){
|
ret->glyph = s;
|
||||||
free(ret);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
ret->glyphlen = bytes;
|
ret->glyphlen = bytes;
|
||||||
ret->tacache = tacache;
|
ret->tacache = tacache;
|
||||||
ret->invalidated = SPRIXEL_INVALIDATED;
|
ret->invalidated = SPRIXEL_INVALIDATED;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user