Ignore:
Timestamp:
Oct 1, 2006, 2:50:43 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Support transparency in the colour UTF-8 exporter.
File:
1 edited

Legend:

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

    r1104 r1175  
    216216        uint32_t *linechar = cv->chars + y * cv->width;
    217217
    218         uint8_t prevfg = -1;
    219         uint8_t prevbg = -1;
     218        uint8_t prevfg = 0x10;
     219        uint8_t prevbg = 0x10;
    220220
    221221        for(x = 0; x < cv->width; x++)
    222222        {
    223             uint8_t fg = palette[_cucul_argb32_to_ansi4fg(lineattr[x])];
    224             uint8_t bg = palette[_cucul_argb32_to_ansi4bg(lineattr[x])];
     223            uint32_t attr = lineattr[x];
    225224            uint32_t ch = linechar[x];
    226 
     225            uint8_t fg, bg;
     226
     227            fg = ((attr & 0xffff) == CUCUL_COLOR_DEFAULT) ?
     228                     0x10 : palette[_cucul_argb32_to_ansi4fg(attr)];
     229            bg = ((attr >> 16) == CUCUL_COLOR_TRANSPARENT) ?
     230                     0x10 : palette[_cucul_argb32_to_ansi4bg(attr)];
     231
     232            /* TODO: the [0 could be omitted in some cases */
    227233            if(fg != prevfg || bg != prevbg)
    228234            {
    229                 cur += sprintf(cur, "\033[0;");
     235                cur += sprintf(cur, "\033[0");
    230236
    231237                if(fg < 8)
    232                     if(bg < 8)
    233                         cur += sprintf(cur, "3%d;4%dm", fg, bg);
    234                     else
    235                         cur += sprintf(cur, "5;3%d;4%d;10%dm",
    236                                             fg, bg - 8, bg - 8);
    237                 else
    238                     if(bg < 8)
    239                         cur += sprintf(cur, "1;3%d;4%d;9%dm",
    240                                             fg - 8, bg, fg - 8);
    241                     else
    242                         cur += sprintf(cur, "5;1;3%d;4%d;9%d;10%dm",
    243                                             fg - 8, bg - 8, fg - 8, bg - 8);
     238                    cur += sprintf(cur, ";3%d", fg);
     239                else if(fg < 16)
     240                    cur += sprintf(cur, ";1;3%d;9%d", fg - 8, fg - 8);
     241
     242                if(bg < 8)
     243                    cur += sprintf(cur, ";4%d", bg);
     244                else if(bg < 16)
     245                    cur += sprintf(cur, ";5;4%d;10%d", bg - 8, bg - 8);
     246
     247                cur += sprintf(cur, "m");
    244248            }
    245249
     
    250254        }
    251255
    252         cur += sprintf(cur, "\033[0m\r\n");
     256        if(prevfg != 0x10 || prevbg != 0x10)
     257            cur += sprintf(cur, "\033[0m");
     258
     259        cur += sprintf(cur, "\r\n");
    253260    }
    254261
Note: See TracChangeset for help on using the changeset viewer.