From 58cc6927ac995e1a9416812abfe5f1136a428c90 Mon Sep 17 00:00:00 2001 From: nick black Date: Mon, 16 Dec 2019 17:43:09 -0500 Subject: [PATCH] 256-color cube is not ansi, don't muddy the waters --- src/lib/internal.h | 4 ++-- src/lib/notcurses.c | 4 ++-- tests/internal.cpp | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lib/internal.h b/src/lib/internal.h index ef24b98e8..426abd7ff 100644 --- a/src/lib/internal.h +++ b/src/lib/internal.h @@ -168,13 +168,13 @@ flash_damage_map(unsigned char* damage, int count, bool val){ void ncplane_updamage(ncplane* n); // For our first attempt, O(1) uniform conversion from 8-bit r/g/b down to -// ~2.4-bit 6x6x6 ANSI cube + greyscale (assumed on entry; I know no way to +// ~2.4-bit 6x6x6 cube + greyscale (assumed on entry; I know no way to // even semi-portably recover the palette) proceeds via: map each 8-bit to // a 5-bit target grey. if all 3 components match, select that grey. // otherwise, c / 42.7 to map to 6 values. this never generates pure black // nor white, though, lame...FIXME static inline int -rgb_to_ansi256(unsigned r, unsigned g, unsigned b){ +rgb_quantize_256(unsigned r, unsigned g, unsigned b){ const unsigned GREYMASK = 0xf8; // if all 5 MSBs match, return grey from 24-member grey ramp or pure // black/white from original 16 (0 and 15, respectively) diff --git a/src/lib/notcurses.c b/src/lib/notcurses.c index a7ec532f9..5424348a2 100644 --- a/src/lib/notcurses.c +++ b/src/lib/notcurses.c @@ -947,7 +947,7 @@ term_bg_rgb8(notcurses* nc, FILE* out, unsigned r, unsigned g, unsigned b){ // a single screen, start... combining close ones? For 8-color mode, simple // interpolation. I have no idea what to do for 88 colors. FIXME if(nc->colors >= 256){ - term_emit("setab", tiparm(nc->setab, rgb_to_ansi256(r, g, b)), out, false); + term_emit("setab", tiparm(nc->setab, rgb_quantize_256(r, g, b)), out, false); } return -1; } @@ -968,7 +968,7 @@ term_fg_rgb8(notcurses* nc, FILE* out, unsigned r, unsigned g, unsigned b){ return -1; } if(nc->colors >= 256){ - term_emit("setaf", tiparm(nc->setaf, rgb_to_ansi256(r, g, b)), out, false); + term_emit("setaf", tiparm(nc->setaf, rgb_quantize_256(r, g, b)), out, false); } // For 256-color indexed mode, start constructing a palette based off // the inputs *if we can change the palette*. If more than 256 are used on diff --git a/tests/internal.cpp b/tests/internal.cpp index c57848f5e..3840b2f53 100644 --- a/tests/internal.cpp +++ b/tests/internal.cpp @@ -14,7 +14,7 @@ TEST_F(InternalsTest, RGBtoANSIWhite) { unsigned r, g, b; for(r = 250 ; r < 256 ; ++r){ g = b = r; - EXPECT_EQ(15, rgb_to_ansi256(r, g, b)); + EXPECT_EQ(15, rgb_quantize_256(r, g, b)); } } @@ -22,7 +22,7 @@ TEST_F(InternalsTest, RGBtoANSIBlack) { unsigned r, g, b; for(r = 0 ; r < 10 ; ++r){ g = b = r; - EXPECT_EQ(0, rgb_to_ansi256(r, g, b)); + EXPECT_EQ(0, rgb_quantize_256(r, g, b)); } } @@ -30,7 +30,7 @@ TEST_F(InternalsTest, RGBtoANSIGrey) { unsigned r, g, b; for(r = 10 ; r < 244 ; ++r){ g = b = r; - EXPECT_EQ(231 + (r * 5) / 49, rgb_to_ansi256(r, g, b)); + EXPECT_EQ(231 + (r * 5) / 49, rgb_quantize_256(r, g, b)); } } @@ -39,7 +39,7 @@ TEST_F(InternalsTest, RGBtoANSIRed) { unsigned r, g, b; g = b = 0x0; for(r = 0 ; r < 256 ; ++r){ - int c256 = rgb_to_ansi256(r, g, b); + int c256 = rgb_quantize_256(r, g, b); if(r < 8){ EXPECT_EQ(0, c256); }else{ @@ -54,7 +54,7 @@ TEST_F(InternalsTest, RGBtoANSIGreen) { unsigned r, g, b; r = b = 0x0; for(g = 0 ; g < 256 ; ++g){ - int c256 = rgb_to_ansi256(r, g, b); + int c256 = rgb_quantize_256(r, g, b); EXPECT_GT(48, c256); if(g < 8){ EXPECT_EQ(0, c256); @@ -70,7 +70,7 @@ TEST_F(InternalsTest, RGBtoANSIBlue) { unsigned r, g, b; r = g = 0x0; for(b = 0 ; b < 256 ; ++b){ - int c256 = rgb_to_ansi256(r, g, b); + int c256 = rgb_quantize_256(r, g, b); EXPECT_GT(22, c256); if(b < 8){ EXPECT_EQ(0, c256);