mirror of
https://github.com/dankamongmen/notcurses.git
synced 2024-11-20 03:25:47 +00:00
track unknown background color if we can't learn it #2226
This commit is contained in:
parent
e42a76a2d2
commit
c69849ffb1
@ -337,9 +337,13 @@ display_logo(struct ncplane* n, const char* path){
|
||||
|
||||
static void
|
||||
tinfo_debug_bitmaps(struct ncplane* n, const tinfo* ti, const char* indent){
|
||||
ncplane_printf(n, "%sdefbg 0x%06lx %sconsidered transparent", indent,
|
||||
ti->bg_collides_default & 0xfffffful,
|
||||
(ti->bg_collides_default & 0x01000000) ? "" : "not ");
|
||||
if(!(ti->bg_collides_default & 0x80000000)){
|
||||
ncplane_printf(n, "%sdefbg 0x%06lx %sconsidered transparent", indent,
|
||||
ti->bg_collides_default & 0xfffffful,
|
||||
(ti->bg_collides_default & 0x01000000) ? "" : "not ");
|
||||
}else{
|
||||
ncplane_printf(n, "couldn't detect default background");
|
||||
}
|
||||
finish_line(n);
|
||||
ncpixelimpl_e blit = notcurses_check_pixel_support(ncplane_notcurses(n));
|
||||
switch(blit){
|
||||
|
@ -146,6 +146,7 @@ static uint32_t
|
||||
highcontrast(const tinfo* ti, uint32_t bchannel){
|
||||
unsigned r, g, b;
|
||||
if(ncchannel_default_p(bchannel)){
|
||||
// FIXME what if we couldn't identify the background color?
|
||||
r = ncchannel_r(ti->bg_collides_default);
|
||||
g = ncchannel_g(ti->bg_collides_default);
|
||||
b = ncchannel_b(ti->bg_collides_default);
|
||||
@ -691,7 +692,7 @@ term_bg_rgb8(const tinfo* ti, fbuf* f, unsigned r, unsigned g, unsigned b){
|
||||
// we're also in that case working with hopefully more robust terminals.
|
||||
// If it doesn't work, eh, it doesn't work. Fuck the world; save yourself.
|
||||
if(ti->caps.rgb){
|
||||
if(ti->bg_collides_default){
|
||||
if((ti->bg_collides_default & 0xff000000) == 0x01000000){
|
||||
if((r == (ti->bg_collides_default & 0xff0000lu)) &&
|
||||
(g == (ti->bg_collides_default & 0xff00lu)) &&
|
||||
(b == (ti->bg_collides_default & 0xfflu))){
|
||||
|
@ -721,6 +721,7 @@ int interrogate_terminfo(tinfo* ti, const char* termtype, FILE* out, unsigned ut
|
||||
}
|
||||
*cursor_x = *cursor_y = -1;
|
||||
memset(ti, 0, sizeof(*ti));
|
||||
ti->bg_collides_default = 0xfe000000;
|
||||
ti->qterm = TERMINAL_UNKNOWN;
|
||||
// we don't need a controlling tty for everything we do; allow a failure here
|
||||
ti->ttyfd = get_tty_fd(out);
|
||||
@ -951,7 +952,11 @@ int interrogate_terminfo(tinfo* ti, const char* termtype, FILE* out, unsigned ut
|
||||
ti->cellpixy = ti->pixy / ti->default_rows;
|
||||
ti->cellpixx = ti->pixx / ti->default_cols;
|
||||
}
|
||||
ti->bg_collides_default = iresp->bg;
|
||||
if(iresp->got_bg){
|
||||
// reset the 0xfe000000 we loaded during initialization. if we're
|
||||
// kitty, we'll add the 0x01000000 in during heuristics.
|
||||
ti->bg_collides_default = iresp->bg;
|
||||
}
|
||||
// kitty trumps sixel, when both are available
|
||||
if((kitty_graphics = iresp->kitty_graphics) == 0){
|
||||
ti->color_registers = iresp->color_registers;
|
||||
@ -959,9 +964,7 @@ int interrogate_terminfo(tinfo* ti, const char* termtype, FILE* out, unsigned ut
|
||||
ti->sixel_maxx = iresp->sixelx;
|
||||
}
|
||||
free(iresp);
|
||||
}
|
||||
if(nocbreak){
|
||||
if(ti->ttyfd >= 0){
|
||||
if(nocbreak){
|
||||
// FIXME do this in input later, upon signaling completion?
|
||||
if(tcsetattr(ti->ttyfd, TCSANOW, ti->tpreserved)){
|
||||
goto err;
|
||||
|
@ -112,7 +112,8 @@ typedef struct tinfo {
|
||||
// kitty interprets an RGB background that matches the default background
|
||||
// color *as* the default background, meaning it'll be translucent if
|
||||
// background_opaque is in use. detect this, and avoid the default if so.
|
||||
// bg_collides_default is either 0x0000000 or (if in use) 0x1RRGGBB.
|
||||
// bg_collides_default is either:
|
||||
// 0xfexxxxxxx (unknown), 0x00RRGGBB (no collide), or 0x01RRGGBB (collides).
|
||||
uint32_t bg_collides_default;
|
||||
|
||||
// bitmap support. if we support bitmaps, pixel_implementation will be a
|
||||
|
Loading…
Reference in New Issue
Block a user