Changeset 226


Ignore:
Timestamp:
Nov 27, 2003, 10:56:30 PM (17 years ago)
Author:
Sam Hocevar
Message:
  • NOTES: + Added setab/setaf quotes from the XTerm terminfo. + Proposed a workaround for bright colours on any terminal.
  • src/caca.c: + 16 colour support for ncurses and conio.
  • src/graphics.c: + Ported to 16 colour support. + Added a missing <stdio.h> for BUFSIZ. + Disabled vsnprintf under DOS (only vsprintf exists).
  • examples/: + Don't abort if the caca.txt sprite was not found. + Ported to 16 colour support.
Location:
libcaca/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/NOTES

    r225 r226  
    44      many terminal emulators and tried to summarise which combinations
    55      worked properly and which ones did not.
     6
     7      From termcap(5):
     8
     9       set_a_background              setab        AB        Set background
     10                                                            color to #1, using
     11                                                            ANSI escape
     12       set_a_foreground              setaf        AF        Set foreground
     13                                                            color to #1, using
     14                                                            ANSI escape
     15      From the xterm terminfo:
     16
     17        setab=\E[4%p1%dm, setaf=\E[3%p1%dm
     18
     19      From the xterm-16color terminfo:
     20
     21        setab=\E[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm,
     22        setaf=\E[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm,
     23
     24      (http://www.sct.gu.edu.au/~anthony/info/X/Xterm_xf86.terminfo)
    625
    726   o  I tested the following terminals:
     
    2140
    2241   o  In most terminals, \e[3xm and \[4xm respectively set the foreground
    23       and background colours. x is an colour between 0 and 7 or the value
    24       9 for default value.
     42      and background colours. x is a colour between 0 and 7 or the value
     43      9 for default colour (may be transparent).
    2544
    2645      \e[0m sets everything to normal, \e[1m sets bold, \e[5m sets blink
     
    3655        for blink in '' '\e[5m'; do
    3756          for bold in '' '\e[1m'; do
    38             echo -ne "$bold$blink$invert"'\e[34m\e[43m'hop'\e[0m '
     57            echo -ne "$bold$blink$invert"'\e[33m\e[44m'hop'\e[0m '
    3958            echo "($bold$blink$invert)"
    4059          done
     
    4968
    5069      Almost works on:
    51        + xterm (bright bg works for blue, but not for red or yellow)
     70       + xterm (bright bg only works when fg is bright and then inverted,
     71         but then fg is not bright)
    5272
    5373      Fails on:
     
    7595       + pterm
    7696
    77       Failed (\e[9x and \e[10x don't work) on:
     97      Failed (\e[9x and \e[10x don't do anything) on:
    7898       + Eterm
    7999       + aterm, wterm, rxvt
    80100       + mlterm
    81        + linux
     101       + Linux console
     102
     103   o  How to draw bright colours on any terminal?
     104
     105      '\e[93;104m' -> bright yellow on bright blue
     106       doesn't work on mlterm, gnome-terminal, konsole
     107
     108      '\e[5;1;33;44m' -> bright yellow on bright blue
     109       doesn't work on mlterm, aterm/wterm/rxvt, Eterm, console
     110
     111      '\e[5;1;33;44;93;104m' -> bright yellow on bright blue
     112       works on gnome-terminal, xterm, pterm, aterm/wterm/rxvt, console
     113       doesn't work on konsole
    82114
    83115   o  S-Lang:
  • libcaca/trunk/examples/demo.c

    r217 r226  
    6363    if(!sprite)
    6464        sprite = caca_load_sprite("examples/caca.txt");
    65     if(!sprite)
    66         return 1;
    6765
    6866    /* Main menu */
     
    133131            case 's':
    134132            case 'S':
    135                 demo = demo_sprites;
     133                if(sprite)
     134                    demo = demo_sprites;
    136135                break;
    137136            }
    138 
    139             if(demo)
    140                 caca_clear();
    141137
    142138        handle_event:
     
    148144
    149145            caca_refresh();
     146
     147            if(demo)
     148                caca_clear();
    150149        }
    151150        else if(event & CACA_EVENT_MOUSE_CLICK)
    152151        {
    153152            display_menu();
    154             caca_set_color(CACA_COLOR_RED);
     153            caca_set_color(CACA_COLOR_RED, CACA_COLOR_BLACK);
    155154            caca_putstr((event & 0xff00) >> 8, event & 0xff, "|\\");
    156155            caca_refresh();
     
    161160            demo();
    162161
    163             caca_set_color(CACA_COLOR_WHITE);
     162            caca_set_color(CACA_COLOR_LIGHTGRAY, CACA_COLOR_BLACK);
    164163            caca_draw_thin_box(1, 1, caca_get_width() - 2, caca_get_height() - 2);
    165164            caca_printf(4, 1, "[%i.%i fps]----",
     
    183182
    184183    caca_clear();
    185     caca_set_color(CACA_COLOR_WHITE);
     184    caca_set_color(CACA_COLOR_LIGHTGRAY, CACA_COLOR_BLACK);
    186185    caca_draw_thin_box(1, 1, xo, yo);
    187186
     
    196195    caca_putstr(4, 11, "'4': triangles");
    197196    caca_putstr(4, 12, "'5': ellipses");
    198     caca_putstr(4, 13, "'s': sprites");
    199     caca_putstr(4, 14, "'c': color");
    200 
    201     caca_putstr(4, 17, "settings:");
    202     caca_printf(4, 18, "'o': outline: %s",
     197    caca_putstr(4, 13, "'c': colour");
     198    if(sprite)
     199        caca_putstr(4, 14, "'s': sprites");
     200
     201    caca_putstr(4, 16, "settings:");
     202    caca_printf(4, 17, "'o': outline: %s",
    203203              outline == 0 ? "none" : outline == 1 ? "solid" : "thin");
    204     caca_printf(4, 19, "'b': drawing boundaries: %s",
     204    caca_printf(4, 18, "'b': drawing boundaries: %s",
    205205              bounds == 0 ? "screen" : "infinite");
    206     caca_printf(4, 20, "'d': %s dithering",
     206    caca_printf(4, 19, "'d': %s dithering",
    207207              dithering == 0 ? "no" : dithering == 1 ? "ordered" : "random");
    208208
     
    221221
    222222    /* Draw the sun */
    223     caca_set_color(CACA_COLOR_YELLOW);
     223    caca_set_color(CACA_COLOR_YELLOW, CACA_COLOR_BLACK);
    224224    xo = caca_get_width() / 4;
    225225    yo = caca_get_height() / 4 + 5 * sin(0.03*i);
     
    233233
    234234    j = 15 + sin(0.03*i) * 8;
    235     caca_set_color(CACA_COLOR_WHITE);
     235    caca_set_color(CACA_COLOR_WHITE, CACA_COLOR_BLACK);
    236236    caca_fill_ellipse(xo, yo, j, j / 2, '#');
    237     caca_set_color(CACA_COLOR_YELLOW);
     237    caca_set_color(CACA_COLOR_YELLOW, CACA_COLOR_BLACK);
    238238    caca_draw_ellipse(xo, yo, j, j / 2, '#');
    239239
     
    251251    yc = caca_get_height() * 3 / 4 + cos(0.02*i) * 5;
    252252
    253     caca_set_color(CACA_COLOR_GREEN);
     253    caca_set_color(CACA_COLOR_GREEN, CACA_COLOR_BLACK);
    254254    caca_fill_triangle(xo, yo, xb, yb, xa, ya, '%');
    255     caca_set_color(CACA_COLOR_YELLOW);
     255    caca_set_color(CACA_COLOR_YELLOW, CACA_COLOR_BLACK);
    256256    caca_draw_thin_triangle(xo, yo, xb, yb, xa, ya);
    257257
    258     caca_set_color(CACA_COLOR_RED);
     258    caca_set_color(CACA_COLOR_RED, CACA_COLOR_BLACK);
    259259    caca_fill_triangle(xa, ya, xb, yb, xc, yc, '#');
    260     caca_set_color(CACA_COLOR_YELLOW);
     260    caca_set_color(CACA_COLOR_YELLOW, CACA_COLOR_BLACK);
    261261    caca_draw_thin_triangle(xa, ya, xb, yb, xc, yc);
    262262
    263     caca_set_color(CACA_COLOR_BLUE);
     263    caca_set_color(CACA_COLOR_BLUE, CACA_COLOR_BLACK);
    264264    caca_fill_triangle(xo, yo, xb, yb, xc, yc, '%');
    265     caca_set_color(CACA_COLOR_YELLOW);
     265    caca_set_color(CACA_COLOR_YELLOW, CACA_COLOR_BLACK);
    266266    caca_draw_thin_triangle(xo, yo, xb, yb, xc, yc);
    267267
     
    276276    yc = caca_get_height() - 3;
    277277
    278     caca_set_color(CACA_COLOR_CYAN);
     278    caca_set_color(CACA_COLOR_CYAN, CACA_COLOR_BLACK);
    279279    caca_draw_thin_triangle(xa, ya, xb, yb, xc, yc);
    280280
     
    293293    {
    294294        int delta = caca_rand(-5, 5);
    295         caca_set_color(caca_rand(0, 15));
     295        caca_set_color(caca_rand(0, 15), caca_rand(0, 15));
    296296        caca_putchar(caca_get_width() / 2
    297297                    + cos(0.02*j) * (delta + caca_get_width() / 4),
     
    312312    int ymax = caca_get_height() - 1;
    313313    int i;
     314    static char chars[10] =
     315    {
     316        '+', '-', '*', '#', 'X', '@', '%', '$', 'M', 'W'
     317    };
    314318
    315319    for(i = 1000; i--;)
    316320    {
    317321        /* Putpixel */
    318         caca_set_color(caca_rand(0, 15));
    319         caca_putchar(caca_rand(0, xmax), caca_rand(0, ymax), '#');
     322        caca_set_color(caca_rand(0, 15), caca_rand(0, 15));
     323        caca_putchar(caca_rand(0, xmax), caca_rand(0, ymax),
     324                     chars[caca_rand(0, 9)]);
    320325    }
    321326}
     
    323328static void demo_color(void)
    324329{
    325     int i;
     330    int i, j;
    326331    char buf[BUFSIZ];
    327332
     
    330335    {
    331336        sprintf(buf, "'%c': %i (%s)", 'a' + i, i, caca_get_color_name(i));
    332         caca_set_color(CACA_COLOR_WHITE);
    333         caca_putstr(4, i + 3, buf);
    334         caca_set_color(i);
    335         caca_putstr(40, i + 3, "XXXXXXXXXX-XX--X----------");
     337        caca_set_color(CACA_COLOR_LIGHTGRAY, CACA_COLOR_BLACK);
     338        caca_putstr(4, i + (i >= 8 ? 4 : 3), buf);
     339        for(j = 0; j < 16; j++)
     340        {
     341            caca_set_color(i, j);
     342            caca_putstr((j >= 8 ? 41 : 40) + j * 2, i + (i >= 8 ? 4 : 3), "# ");
     343        }
    336344    }
    337345}
     
    354362    }
    355363
    356     caca_set_color(caca_rand(0, 15));
     364    caca_set_color(caca_rand(0, 15), CACA_COLOR_BLACK);
    357365    if(outline > 1)
    358366        caca_draw_thin_line(xa, ya, xb, yb);
     
    378386    }
    379387
    380     caca_set_color(caca_rand(0, 15));
     388    caca_set_color(caca_rand(0, 15), caca_rand(0, 15));
    381389    caca_fill_box(xa, ya, xb, yb, '#');
    382390
    383     caca_set_color(caca_rand(0, 15));
     391    caca_set_color(caca_rand(0, 15), CACA_COLOR_BLACK);
    384392    if(outline == 2)
    385393        caca_draw_thin_box(xa, ya, xb, yb);
     
    409417    }
    410418
    411     caca_set_color(caca_rand(0, 15));
     419    caca_set_color(caca_rand(0, 15), caca_rand(0, 15));
    412420    caca_fill_ellipse(x, y, a, b, '#');
    413421
    414     caca_set_color(caca_rand(0, 15));
     422    caca_set_color(caca_rand(0, 15), CACA_COLOR_BLACK);
    415423    if(outline == 2)
    416424        caca_draw_thin_ellipse(x, y, a, b);
     
    439447    }
    440448
    441     caca_set_color(caca_rand(0, 15));
     449    caca_set_color(caca_rand(0, 15), caca_rand(0, 15));
    442450    caca_fill_triangle(xa, ya, xb, yb, xc, yc, '#');
    443451
    444     caca_set_color(caca_rand(0, 15));
     452    caca_set_color(caca_rand(0, 15), CACA_COLOR_BLACK);
    445453    if(outline == 2)
    446454        caca_draw_thin_triangle(xa, ya, xb, yb, xc, yc);
  • libcaca/trunk/examples/spritedit.c

    r199 r226  
    8282        caca_clear();
    8383
    84         caca_set_color(CACA_COLOR_WHITE);
     84        caca_set_color(CACA_COLOR_LIGHTGRAY, CACA_COLOR_BLACK);
    8585        caca_draw_thin_box(0, 0, caca_get_width() - 1, caca_get_height() - 1);
    8686
     
    102102        xb = xa + 1 + caca_get_sprite_width(sprite, frame);
    103103        yb = ya + 1 + caca_get_sprite_height(sprite, frame);
    104         caca_set_color(CACA_COLOR_BLACK);
     104        caca_set_color(CACA_COLOR_BLACK, CACA_COLOR_BLACK);
    105105        caca_fill_box(57 + xa, 10 + ya, 57 + xb, 10 + yb, ' ');
    106         caca_set_color(CACA_COLOR_WHITE);
     106        caca_set_color(CACA_COLOR_LIGHTGRAY, CACA_COLOR_BLACK);
    107107        caca_draw_thin_box(57 + xa, 10 + ya, 57 + xb, 10 + yb);
    108108        caca_draw_sprite(57, 10, sprite, frame);
  • libcaca/trunk/src/bitmap.c

    r221 r226  
    3434#else
    3535typedef unsigned char uint8_t;
     36typedef unsigned short uint16_t;
     37typedef unsigned int uint32_t;
    3638#endif
    3739
  • libcaca/trunk/src/caca.c

    r213 r226  
    6262#if defined(USE_NCURSES)
    6363static mmask_t oldmask;
    64 int _caca_attr[16];
     64int _caca_attr[16*16];
    6565#endif
    6666
     
    7373{
    7474#if defined(USE_SLANG)
     75    /* See SLang ref., 5.4.4. */
    7576    static char *slang_colors[16] =
    7677    {
     
    9394    };
    9495
    95     int i;
     96    int fg, bg;
    9697
    9798    /* Initialize slang library */
     
    121122    SLsmg_refresh();
    122123
    123     for(i = 0; i < 16; i++)
    124         SLtt_set_color(i + 1, NULL, slang_colors[i], "black");
    125 
    126 #elif defined(USE_NCURSES)
    127     int i;
     124    for(bg = 0; bg < 16; bg++)
     125        for(fg = 0; fg < 16; fg++)
     126        {
     127            int i = fg + 16 * bg;
     128            SLtt_set_color(i, NULL, slang_colors[fg], slang_colors[bg]);
     129        }
     130
     131#elif defined(USE_NCURSES)
     132    static int curses_colors[] =
     133    {
     134        COLOR_BLACK,
     135        COLOR_BLUE,
     136        COLOR_GREEN,
     137        COLOR_CYAN,
     138        COLOR_RED,
     139        COLOR_MAGENTA,
     140        COLOR_YELLOW,
     141        COLOR_WHITE,
     142        /* Extra values for xterm-16color */
     143        COLOR_BLACK + 8,
     144        COLOR_BLUE + 8,
     145        COLOR_GREEN + 8,
     146        COLOR_CYAN + 8,
     147        COLOR_RED + 8,
     148        COLOR_MAGENTA + 8,
     149        COLOR_YELLOW + 8,
     150        COLOR_WHITE + 8
     151    };
     152
     153    int fg, bg, max;
    128154    mmask_t newmask;
    129155
     
    136162    curs_set(0);
    137163
     164    /* Activate mouse */
    138165    newmask = ALL_MOUSE_EVENTS;
    139166    mousemask(newmask, &oldmask);
    140167
     168    /* Activate colour */
    141169    start_color();
    142170
    143     init_pair(1 + CACA_COLOR_BLACK,        COLOR_BLACK,   COLOR_BLACK);
    144     init_pair(1 + CACA_COLOR_BLUE,         COLOR_BLUE,    COLOR_BLACK);
    145     init_pair(1 + CACA_COLOR_GREEN,        COLOR_GREEN,   COLOR_BLACK);
    146     init_pair(1 + CACA_COLOR_CYAN,         COLOR_CYAN,    COLOR_BLACK);
    147     init_pair(1 + CACA_COLOR_RED,          COLOR_RED,     COLOR_BLACK);
    148     init_pair(1 + CACA_COLOR_MAGENTA,      COLOR_MAGENTA, COLOR_BLACK);
    149     init_pair(1 + CACA_COLOR_BROWN,        COLOR_YELLOW,  COLOR_BLACK);
    150     init_pair(1 + CACA_COLOR_LIGHTGRAY,    COLOR_WHITE,   COLOR_BLACK);
    151     init_pair(1 + CACA_COLOR_DARKGRAY,     COLOR_BLACK,   COLOR_BLACK);
    152     init_pair(1 + CACA_COLOR_LIGHTBLUE,    COLOR_BLUE,    COLOR_BLACK);
    153     init_pair(1 + CACA_COLOR_LIGHTGREEN,   COLOR_GREEN,   COLOR_BLACK);
    154     init_pair(1 + CACA_COLOR_LIGHTCYAN,    COLOR_CYAN,    COLOR_BLACK);
    155     init_pair(1 + CACA_COLOR_LIGHTRED,     COLOR_RED,     COLOR_BLACK);
    156     init_pair(1 + CACA_COLOR_LIGHTMAGENTA, COLOR_MAGENTA, COLOR_BLACK);
    157     init_pair(1 + CACA_COLOR_YELLOW,       COLOR_YELLOW,  COLOR_BLACK);
    158     init_pair(1 + CACA_COLOR_WHITE,        COLOR_WHITE,   COLOR_BLACK);
    159 
    160     for(i = 0; i < 8; i++)
    161     {
    162         _caca_attr[i] = COLOR_PAIR(1 + i);
    163         _caca_attr[i + 8] = A_BOLD | COLOR_PAIR(1 + i);
    164     }
     171    max = COLORS >= 16 ? 16 : 8;
     172
     173    for(bg = 0; bg < max; bg++)
     174        for(fg = 0; fg < max; fg++)
     175        {
     176            /* Use ((max + 7 - fg) % max) instead of fg so that colour 0
     177             * is light gray on black, since some terminals don't like
     178             * this colour pair to be redefined. */
     179            int col = ((max + 7 - fg) % max) + max * bg;
     180            init_pair(col, curses_colors[fg], curses_colors[bg]);
     181            _caca_attr[fg + 16 * bg] = COLOR_PAIR(col);
     182
     183            if(max == 8)
     184            {
     185                /* Bright fg on simple bg */
     186                _caca_attr[fg + 8 + 16 * bg] = A_BOLD | COLOR_PAIR(col);
     187                /* Simple fg on bright bg */
     188                _caca_attr[fg + 16 * (bg + 8)] = A_BLINK | COLOR_PAIR(col);
     189                /* Bright fg on bright bg */
     190                _caca_attr[fg + 8 + 16 * (bg + 8)] = A_BLINK | A_BOLD | COLOR_PAIR(col);
     191            }
     192        }
    165193
    166194#elif defined(USE_CONIO)
  • libcaca/trunk/src/caca.h

    r213 r226  
    151151 * Character graphics
    152152 */
    153 void caca_set_color(enum caca_color);
    154 enum caca_color caca_get_color(void);
     153void caca_set_color(enum caca_color, enum caca_color);
     154enum caca_color caca_get_fg_color(void);
     155enum caca_color caca_get_bg_color(void);
    155156void caca_putchar(int, int, char);
    156157void caca_putstr(int, int, const char *);
     
    203204struct caca_bitmap;
    204205struct caca_bitmap *caca_create_bitmap(int, int, int, int, int, int, int);
     206void caca_set_bitmap_palette(struct caca_bitmap *, int[], int[], int[]);
    205207void caca_draw_bitmap(int, int, int, int, struct caca_bitmap *, char *);
    206208void caca_free_bitmap(struct caca_bitmap *);
  • libcaca/trunk/src/graphics.c

    r205 r226  
    4040#endif
    4141
     42#include <stdio.h> /* BUFSIZ */
    4243#include <string.h>
    4344#include <stdlib.h>
     
    4748#include "caca_internals.h"
    4849
    49 static enum caca_color _caca_color = CACA_COLOR_WHITE;
     50static enum caca_color _caca_fgcolor = CACA_COLOR_LIGHTGRAY;
     51static enum caca_color _caca_bgcolor = CACA_COLOR_BLACK;
    5052
    51 void caca_set_color(enum caca_color color)
     53void caca_set_color(enum caca_color fgcolor, enum caca_color bgcolor)
    5254{
    53     if(color < 0 || color > 15)
     55    if(fgcolor < 0 || fgcolor > 15 || bgcolor < 0 || bgcolor > 15)
    5456        return;
    5557
    56     _caca_color = color;
     58    _caca_fgcolor = fgcolor;
     59    _caca_bgcolor = bgcolor;
    5760#if defined(USE_SLANG)
    58     SLsmg_set_color(color + 1);
     61    SLsmg_set_color(fgcolor + 16 * bgcolor);
    5962#elif defined(USE_NCURSES)
    60     attrset(_caca_attr[color]);
     63    attrset(_caca_attr[fgcolor + 16 * bgcolor]);
    6164#elif defined(USE_CONIO)
    62     textcolor(color);
     65    textbackground(bgcolor);
     66    textcolor(fgcolor);
    6367#endif
    6468}
    6569
    66 enum caca_color caca_get_color(void)
     70enum caca_color caca_get_fg_color(void)
    6771{
    68     return _caca_color;
     72    return _caca_fgcolor;
     73}
     74
     75enum caca_color caca_get_bg_color(void)
     76{
     77    return _caca_bgcolor;
    6978}
    7079
    7180void caca_putchar(int x, int y, char c)
    7281{
     82#if defined(USE_CONIO)
     83    char *data;
     84#endif
    7385    if(x < 0 || x >= (int)caca_get_width() ||
    7486       y < 0 || y >= (int)caca_get_height())
     
    8294    addch(c);
    8395#elif defined(USE_CONIO)
    84     _caca_screen[2 * (x + y * caca_get_width())] = c;
    85     _caca_screen[2 * (x + y * caca_get_width()) + 1] = _caca_color;
     96    data = _caca_screen + 2 * (x + y * caca_get_width());
     97    data[0] = c;
     98    data[1] = (_caca_bgcolor << 4) | _caca_fgcolor;
    8699//    gotoxy(x + 1, y + 1);
    87100//    putch(c);
     
    125138    {
    126139        *buf++ = *s++;
    127         *buf++ = _caca_color;
     140        *buf++ = (_caca_bgcolor << 4) | _caca_fgcolor;
    128141    }
    129142//    gotoxy(x + 1, y + 1);
     
    145158
    146159    va_start(args, format);
     160#if defined(HAVE_VSNPRINTF)
    147161    vsnprintf(buf, caca_get_width() - x + 1, format, args);
     162#else
     163    vsprintf(buf, format, args);
     164#endif
    148165    buf[caca_get_width() - x] = '\0';
    149166    va_end(args);
     
    157174void caca_clear(void)
    158175{
    159     /* We could use SLsmg_cls() etc., but drawing empty lines is much faster */
     176    enum caca_color oldfg = caca_get_fg_color();
     177    enum caca_color oldbg = caca_get_bg_color();
    160178    int y = caca_get_height();
    161179
     180    caca_set_color(CACA_COLOR_LIGHTGRAY, CACA_COLOR_BLACK);
     181
     182    /* We could use SLsmg_cls() etc., but drawing empty lines is much faster */
    162183    while(y--)
    163184        caca_putstr(0, y, _caca_empty_line);
     185
     186    caca_set_color(oldfg, oldbg);
    164187}
    165188
  • libcaca/trunk/src/sprite.c

    r205 r226  
    220220void caca_draw_sprite(int x, int y, struct caca_sprite *sprite, int f)
    221221{
    222     int i, j, oldcol;
     222    int i, j;
     223    enum caca_color oldfg, oldbg;
    223224    struct caca_frame *frame;
    224225
     
    231232    frame = &sprite->frames[f];
    232233
    233     oldcol = caca_get_color();
     234    oldfg = caca_get_fg_color();
     235    oldbg = caca_get_bg_color();
    234236
    235237    for(j = 0; j < frame->h; j++)
     
    240242            if(col >= 0)
    241243            {
    242                 caca_set_color(col);
     244                caca_set_color(col, CACA_COLOR_BLACK);
    243245                caca_putchar(x + i - frame->dx, y + j - frame->dy,
    244246                           frame->chars[frame->w * j + i]);
     
    247249    }
    248250
    249     caca_set_color(oldcol);
     251    caca_set_color(oldfg, oldbg);
    250252}
    251253
Note: See TracChangeset for help on using the changeset viewer.