Changeset 261


Ignore:
Timestamp:
Dec 19, 2003, 6:26:23 PM (17 years ago)
Author:
Sam Hocevar
Message:
  • src/graphics.c: + Progress in the X11 driver. + Fixed a compilation bug in the conio driver.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/graphics.c

    r257 r261  
    8282Window _caca_window;
    8383GC _caca_gc;
     84XImage _caca_image;
     85static int *_caca_screen;
     86int _caca_colors[16];
    8487#endif
    8588
     
    169172//    putch(c);
    170173#elif defined(USE_X11)
    171     /* FIXME */
     174    _caca_screen[x + y * _caca_width] =
     175        ((int)c << 8) | ((int)_caca_bgcolor << 4) | (int)_caca_fgcolor;
    172176#endif
    173177}
     
    183187void caca_putstr(int x, int y, const char *s)
    184188{
     189#if defined(USE_CONIO)
     190    char *buf;
     191#elif defined(USE_X11)
     192    int *buf;
     193#endif
    185194    unsigned int len;
    186195
     
    213222    addstr(s);
    214223#elif defined(USE_CONIO)
    215     char *buf = _caca_screen + 2 * (x + y * _caca_width);
     224    buf = _caca_screen + 2 * (x + y * _caca_width);
    216225    while(*s)
    217226    {
     
    222231//    cputs(s);
    223232#elif defined(USE_X11)
    224     /* FIXME */
     233    buf = _caca_screen + x + y * _caca_width;
     234    while(*s)
     235        *buf++ = ((int)*s++ << 8) | ((int)_caca_bgcolor << 4) | (int)_caca_fgcolor;
    225236#endif
    226237}
     
    386397#elif defined(USE_CONIO)
    387398    gettextinfo(&ti);
    388     _caca_screen = malloc(2 * ti.screenwidth * ti.screenheight);
     399    _caca_screen = malloc(2 * ti.screenwidth * ti.screenheight * sizeof(char));
    389400    if(_caca_screen == NULL)
    390401        return -1;
     
    398409
    399410#elif defined(USE_X11)
    400     int black_color;
    401     int white_color;
     411    static int x11_colors[] =
     412    {
     413        /* Standard curses colours */
     414        0, 0, 0,
     415        0, 0, 32768,
     416        0, 32768, 0,
     417        0, 32768, 32768,
     418        32768, 0, 0,
     419        32768, 0, 32768,
     420        32768, 32768, 0,
     421        32768, 32768, 32768,
     422        /* Extra values for xterm-16color */
     423        16384, 16384, 16384,
     424        16384, 16384, 65535,
     425        16384, 65535, 16384,
     426        16384, 65535, 65535,
     427        65535, 16384, 16384,
     428        65535, 16384, 65535,
     429        65535, 65535, 16384,
     430        65535, 65535, 65535,
     431    };
     432
     433    int i;
     434    Colormap colormap;
     435
     436    /* FIXME */
     437    _caca_width = 80;
     438    _caca_height = 30;
     439
     440    _caca_screen = malloc(_caca_width * _caca_height * sizeof(int));
     441    if(_caca_screen == NULL)
     442        return -1;
    402443
    403444    _caca_dpy = XOpenDisplay(NULL);
    404445    if(_caca_dpy == NULL)
     446    {
     447        free(_caca_screen);
    405448        return -1;
    406 
    407     black_color = BlackPixel(_caca_dpy, DefaultScreen(_caca_dpy));
    408     white_color = WhitePixel(_caca_dpy, DefaultScreen(_caca_dpy));
     449    }
     450
     451    colormap = DefaultColormap(_caca_dpy, DefaultScreen(_caca_dpy));
     452    for(i = 0; i < 16; i++)
     453    {
     454        XColor color;
     455        color.red = x11_colors[i * 3];
     456        color.green = x11_colors[i * 3 + 1];
     457        color.blue = x11_colors[i * 3 + 2];
     458        XAllocColor(_caca_dpy, colormap, &color);
     459        _caca_colors[i] = color.pixel;
     460    }
    409461
    410462    _caca_window = XCreateSimpleWindow(_caca_dpy, DefaultRootWindow(_caca_dpy),
    411463                                       0, 0, 400, 300, 0,
    412                                        black_color, black_color);
     464                                       _caca_colors[0], _caca_colors[0]);
    413465    XSelectInput(_caca_dpy, _caca_window, StructureNotifyMask);
    414466    XMapWindow(_caca_dpy, _caca_window);
    415467
    416468    _caca_gc = XCreateGC(_caca_dpy, _caca_window, 0, NULL);
    417     XSetForeground(_caca_dpy, _caca_gc, white_color);
     469    XSetForeground(_caca_dpy, _caca_gc, _caca_colors[15]);
    418470
    419471    for(;;)
     
    427479    XSelectInput(_caca_dpy, _caca_window, KeyPressMask);
    428480
    429     /* FIXME */
    430     _caca_width = 80;
    431     _caca_height = 24;
    432 
    433481    XSync(_caca_dpy, False);
    434482
     483    //_caca_image =
    435484#endif
    436485    _caca_empty_line = malloc(_caca_width + 1);
     
    460509    XDestroyWindow(_caca_dpy, _caca_window);
    461510    XCloseDisplay(_caca_dpy);
     511    free(_caca_screen);
    462512#endif
    463513    free(_caca_empty_line);
     
    529579#   endif
    530580#elif defined(USE_X11)
    531     /* FIXME */
     581    int x, y;
     582
     583    for(y = 0; y < _caca_height; y++)
     584        for(x = 0; x < _caca_width; x++)
     585        {
     586            int item = _caca_screen[x + y * _caca_width];
     587            char data = item >> 8;
     588            XSetForeground(_caca_dpy, _caca_gc, _caca_colors[(item >> 4) & 0xf]);
     589            XFillRectangle(_caca_dpy, _caca_window, _caca_gc,
     590                           x * 6, y * 12, 6, 12);
     591            XSetForeground(_caca_dpy, _caca_gc, _caca_colors[item & 0xf]);
     592            XDrawString(_caca_dpy, _caca_window, _caca_gc,
     593                        x * 6, y * 12 + 10, &data, 1);
     594        }
    532595    XFlush(_caca_dpy);
    533596#endif
Note: See TracChangeset for help on using the changeset viewer.