From 25d0366fe69e12bddbcd61c9af5b09a45ed35c11 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Sat, 11 Nov 2006 08:44:14 +0000 Subject: [PATCH] * Get rid of _cucul_attr_to_ansi4[fb]g() and replace all calls with the now official cucul_attr_to_ansi_[fb]g(). --- caca/driver_slang.c | 10 ++++++++-- caca/driver_win32.c | 7 ++++--- cucul/attr.c | 20 -------------------- cucul/export.c | 28 +++++++++++++++------------- 4 files changed, 27 insertions(+), 38 deletions(-) diff --git a/caca/driver_slang.c b/caca/driver_slang.c index 189e920..93e31fe 100644 --- a/caca/driver_slang.c +++ b/caca/driver_slang.c @@ -217,8 +217,14 @@ static void slang_display(caca_display_t *dp) * here for, and in cases where SLang does not render * bright backgrounds, it's just fucked up. */ #if 0 - uint8_t fgcolor = _cucul_attr_to_ansi4fg(*attrs); - uint8_t bgcolor = _cucul_attr_to_ansi4bg(*attrs); + uint8_t fgcolor = cucul_attr_to_ansi_fg(*attrs); + uint8_t bgcolor = cucul_attr_to_ansi_bg(*attrs); + + if(fgcolor >= 0x10) + fgcolor = CUCUL_LIGHTGRAY; + + if(bgcolor >= 0x10) + bgcolor = CUCUL_BLACK; /* FIXME: handle transparency */ if(fgcolor == bgcolor) { diff --git a/caca/driver_win32.c b/caca/driver_win32.c index e4b6cb0..fca0d1c 100644 --- a/caca/driver_win32.c +++ b/caca/driver_win32.c @@ -198,6 +198,8 @@ static void win32_display(caca_display_t *dp) for(n = dp->cv->height * dp->cv->width; n--; ) { uint32_t ch = *chars++; + uint8_t fg = cucul_attr_to_ansi_fg(*attrs); + uint8_t bg = cucul_attr_to_ansi_bg(*attrs); #if 0 if(ch > 0x00000020 && ch < 0x00000080) @@ -213,9 +215,8 @@ static void win32_display(caca_display_t *dp) buffer->Char.UnicodeChar = (uint16_t)' '; #endif - buffer->Attributes = - win32_fg_palette[_cucul_attr_to_ansi4fg(*attrs)] - | win32_bg_palette[_cucul_attr_to_ansi4bg(*attrs)]; + buffer->Attributes = win32_fg_palette[fg < 0x10 ? fg : CUCUL_LIGHTGRAY] + | win32_bg_palette[bg < 0x10 ? bg : CUCUL_BLACK]; attrs++; buffer++; } diff --git a/cucul/attr.c b/cucul/attr.c index 4f0ed0b..1f67887 100644 --- a/cucul/attr.c +++ b/cucul/attr.c @@ -350,26 +350,6 @@ uint8_t _cucul_attr_to_ansi8(uint32_t attr) return fg | (bg << 4); } -uint8_t _cucul_attr_to_ansi4fg(uint32_t attr) -{ - uint8_t c = nearest_ansi((attr >> 4) & 0x3fff); - - if(c == CUCUL_DEFAULT || c == CUCUL_TRANSPARENT) - return CUCUL_LIGHTGRAY; - - return c; -} - -uint8_t _cucul_attr_to_ansi4bg(uint32_t attr) -{ - uint8_t c = nearest_ansi(attr >> 18); - - if(c == CUCUL_DEFAULT || c == CUCUL_TRANSPARENT) - return CUCUL_BLACK; - - return c; -} - uint16_t _cucul_attr_to_rgb12fg(uint32_t attr) { uint16_t fg = (attr >> 4) & 0x3fff; diff --git a/cucul/export.c b/cucul/export.c index 3a35be4..ebbf080 100644 --- a/cucul/export.c +++ b/cucul/export.c @@ -288,15 +288,16 @@ static void *export_utf8(cucul_canvas_t *cv, unsigned long int *bytes, int cr) { uint32_t attr = lineattr[x]; uint32_t ch = linechar[x]; - uint8_t fg, bg; + uint8_t ansifg, ansibg, fg, bg; if(ch == CUCUL_MAGIC_FULLWIDTH) continue; - fg = (((attr >> 4) & 0x3fff) == (CUCUL_DEFAULT | 0x40)) ? - 0x10 : palette[_cucul_attr_to_ansi4fg(attr)]; - bg = (((attr >> 18) & 0x3fff) == (CUCUL_TRANSPARENT | 0x40)) ? - 0x10 : palette[_cucul_attr_to_ansi4bg(attr)]; + ansifg = cucul_attr_to_ansi_fg(attr); + ansibg = cucul_attr_to_ansi_bg(attr); + + fg = ansifg < 0x10 ? palette[ansifg] : 0x10; + bg = ansibg < 0x10 ? palette[ansibg] : 0x10; /* TODO: the [0 could be omitted in some cases */ if(fg != prevfg || bg != prevbg) @@ -363,8 +364,10 @@ static void *export_ansi(cucul_canvas_t *cv, unsigned long int *bytes) for(x = 0; x < cv->width; x++) { - uint8_t fg = palette[_cucul_attr_to_ansi4fg(lineattr[x])]; - uint8_t bg = palette[_cucul_attr_to_ansi4bg(lineattr[x])]; + uint8_t ansifg = cucul_attr_to_ansi_fg(lineattr[x]); + uint8_t ansibg = cucul_attr_to_ansi_bg(lineattr[x]); + uint8_t fg = ansifg < 0x10 ? palette[ansifg] : CUCUL_LIGHTGRAY; + uint8_t bg = ansibg < 0x10 ? palette[ansibg] : CUCUL_BLACK; uint32_t ch = linechar[x]; if(ch == CUCUL_MAGIC_FULLWIDTH) @@ -614,18 +617,17 @@ static void *export_irc(cucul_canvas_t *cv, unsigned long int *bytes) for(x = 0; x < cv->width; x++) { uint32_t attr = lineattr[x]; - uint8_t fg = palette[_cucul_attr_to_ansi4fg(attr)]; - uint8_t bg = palette[_cucul_attr_to_ansi4bg(attr)]; uint32_t ch = linechar[x]; + uint8_t ansifg, ansibg, fg, bg; if(ch == CUCUL_MAGIC_FULLWIDTH) continue; - if(((attr >> 4) & 0x3fff) == (CUCUL_DEFAULT | 0x40)) - fg = 0x10; + ansifg = cucul_attr_to_ansi_fg(attr); + ansibg = cucul_attr_to_ansi_bg(attr); - if(((attr >> 18) & 0x3fff) == (CUCUL_TRANSPARENT | 0x40)) - bg = 0x10; + fg = ansifg < 0x10 ? palette[ansifg] : 0x10; + bg = ansibg < 0x10 ? palette[ansibg] : 0x10; /* TODO: optimise series of same fg / same bg * don't change fg value if ch == ' '