cucul_attr_to_argb64() (previously _cucul_attr_to_rgb12bg, _cucul_attr_to_rgb12fg and _cucul_attr_to_argb4) in the official libcucul API. * Cleanup complete: libcaca no longer depends on "cucul_internals.h".tags/v0.99.beta14
@@ -270,7 +270,7 @@ static BOOL s_quitting = NO; | |||||
attrs = _attrs + x + y * _w; | attrs = _attrs + x + y * _w; | ||||
NSColor* color = nil; | NSColor* color = nil; | ||||
#if USE_RGB12_FGBG | #if USE_RGB12_FGBG | ||||
uint16_t bg = _cucul_attr_to_rgb12bg(*attrs); | |||||
uint16_t bg = cucul_attr_to_rgb12_bg(*attrs); | |||||
if(bg) | if(bg) | ||||
{ | { | ||||
# ifdef PRECACHE_WHOLE_COLOR_TABLE | # ifdef PRECACHE_WHOLE_COLOR_TABLE | ||||
@@ -288,7 +288,7 @@ static BOOL s_quitting = NO; | |||||
} | } | ||||
#else | #else | ||||
uint8_t argb[8]; | uint8_t argb[8]; | ||||
_cucul_attr_to_argb4(*attrs, argb); | |||||
cucul_attr_to_argb64(*attrs, argb); | |||||
color = [NSColor colorWithCalibratedRed:((float)argb[1]) / 15.0 | color = [NSColor colorWithCalibratedRed:((float)argb[1]) / 15.0 | ||||
green:((float)argb[2]) / 15.0 | green:((float)argb[2]) / 15.0 | ||||
blue:((float)argb[3]) / 15.0 | blue:((float)argb[3]) / 15.0 | ||||
@@ -328,7 +328,7 @@ static BOOL s_quitting = NO; | |||||
{ | { | ||||
NSColor* color = nil; | NSColor* color = nil; | ||||
#if USE_RGB12_FGBG | #if USE_RGB12_FGBG | ||||
uint16_t fg = _cucul_attr_to_rgb12fg(*attrs); | |||||
uint16_t fg = cucul_attr_to_rgb12_fg(*attrs); | |||||
# ifdef PRECACHE_WHOLE_COLOR_TABLE | # ifdef PRECACHE_WHOLE_COLOR_TABLE | ||||
color = _colorCache[fg]; | color = _colorCache[fg]; | ||||
# else // PRECACHE_WHOLE_COLOR_TABLE | # else // PRECACHE_WHOLE_COLOR_TABLE | ||||
@@ -343,7 +343,7 @@ static BOOL s_quitting = NO; | |||||
# endif // PRECACHE_WHOLE_COLOR_TABLE | # endif // PRECACHE_WHOLE_COLOR_TABLE | ||||
#else // USE_RGB12_FGBG | #else // USE_RGB12_FGBG | ||||
uint8_t argb[8]; | uint8_t argb[8]; | ||||
_cucul_attr_to_argb4(*attrs, argb); | |||||
cucul_attr_to_argb64(*attrs, argb); | |||||
debug_log(@"x,y=[%d,%d] r,g,b back=[%u %u %u] front=[%u %u %u]", | debug_log(@"x,y=[%d,%d] r,g,b back=[%u %u %u] front=[%u %u %u]", | ||||
x, y, argb[1], argb[2], argb[3], argb[5], argb[6], argb[7]); | x, y, argb[1], argb[2], argb[3], argb[5], argb[6], argb[7]); | ||||
color = [NSColor colorWithCalibratedRed:((float)argb[5]) / 15.0 | color = [NSColor colorWithCalibratedRed:((float)argb[5]) / 15.0 | ||||
@@ -37,7 +37,6 @@ | |||||
#include <stdio.h> | #include <stdio.h> | ||||
#include "cucul.h" | #include "cucul.h" | ||||
#include "cucul_internals.h" | |||||
#include "caca.h" | #include "caca.h" | ||||
#include "caca_internals.h" | #include "caca_internals.h" | ||||
@@ -227,7 +226,7 @@ static void gl_display(caca_display_t *dp) | |||||
/* FIXME: optimise using stride */ | /* FIXME: optimise using stride */ | ||||
for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width) | for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width) | ||||
{ | { | ||||
uint16_t bg = _cucul_attr_to_rgb12bg(*attrs++); | |||||
uint16_t bg = cucul_attr_to_rgb12_bg(*attrs++); | |||||
glColor4b(((bg & 0xf00) >> 8) * 8, | glColor4b(((bg & 0xf00) >> 8) * 8, | ||||
((bg & 0x0f0) >> 4) * 8, | ((bg & 0x0f0) >> 4) * 8, | ||||
@@ -279,7 +278,7 @@ static void gl_display(caca_display_t *dp) | |||||
dp->drv.p->txid[b + ch | dp->drv.p->txid[b + ch | ||||
- (uint32_t)dp->drv.p->blocks[i]]); | - (uint32_t)dp->drv.p->blocks[i]]); | ||||
fg = _cucul_attr_to_rgb12fg(*attrs); | |||||
fg = cucul_attr_to_rgb12_fg(*attrs); | |||||
glColor3b(((fg & 0xf00) >> 8) * 8, | glColor3b(((fg & 0xf00) >> 8) * 8, | ||||
((fg & 0x0f0) >> 4) * 8, | ((fg & 0x0f0) >> 4) * 8, | ||||
(fg & 0x00f) * 8); | (fg & 0x00f) * 8); | ||||
@@ -34,7 +34,6 @@ | |||||
#include <string.h> | #include <string.h> | ||||
#include "cucul.h" | #include "cucul.h" | ||||
#include "cucul_internals.h" | |||||
#include "caca.h" | #include "caca.h" | ||||
#include "caca_internals.h" | #include "caca_internals.h" | ||||
@@ -304,11 +303,11 @@ static void x11_display(caca_display_t *dp) | |||||
for(x = 0; x < width; x += len) | for(x = 0; x < width; x += len) | ||||
{ | { | ||||
uint32_t const *attrs = cvattrs + x + y * width; | uint32_t const *attrs = cvattrs + x + y * width; | ||||
uint16_t bg = _cucul_attr_to_rgb12bg(*attrs); | |||||
uint16_t bg = cucul_attr_to_rgb12_bg(*attrs); | |||||
len = 1; | len = 1; | ||||
while(x + len < width | while(x + len < width | ||||
&& _cucul_attr_to_rgb12bg(attrs[len]) == bg) | |||||
&& cucul_attr_to_rgb12_bg(attrs[len]) == bg) | |||||
len++; | len++; | ||||
XSetForeground(dp->drv.p->dpy, dp->drv.p->gc, | XSetForeground(dp->drv.p->dpy, dp->drv.p->gc, | ||||
@@ -332,7 +331,7 @@ static void x11_display(caca_display_t *dp) | |||||
for(x = 0; x < width; x++, chars++, attrs++) | for(x = 0; x < width; x++, chars++, attrs++) | ||||
{ | { | ||||
XSetForeground(dp->drv.p->dpy, dp->drv.p->gc, | XSetForeground(dp->drv.p->dpy, dp->drv.p->gc, | ||||
dp->drv.p->colors[_cucul_attr_to_rgb12fg(*attrs)]); | |||||
dp->drv.p->colors[cucul_attr_to_rgb12_fg(*attrs)]); | |||||
x11_put_glyph(dp, x * dp->drv.p->font_width, | x11_put_glyph(dp, x * dp->drv.p->font_width, | ||||
y * dp->drv.p->font_height, yoff, | y * dp->drv.p->font_height, yoff, | ||||
@@ -25,6 +25,22 @@ | |||||
static uint8_t nearest_ansi(uint16_t); | static uint8_t nearest_ansi(uint16_t); | ||||
/* RGB colours for the ANSI palette. There is no real standard, so we | |||||
* use the same values as gnome-terminal. The 7th colour (brown) is a bit | |||||
* special: 0xfa50 instead of 0xfaa0. */ | |||||
static const uint16_t ansitab16[16] = | |||||
{ | |||||
0xf000, 0xf00a, 0xf0a0, 0xf0aa, 0xfa00, 0xfa0a, 0xfa50, 0xfaaa, | |||||
0xf555, 0xf55f, 0xf5f5, 0xf5ff, 0xff55, 0xff5f, 0xfff5, 0xffff, | |||||
}; | |||||
/* Same table, except on 14 bits (3-4-4-3) */ | |||||
static const uint16_t ansitab14[16] = | |||||
{ | |||||
0x3800, 0x3805, 0x3850, 0x3855, 0x3d00, 0x3d05, 0x3d28, 0x3d55, | |||||
0x3aaa, 0x3aaf, 0x3afa, 0x3aff, 0x3faa, 0x3faf, 0x3ffa, 0x3fff, | |||||
}; | |||||
/** \brief Get the text attribute at the given coordinates. | /** \brief Get the text attribute at the given coordinates. | ||||
* | * | ||||
* Get the internal \e libcucul attribute value of the character at the | * Get the internal \e libcucul attribute value of the character at the | ||||
@@ -291,69 +307,22 @@ unsigned char cucul_attr_to_ansi_bg(unsigned long int attr) | |||||
return nearest_ansi(attr >> 18); | return nearest_ansi(attr >> 18); | ||||
} | } | ||||
/* | |||||
* XXX: the following functions are local | |||||
/** \brief Get 12-bit RGB foreground information from attribute. | |||||
* | |||||
* Get the 12-bit foreground colour value for a given attribute. The returned | |||||
* value is a native-endian encoded integer with each red, green and blue | |||||
* values encoded on 8 bits in the following order: | |||||
* - 8-11 most significant bits: red | |||||
* - 4-7 most significant bits: green | |||||
* - least significant bits: blue | |||||
* | |||||
* This function never fails. If the attribute value is outside the expected | |||||
* 32-bit range, higher order bits are simply ignored. | |||||
* | |||||
* \param attr The requested attribute value. | |||||
* \return The corresponding 12-bit RGB foreground value. | |||||
*/ | */ | ||||
/* RGB colours for the ANSI palette. There is no real standard, so we | |||||
* use the same values as gnome-terminal. The 7th colour (brown) is a bit | |||||
* special: 0xfa50 instead of 0xfaa0. */ | |||||
static const uint16_t ansitab16[16] = | |||||
{ | |||||
0xf000, 0xf00a, 0xf0a0, 0xf0aa, 0xfa00, 0xfa0a, 0xfa50, 0xfaaa, | |||||
0xf555, 0xf55f, 0xf5f5, 0xf5ff, 0xff55, 0xff5f, 0xfff5, 0xffff, | |||||
}; | |||||
/* Same table, except on 14 bits (3-4-4-3) */ | |||||
static const uint16_t ansitab14[16] = | |||||
{ | |||||
0x3800, 0x3805, 0x3850, 0x3855, 0x3d00, 0x3d05, 0x3d28, 0x3d55, | |||||
0x3aaa, 0x3aaf, 0x3afa, 0x3aff, 0x3faa, 0x3faf, 0x3ffa, 0x3fff, | |||||
}; | |||||
static uint8_t nearest_ansi(uint16_t argb14) | |||||
{ | |||||
unsigned int i, best, dist; | |||||
if(argb14 < (0x10 | 0x40)) | |||||
return argb14 ^ 0x40; | |||||
if(argb14 == (CUCUL_DEFAULT | 0x40) || argb14 == (CUCUL_TRANSPARENT | 0x40)) | |||||
return argb14 ^ 0x40; | |||||
if(argb14 < 0x0fff) /* too transparent */ | |||||
return CUCUL_TRANSPARENT; | |||||
best = CUCUL_DEFAULT; | |||||
dist = 0x3fff; | |||||
for(i = 0; i < 16; i++) | |||||
{ | |||||
unsigned int d = 0; | |||||
int a, b; | |||||
a = (ansitab14[i] >> 7) & 0xf; | |||||
b = (argb14 >> 7) & 0xf; | |||||
d += (a - b) * (a - b); | |||||
a = (ansitab14[i] >> 3) & 0xf; | |||||
b = (argb14 >> 3) & 0xf; | |||||
d += (a - b) * (a - b); | |||||
a = (ansitab14[i] << 1) & 0xf; | |||||
b = (argb14 << 1) & 0xf; | |||||
d += (a - b) * (a - b); | |||||
if(d < dist) | |||||
{ | |||||
dist = d; | |||||
best = i; | |||||
} | |||||
} | |||||
return best; | |||||
} | |||||
uint16_t _cucul_attr_to_rgb12fg(uint32_t attr) | |||||
unsigned int cucul_attr_to_rgb12_fg(unsigned long int attr) | |||||
{ | { | ||||
uint16_t fg = (attr >> 4) & 0x3fff; | uint16_t fg = (attr >> 4) & 0x3fff; | ||||
@@ -369,7 +338,22 @@ uint16_t _cucul_attr_to_rgb12fg(uint32_t attr) | |||||
return (fg << 1) & 0x0fff; | return (fg << 1) & 0x0fff; | ||||
} | } | ||||
uint16_t _cucul_attr_to_rgb12bg(uint32_t attr) | |||||
/** \brief Get 12-bit RGB background information from attribute. | |||||
* | |||||
* Get the 12-bit background colour value for a given attribute. The returned | |||||
* value is a native-endian encoded integer with each red, green and blue | |||||
* values encoded on 8 bits in the following order: | |||||
* - 8-11 most significant bits: red | |||||
* - 4-7 most significant bits: green | |||||
* - least significant bits: blue | |||||
* | |||||
* This function never fails. If the attribute value is outside the expected | |||||
* 32-bit range, higher order bits are simply ignored. | |||||
* | |||||
* \param attr The requested attribute value. | |||||
* \return The corresponding 12-bit RGB background value. | |||||
*/ | |||||
unsigned int cucul_attr_to_rgb12_bg(unsigned long int attr) | |||||
{ | { | ||||
uint16_t bg = attr >> 18; | uint16_t bg = attr >> 18; | ||||
@@ -385,22 +369,26 @@ uint16_t _cucul_attr_to_rgb12bg(uint32_t attr) | |||||
return (bg << 1) & 0x0fff; | return (bg << 1) & 0x0fff; | ||||
} | } | ||||
#define RGB12TO24(i) \ | |||||
(((uint32_t)((i & 0xf00) >> 8) * 0x110000) \ | |||||
| ((uint32_t)((i & 0x0f0) >> 4) * 0x001100) \ | |||||
| ((uint32_t)(i & 0x00f) * 0x000011)) | |||||
uint32_t _cucul_attr_to_rgb24fg(uint32_t attr) | |||||
{ | |||||
return RGB12TO24(_cucul_attr_to_rgb12fg(attr)); | |||||
} | |||||
uint32_t _cucul_attr_to_rgb24bg(uint32_t attr) | |||||
{ | |||||
return RGB12TO24(_cucul_attr_to_rgb12bg(attr)); | |||||
} | |||||
void _cucul_attr_to_argb4(uint32_t attr, uint8_t argb[8]) | |||||
/** \brief Get 64-bit ARGB information from attribute. | |||||
* | |||||
* Get the 64-bit colour and alpha values for a given attribute. The values | |||||
* are written as 8-bit integers in the \e argb array in the following order: | |||||
* - \e argb[0]: background alpha value | |||||
* - \e argb[1]: background red value | |||||
* - \e argb[2]: background green value | |||||
* - \e argb[3]: background blue value | |||||
* - \e argb[4]: foreground alpha value | |||||
* - \e argb[5]: foreground red value | |||||
* - \e argb[6]: foreground green value | |||||
* - \e argb[7]: foreground blue value | |||||
* | |||||
* This function never fails. If the attribute value is outside the expected | |||||
* 32-bit range, higher order bits are simply ignored. | |||||
* | |||||
* \param attr The requested attribute value. | |||||
* \param argb An array of 8-bit integers. | |||||
*/ | |||||
void cucul_attr_to_argb64(unsigned long int attr, unsigned char argb[8]) | |||||
{ | { | ||||
uint16_t fg = (attr >> 4) & 0x3fff; | uint16_t fg = (attr >> 4) & 0x3fff; | ||||
uint16_t bg = attr >> 18; | uint16_t bg = attr >> 18; | ||||
@@ -434,3 +422,64 @@ void _cucul_attr_to_argb4(uint32_t attr, uint8_t argb[8]) | |||||
argb[7] = fg & 0xf; | argb[7] = fg & 0xf; | ||||
} | } | ||||
/* | |||||
* XXX: the following functions are local | |||||
*/ | |||||
static uint8_t nearest_ansi(uint16_t argb14) | |||||
{ | |||||
unsigned int i, best, dist; | |||||
if(argb14 < (0x10 | 0x40)) | |||||
return argb14 ^ 0x40; | |||||
if(argb14 == (CUCUL_DEFAULT | 0x40) || argb14 == (CUCUL_TRANSPARENT | 0x40)) | |||||
return argb14 ^ 0x40; | |||||
if(argb14 < 0x0fff) /* too transparent */ | |||||
return CUCUL_TRANSPARENT; | |||||
best = CUCUL_DEFAULT; | |||||
dist = 0x3fff; | |||||
for(i = 0; i < 16; i++) | |||||
{ | |||||
unsigned int d = 0; | |||||
int a, b; | |||||
a = (ansitab14[i] >> 7) & 0xf; | |||||
b = (argb14 >> 7) & 0xf; | |||||
d += (a - b) * (a - b); | |||||
a = (ansitab14[i] >> 3) & 0xf; | |||||
b = (argb14 >> 3) & 0xf; | |||||
d += (a - b) * (a - b); | |||||
a = (ansitab14[i] << 1) & 0xf; | |||||
b = (argb14 << 1) & 0xf; | |||||
d += (a - b) * (a - b); | |||||
if(d < dist) | |||||
{ | |||||
dist = d; | |||||
best = i; | |||||
} | |||||
} | |||||
return best; | |||||
} | |||||
#define RGB12TO24(i) \ | |||||
(((uint32_t)((i & 0xf00) >> 8) * 0x110000) \ | |||||
| ((uint32_t)((i & 0x0f0) >> 4) * 0x001100) \ | |||||
| ((uint32_t)(i & 0x00f) * 0x000011)) | |||||
uint32_t _cucul_attr_to_rgb24fg(uint32_t attr) | |||||
{ | |||||
return RGB12TO24(cucul_attr_to_rgb12_fg(attr)); | |||||
} | |||||
uint32_t _cucul_attr_to_rgb24bg(uint32_t attr) | |||||
{ | |||||
return RGB12TO24(cucul_attr_to_rgb12_bg(attr)); | |||||
} | |||||
@@ -150,6 +150,9 @@ __extern int cucul_stretch_right(cucul_canvas_t *); | |||||
__extern unsigned char cucul_attr_to_ansi(unsigned long int); | __extern unsigned char cucul_attr_to_ansi(unsigned long int); | ||||
__extern unsigned char cucul_attr_to_ansi_fg(unsigned long int); | __extern unsigned char cucul_attr_to_ansi_fg(unsigned long int); | ||||
__extern unsigned char cucul_attr_to_ansi_bg(unsigned long int); | __extern unsigned char cucul_attr_to_ansi_bg(unsigned long int); | ||||
__extern unsigned int cucul_attr_to_rgb12_fg(unsigned long int); | |||||
__extern unsigned int cucul_attr_to_rgb12_bg(unsigned long int); | |||||
__extern void cucul_attr_to_argb64(unsigned long int, unsigned char[8]); | |||||
/* @} */ | /* @} */ | ||||
/** \defgroup cucul_charset libcucul character set conversions | /** \defgroup cucul_charset libcucul character set conversions | ||||
@@ -64,11 +64,8 @@ struct cucul_buffer | |||||
}; | }; | ||||
/* Colour functions */ | /* Colour functions */ | ||||
extern uint16_t _cucul_attr_to_rgb12fg(uint32_t); | |||||
extern uint16_t _cucul_attr_to_rgb12bg(uint32_t); | |||||
extern uint32_t _cucul_attr_to_rgb24fg(uint32_t); | extern uint32_t _cucul_attr_to_rgb24fg(uint32_t); | ||||
extern uint32_t _cucul_attr_to_rgb24bg(uint32_t); | extern uint32_t _cucul_attr_to_rgb24bg(uint32_t); | ||||
extern void _cucul_attr_to_argb4(uint32_t, uint8_t[8]); | |||||
/* Frames functions */ | /* Frames functions */ | ||||
extern void _cucul_save_frame_info(cucul_canvas_t *); | extern void _cucul_save_frame_info(cucul_canvas_t *); | ||||
@@ -394,10 +394,10 @@ static void *export_html(cucul_canvas_t const *cv, unsigned long int *bytes) | |||||
cur += sprintf(cur, "<span style=\""); | cur += sprintf(cur, "<span style=\""); | ||||
if(cucul_attr_to_ansi_fg(lineattr[x]) < 0x10) | if(cucul_attr_to_ansi_fg(lineattr[x]) < 0x10) | ||||
cur += sprintf(cur, ";color:#%.03x", | cur += sprintf(cur, ";color:#%.03x", | ||||
_cucul_attr_to_rgb12fg(lineattr[x])); | |||||
cucul_attr_to_rgb12_fg(lineattr[x])); | |||||
if(cucul_attr_to_ansi_bg(lineattr[x]) < 0x10) | if(cucul_attr_to_ansi_bg(lineattr[x]) < 0x10) | ||||
cur += sprintf(cur, ";background-color:#%.03x", | cur += sprintf(cur, ";background-color:#%.03x", | ||||
_cucul_attr_to_rgb12bg(lineattr[x])); | |||||
cucul_attr_to_rgb12_bg(lineattr[x])); | |||||
if(lineattr[x] & CUCUL_BOLD) | if(lineattr[x] & CUCUL_BOLD) | ||||
cur += sprintf(cur, ";font-weight:bold"); | cur += sprintf(cur, ";font-weight:bold"); | ||||
if(lineattr[x] & CUCUL_ITALICS) | if(lineattr[x] & CUCUL_ITALICS) | ||||
@@ -699,7 +699,7 @@ static void *export_ps(cucul_canvas_t const *cv, unsigned long int *bytes) | |||||
for(x = 0; x < cv->width; x++) | for(x = 0; x < cv->width; x++) | ||||
{ | { | ||||
uint8_t argb[8]; | uint8_t argb[8]; | ||||
_cucul_attr_to_argb4(*lineattr++, argb); | |||||
cucul_attr_to_argb64(*lineattr++, argb); | |||||
cur += sprintf(cur, "1 0 translate\n %f %f %f csquare\n", | cur += sprintf(cur, "1 0 translate\n %f %f %f csquare\n", | ||||
(float)argb[1] * (1.0 / 0xf), | (float)argb[1] * (1.0 / 0xf), | ||||
(float)argb[2] * (1.0 / 0xf), | (float)argb[2] * (1.0 / 0xf), | ||||
@@ -723,7 +723,7 @@ static void *export_ps(cucul_canvas_t const *cv, unsigned long int *bytes) | |||||
uint8_t argb[8]; | uint8_t argb[8]; | ||||
uint32_t ch = *linechar++; | uint32_t ch = *linechar++; | ||||
_cucul_attr_to_argb4(*lineattr++, argb); | |||||
cucul_attr_to_argb64(*lineattr++, argb); | |||||
cur += sprintf(cur, "newpath\n"); | cur += sprintf(cur, "newpath\n"); | ||||
cur += sprintf(cur, "%d %d moveto\n", (x + 1) * 6, y * 10 + 2); | cur += sprintf(cur, "%d %d moveto\n", (x + 1) * 6, y * 10 + 2); | ||||
@@ -794,7 +794,7 @@ static void *export_svg(cucul_canvas_t const *cv, unsigned long int *bytes) | |||||
{ | { | ||||
cur += sprintf(cur, "<rect style=\"fill:#%.03x\" x=\"%d\" y=\"%d\"" | cur += sprintf(cur, "<rect style=\"fill:#%.03x\" x=\"%d\" y=\"%d\"" | ||||
" width=\"6\" height=\"10\"/>\n", | " width=\"6\" height=\"10\"/>\n", | ||||
_cucul_attr_to_rgb12bg(*lineattr++), | |||||
cucul_attr_to_rgb12_bg(*lineattr++), | |||||
x * 6, y * 10); | x * 6, y * 10); | ||||
} | } | ||||
} | } | ||||
@@ -817,7 +817,7 @@ static void *export_svg(cucul_canvas_t const *cv, unsigned long int *bytes) | |||||
cur += sprintf(cur, "<text style=\"fill:#%.03x\" " | cur += sprintf(cur, "<text style=\"fill:#%.03x\" " | ||||
"x=\"%d\" y=\"%d\">", | "x=\"%d\" y=\"%d\">", | ||||
_cucul_attr_to_rgb12fg(*lineattr++), | |||||
cucul_attr_to_rgb12_fg(*lineattr++), | |||||
x * 6, (y * 10) + 8); | x * 6, (y * 10) + 8); | ||||
if(ch < 0x00000020) | if(ch < 0x00000020) | ||||
@@ -467,7 +467,7 @@ int cucul_render_canvas(cucul_canvas_t const *cv, cucul_font_t const *f, | |||||
g = &f->glyph_list[f->block_list[b].index | g = &f->glyph_list[f->block_list[b].index | ||||
+ ch - f->block_list[b].start]; | + ch - f->block_list[b].start]; | ||||
_cucul_attr_to_argb4(attr, argb); | |||||
cucul_attr_to_argb64(attr, argb); | |||||
/* Step 1: unpack glyph */ | /* Step 1: unpack glyph */ | ||||
switch(f->header.bpp) | switch(f->header.bpp) | ||||