Ignore:
Timestamp:
Apr 16, 2006, 11:52:05 PM (15 years ago)
Author:
Sam Hocevar
Message:
  • Added truecolor support to the X11 and GL drivers.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/driver_x11.c

    r777 r780  
    4848    long int event_mask;
    4949    int font_width, font_height;
    50     int colors[16];
     50    int colors[4096];
    5151    Font font;
    5252    XFontStruct *font_struct;
     
    6060static int x11_init_graphics(caca_t *kk)
    6161{
    62     static int const x11_palette[] =
    63     {
    64         /* Standard curses colours */
    65         0x0,    0x0,    0x0,
    66         0x0,    0x0,    0x8000,
    67         0x0,    0x8000, 0x0,
    68         0x0,    0x8000, 0x8000,
    69         0x8000, 0x0,    0x0,
    70         0x8000, 0x0,    0x8000,
    71         0x8000, 0x8000, 0x0,
    72         0x8000, 0x8000, 0x8000,
    73         /* Extra values for xterm-16color */
    74         0x4000, 0x4000, 0x4000,
    75         0x4000, 0x4000, 0xffff,
    76         0x4000, 0xffff, 0x4000,
    77         0x4000, 0xffff, 0xffff,
    78         0xffff, 0x4000, 0x4000,
    79         0xffff, 0x4000, 0xffff,
    80         0xffff, 0xffff, 0x4000,
    81         0xffff, 0xffff, 0xffff,
    82     };
    83 
    8462    Colormap colormap;
    8563    XSetWindowAttributes x11_winattr;
     
    149127
    150128    colormap = DefaultColormap(kk->drv.p->dpy, DefaultScreen(kk->drv.p->dpy));
    151     for(i = 0; i < 16; i++)
     129    for(i = 0x000; i < 0x1000; i++)
    152130    {
    153131        XColor color;
    154         color.red = x11_palette[i * 3];
    155         color.green = x11_palette[i * 3 + 1];
    156         color.blue = x11_palette[i * 3 + 2];
     132        color.red = ((i & 0xf00) >> 8) * 0x1111;
     133        color.green = ((i & 0x0f0) >> 4) * 0x1111;
     134        color.blue = (i & 0x00f) * 0x1111;
    157135        XAllocColor(kk->drv.p->dpy, colormap, &color);
    158136        kk->drv.p->colors[i] = color.pixel;
     
    160138
    161139    x11_winattr.backing_store = Always;
    162     x11_winattr.background_pixel = kk->drv.p->colors[0];
     140    x11_winattr.background_pixel = kk->drv.p->colors[0x000];
    163141    x11_winattr.event_mask = ExposureMask | StructureNotifyMask;
    164142
     
    177155
    178156    kk->drv.p->gc = XCreateGC(kk->drv.p->dpy, kk->drv.p->window, 0, NULL);
    179     XSetForeground(kk->drv.p->dpy, kk->drv.p->gc, kk->drv.p->colors[15]);
     157    XSetForeground(kk->drv.p->dpy, kk->drv.p->gc, kk->drv.p->colors[0x888]);
    180158    XSetFont(kk->drv.p->dpy, kk->drv.p->gc, kk->drv.p->font);
    181159
     
    259237        {
    260238            uint32_t *attr = kk->qq->attr + x + y * kk->qq->width;
    261             uint8_t bg = _cucul_argb32_to_ansi4bg(*attr);
     239            uint16_t bg = _cucul_argb32_to_rgb12bg(*attr);
    262240
    263241            len = 1;
    264242            while(x + len < kk->qq->width
    265                    && _cucul_argb32_to_ansi4bg(attr[len]) == bg)
     243                   && _cucul_argb32_to_rgb12bg(attr[len]) == bg)
    266244                len++;
    267245
    268246            XSetForeground(kk->drv.p->dpy, kk->drv.p->gc,
    269                            kk->drv.p->colors[_cucul_argb32_to_ansi4bg(*attr)]);
     247                           kk->drv.p->colors[bg]);
    270248            XFillRectangle(kk->drv.p->dpy, kk->drv.p->pixmap, kk->drv.p->gc,
    271249                           x * kk->drv.p->font_width, y * kk->drv.p->font_height,
     
    290268
    291269            XSetForeground(kk->drv.p->dpy, kk->drv.p->gc,
    292                            kk->drv.p->colors[_cucul_argb32_to_ansi4fg(*attr)]);
     270                           kk->drv.p->colors[_cucul_argb32_to_rgb12fg(*attr)]);
    293271
    294272            /* Plain ASCII, no problem. */
Note: See TracChangeset for help on using the changeset viewer.