ncdirect_style_emit/render: take palette-indexing into account

pull/1708/head
nick black 3 years ago
parent 8cf235e6b7
commit 52ebb71ac9
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -828,16 +828,28 @@ ncdirect_style_emit(ncdirect* n, unsigned stylebits, FILE* out){
if(r == 0){
// emitting an sgr resets colors. if we want to be default, that's no
// problem, and our channels remain correct. otherwise, clear our
// channel, and set them back up. FIXME need to handle palette colors
// channel, and set them back up.
if(!ncdirect_fg_default_p(n)){
uint32_t fg = ncchannels_fg_rgb(n->channels);
ncchannels_set_fg_default(&n->channels);
r |= ncdirect_set_fg_rgb(n, fg);
if(!ncdirect_fg_palindex_p(n)){
uint32_t fg = ncchannels_fg_rgb(n->channels);
ncchannels_set_fg_default(&n->channels);
r |= ncdirect_set_fg_rgb(n, fg);
}else{ // palette-indexed
uint32_t fg = ncchannels_fg_palindex(n->channels);
ncchannels_set_fg_default(&n->channels);
r |= ncdirect_set_fg_palindex(n, fg);
}
}
if(!ncdirect_bg_default_p(n)){
uint32_t bg = ncchannels_fg_rgb(n->channels);
ncchannels_set_bg_default(&n->channels);
r |= ncdirect_set_bg_rgb(n, bg);
if(!ncdirect_bg_palindex_p(n)){
uint32_t bg = ncchannels_bg_rgb(n->channels);
ncchannels_set_bg_default(&n->channels);
r |= ncdirect_set_bg_rgb(n, bg);
}else{ // palette-indexed
uint32_t bg = ncchannels_bg_palindex(n->channels);
ncchannels_set_bg_default(&n->channels);
r |= ncdirect_set_bg_palindex(n, bg);
}
}
}
return r;

@ -1555,15 +1555,25 @@ ncdirect_channels(const ncdirect* nc){
}
static inline bool
ncdirect_fg_default_p(const struct ncdirect* nc){
ncdirect_fg_default_p(const ncdirect* nc){
return ncchannels_fg_default_p(ncdirect_channels(nc));
}
static inline bool
ncdirect_bg_default_p(const struct ncdirect* nc){
ncdirect_bg_default_p(const ncdirect* nc){
return ncchannels_bg_default_p(ncdirect_channels(nc));
}
static inline bool
ncdirect_fg_palindex_p(const ncdirect* nc){
return ncchannels_fg_palindex_p(ncdirect_channels(nc));
}
static inline bool
ncdirect_bg_palindex_p(const ncdirect* nc){
return ncchannels_bg_palindex_p(ncdirect_channels(nc));
}
int term_fg_rgb8(const tinfo* ti, FILE* out, unsigned r, unsigned g, unsigned b);
const struct blitset* lookup_blitset(const tinfo* tcache, ncblitter_e setid, bool may_degrade);

@ -1449,8 +1449,8 @@ int ncdirect_set_bg_rgb(ncdirect* nc, unsigned rgb){
if(rgb > 0xffffffu){
return -1;
}
// FIXME need verify we're not palette, either
if(!ncdirect_bg_default_p(nc) && ncchannels_bg_rgb(nc->channels) == rgb){
if(!ncdirect_bg_default_p(nc) && !ncdirect_bg_palindex_p(nc)
&& ncchannels_bg_rgb(nc->channels) == rgb){
return 0;
}
if(term_bg_rgb8(&nc->tcache, nc->ttyfp, (rgb & 0xff0000u) >> 16u, (rgb & 0xff00u) >> 8u, rgb & 0xffu)){
@ -1464,8 +1464,8 @@ int ncdirect_set_fg_rgb(ncdirect* nc, unsigned rgb){
if(rgb > 0xffffffu){
return -1;
}
// FIXME need verify we're not palette, either
if(!ncdirect_fg_default_p(nc) && ncchannels_fg_rgb(nc->channels) == rgb){
if(!ncdirect_fg_default_p(nc) && !ncdirect_fg_palindex_p(nc)
&& ncchannels_fg_rgb(nc->channels) == rgb){
return 0;
}
if(term_fg_rgb8(&nc->tcache, nc->ttyfp, (rgb & 0xff0000u) >> 16u, (rgb & 0xff00u) >> 8u, rgb & 0xffu)){

Loading…
Cancel
Save