Ignore:
Timestamp:
Oct 29, 2006, 1:53:46 AM (14 years ago)
Author:
Sam Hocevar
Message:
  • Use the LSB of alpha and blue components to encode additional flags such as bold or underline. No higher level support for these yet, but at least everything is consistent.
  • Created cucul_set_attr_ansi() and cucul_set_attr_argb() which are bound to replace cucul_set_color() and cucul_set_truecolor().
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/cucul/export.c

    r1239 r1254  
    154154static int export_caca(cucul_canvas_t *cv, cucul_buffer_t *ex)
    155155{
    156     uint32_t *attr = cv->attr;
     156    uint32_t *attrs = cv->attrs;
    157157    uint32_t *chars = cv->chars;
    158158    char *cur;
     
    178178    {
    179179        uint32_t ch = *chars++;
    180         uint32_t a = *attr++;
     180        uint32_t a = *attrs++;
    181181
    182182        *cur++ = ch >> 24;
     
    216216    for(y = 0; y < cv->height; y++)
    217217    {
    218         uint32_t *lineattr = cv->attr + y * cv->width;
     218        uint32_t *lineattr = cv->attrs + y * cv->width;
    219219        uint32_t *linechar = cv->chars + y * cv->width;
    220220
     
    231231                continue;
    232232
    233             fg = ((attr & 0xffff) == CUCUL_COLOR_DEFAULT) ?
    234                      0x10 : palette[_cucul_argb32_to_ansi4fg(attr)];
    235             bg = ((attr >> 16) == CUCUL_COLOR_TRANSPARENT) ?
    236                      0x10 : palette[_cucul_argb32_to_ansi4bg(attr)];
     233            fg = ((attr & 0xeffe) == (CUCUL_COLOR_DEFAULT << 4)) ?
     234                     0x10 : palette[_cucul_attr_to_ansi4fg(attr)];
     235            bg = (((attr >> 16) & 0xeffe) == (CUCUL_COLOR_TRANSPARENT << 4)) ?
     236                     0x10 : palette[_cucul_attr_to_ansi4bg(attr)];
    237237
    238238            /* TODO: the [0 could be omitted in some cases */
     
    298298    for(y = 0; y < cv->height; y++)
    299299    {
    300         uint32_t *lineattr = cv->attr + y * cv->width;
     300        uint32_t *lineattr = cv->attrs + y * cv->width;
    301301        uint32_t *linechar = cv->chars + y * cv->width;
    302302
    303303        for(x = 0; x < cv->width; x++)
    304304        {
    305             uint8_t fg = palette[_cucul_argb32_to_ansi4fg(lineattr[x])];
    306             uint8_t bg = palette[_cucul_argb32_to_ansi4bg(lineattr[x])];
     305            uint8_t fg = palette[_cucul_attr_to_ansi4fg(lineattr[x])];
     306            uint8_t bg = palette[_cucul_attr_to_ansi4bg(lineattr[x])];
    307307            uint32_t ch = linechar[x];
    308308
     
    377377    for(y = 0; y < cv->height; y++)
    378378    {
    379         uint32_t *lineattr = cv->attr + y * cv->width;
     379        uint32_t *lineattr = cv->attrs + y * cv->width;
    380380        uint32_t *linechar = cv->chars + y * cv->width;
    381381
     
    384384            cur += sprintf(cur, "<span style=\"color:#%.03x;"
    385385                                "background-color:#%.03x\">",
    386                                 _cucul_argb32_to_rgb12fg(lineattr[x]),
    387                                 _cucul_argb32_to_rgb12bg(lineattr[x]));
     386                                _cucul_attr_to_rgb12fg(lineattr[x]),
     387                                _cucul_attr_to_rgb12bg(lineattr[x]));
    388388
    389389            for(len = 0;
     
    442442    for(y = 0; y < cv->height; y++)
    443443    {
    444         uint32_t *lineattr = cv->attr + y * cv->width;
     444        uint32_t *lineattr = cv->attrs + y * cv->width;
    445445        uint32_t *linechar = cv->chars + y * cv->width;
    446446
     
    458458
    459459            cur += sprintf(cur, "<td bgcolor=#%.06lx", (unsigned long int)
    460                            _cucul_argb32_to_rgb24bg(lineattr[x]));
     460                           _cucul_attr_to_rgb24bg(lineattr[x]));
    461461
    462462            if(len > 1)
     
    464464
    465465            cur += sprintf(cur, "><font color=#%.06lx>", (unsigned long int)
    466                            _cucul_argb32_to_rgb24fg(lineattr[x]));
     466                           _cucul_attr_to_rgb24fg(lineattr[x]));
    467467
    468468            for(i = 0; i < len; i++)
     
    522522    for(y = 0; y < cv->height; y++)
    523523    {
    524         uint32_t *lineattr = cv->attr + y * cv->width;
     524        uint32_t *lineattr = cv->attrs + y * cv->width;
    525525        uint32_t *linechar = cv->chars + y * cv->width;
    526526
     
    531531        {
    532532            uint32_t attr = lineattr[x];
    533             uint8_t fg = palette[_cucul_argb32_to_ansi4fg(attr)];
    534             uint8_t bg = palette[_cucul_argb32_to_ansi4bg(attr)];
     533            uint8_t fg = palette[_cucul_attr_to_ansi4fg(attr)];
     534            uint8_t bg = palette[_cucul_attr_to_ansi4bg(attr)];
    535535            uint32_t ch = linechar[x];
    536536
     
    538538                continue;
    539539
    540             if((attr & 0xffff) == CUCUL_COLOR_DEFAULT)
     540            if((attr & 0xeffe) == (CUCUL_COLOR_DEFAULT << 4))
    541541                fg = 0x10;
    542542
    543             if((attr >> 16) == CUCUL_COLOR_TRANSPARENT)
     543            if(((attr >> 16) & 0xeffe) == (CUCUL_COLOR_TRANSPARENT << 4))
    544544                bg = 0x10;
    545545
     
    645645    for(y = cv->height; y--; )
    646646    {
    647         uint32_t *lineattr = cv->attr + y * cv->width;
     647        uint32_t *lineattr = cv->attrs + y * cv->width;
    648648
    649649        for(x = 0; x < cv->width; x++)
    650650        {
    651651            uint8_t argb[8];
    652             _cucul_argb32_to_argb4(*lineattr++, argb);
     652            _cucul_attr_to_argb4(*lineattr++, argb);
    653653            cur += sprintf(cur, "1 0 translate\n %f %f %f csquare\n",
    654654                           (float)argb[1] * (1.0 / 0xf),
     
    666666    for(y = cv->height; y--; )
    667667    {
    668         uint32_t *lineattr = cv->attr + (cv->height - y - 1) * cv->width;
     668        uint32_t *lineattr = cv->attrs + (cv->height - y - 1) * cv->width;
    669669        uint32_t *linechar = cv->chars + (cv->height - y - 1) * cv->width;
    670670
     
    674674            uint32_t ch = *linechar++;
    675675
    676             _cucul_argb32_to_argb4(*lineattr++, argb);
     676            _cucul_attr_to_argb4(*lineattr++, argb);
    677677
    678678            cur += sprintf(cur, "newpath\n");
     
    739739    for(y = 0; y < cv->height; y++)
    740740    {
    741         uint32_t *lineattr = cv->attr + y * cv->width;
     741        uint32_t *lineattr = cv->attrs + y * cv->width;
    742742
    743743        for(x = 0; x < cv->width; x++)
     
    745745            cur += sprintf(cur, "<rect style=\"fill:#%.03x\" x=\"%d\" y=\"%d\""
    746746                                " width=\"6\" height=\"10\"/>\n",
    747                                 _cucul_argb32_to_rgb12bg(*lineattr++),
     747                                _cucul_attr_to_rgb12bg(*lineattr++),
    748748                                x * 6, y * 10);
    749749        }
     
    753753    for(y = 0; y < cv->height; y++)
    754754    {
    755         uint32_t *lineattr = cv->attr + y * cv->width;
     755        uint32_t *lineattr = cv->attrs + y * cv->width;
    756756        uint32_t *linechar = cv->chars + y * cv->width;
    757757
     
    768768            cur += sprintf(cur, "<text style=\"fill:#%.03x\" "
    769769                                "x=\"%d\" y=\"%d\">",
    770                                 _cucul_argb32_to_rgb12fg(*lineattr++),
     770                                _cucul_attr_to_rgb12fg(*lineattr++),
    771771                                x * 6, (y * 10) + 8);
    772772
Note: See TracChangeset for help on using the changeset viewer.