Ignore:
Timestamp:
Apr 18, 2006, 5:11:25 PM (15 years ago)
Author:
Sam Hocevar
Message:
  • Renamed caca_t into caca_display_t.
  • Renamed canvas handle variables from "c" to "cv". Eh ouais mon gros.
Location:
libcaca/trunk/caca
Files:
13 edited

Legend:

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

    r810 r811  
    3030#include "caca_internals.h"
    3131
    32 static int caca_init_driver(caca_t *kk);
     32static int caca_init_driver(caca_display_t *dp);
    3333
    3434/** \brief Attach a caca graphical context to a cucul canvas.
     
    3939 *  then be displayed by the libcaca driver.
    4040 *
    41  *  \param c The cucul cavas.
     41 *  \param cv The cucul cavas.
    4242 *  \return The caca graphical context or NULL if an error occurred.
    4343 */
    44 caca_t * caca_attach(cucul_canvas_t * c)
     44caca_display_t * caca_attach(cucul_canvas_t * cv)
    4545{
    46     caca_t *kk = malloc(sizeof(caca_t));
     46    caca_display_t *dp = malloc(sizeof(caca_display_t));
    4747
    48     kk->c = c;
     48    dp->cv = cv;
    4949
    50     if(caca_init_driver(kk))
     50    if(caca_init_driver(dp))
    5151    {
    52         free(kk);
     52        free(dp);
    5353        return NULL;
    5454    }
    5555
    56     if(kk->drv.init_graphics(kk))
     56    if(dp->drv.init_graphics(dp))
    5757    {
    58         free(kk);
     58        free(dp);
    5959        return NULL;
    6060    }
    6161
    6262    /* Attached! */
    63     kk->c->refcount++;
     63    dp->cv->refcount++;
    6464
    6565    /* Graphics stuff */
    66     kk->delay = 0;
    67     kk->rendertime = 0;
     66    dp->delay = 0;
     67    dp->rendertime = 0;
    6868
    6969    /* Events stuff */
    7070#if defined(USE_SLANG) || defined(USE_NCURSES)
    71     kk->events.key_timer.last_sec = 0;
    72     kk->events.key_timer.last_usec = 0;
    73     kk->events.last_key_ticks = 0;
    74     kk->events.autorepeat_ticks = 0;
    75     kk->events.last_key_event.type = CACA_EVENT_NONE;
     71    dp->events.key_timer.last_sec = 0;
     72    dp->events.key_timer.last_usec = 0;
     73    dp->events.last_key_ticks = 0;
     74    dp->events.autorepeat_ticks = 0;
     75    dp->events.last_key_event.type = CACA_EVENT_NONE;
    7676#endif
    7777#if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL)
    78     kk->events.queue = 0;
     78    dp->events.queue = 0;
    7979#endif
    8080
    81     kk->timer.last_sec = 0;
    82     kk->timer.last_usec = 0;
    83     kk->lastticks = 0;
     81    dp->timer.last_sec = 0;
     82    dp->timer.last_usec = 0;
     83    dp->lastticks = 0;
    8484
    8585    /* Mouse position */
    86     kk->mouse.x = kk->c->width / 2;
    87     kk->mouse.y = kk->c->height / 2;
     86    dp->mouse.x = dp->cv->width / 2;
     87    dp->mouse.y = dp->cv->height / 2;
    8888
    8989    /* Resize events */
    90     kk->resize.resized = 0;
     90    dp->resize.resized = 0;
    9191
    92     return kk;
     92    return dp;
    9393}
    9494
     
    9999 *  attached to it afterwards.
    100100 *
    101  *  \param kk The libcaca graphical context.
     101 *  \param dp The libcaca graphical context.
    102102 */
    103 void caca_detach(caca_t *kk)
     103void caca_detach(caca_display_t *dp)
    104104{
    105     kk->drv.end_graphics(kk);
    106     kk->c->refcount--;
    107     free(kk);
     105    dp->drv.end_graphics(dp);
     106    dp->cv->refcount--;
     107    free(dp);
    108108}
    109109
     
    112112 */
    113113
    114 static int caca_init_driver(caca_t *kk)
     114static int caca_init_driver(caca_display_t *dp)
    115115{
    116116#if defined(HAVE_GETENV) && defined(HAVE_STRCASECMP)
     
    121121    {
    122122#if defined(USE_WIN32)
    123         if(!strcasecmp(var, "win32")) return win32_install(kk);
     123        if(!strcasecmp(var, "win32")) return win32_install(dp);
    124124#endif
    125125#if defined(USE_CONIO)
    126         if(!strcasecmp(var, "conio")) return conio_install(kk);
     126        if(!strcasecmp(var, "conio")) return conio_install(dp);
    127127#endif
    128128#if defined(USE_X11)
    129         if(!strcasecmp(var, "x11")) return x11_install(kk);
     129        if(!strcasecmp(var, "x11")) return x11_install(dp);
    130130#endif
    131131#if defined(USE_GL)
    132         if(!strcasecmp(var, "gl")) return gl_install(kk);
     132        if(!strcasecmp(var, "gl")) return gl_install(dp);
    133133#endif
    134         if(!strcasecmp(var, "raw")) return raw_install(kk);
     134        if(!strcasecmp(var, "raw")) return raw_install(dp);
    135135#if defined(USE_SLANG)
    136         if(!strcasecmp(var, "slang")) return slang_install(kk);
     136        if(!strcasecmp(var, "slang")) return slang_install(dp);
    137137#endif
    138138#if defined(USE_NCURSES)
    139         if(!strcasecmp(var, "ncurses")) return ncurses_install(kk);
     139        if(!strcasecmp(var, "ncurses")) return ncurses_install(dp);
    140140#endif
    141141#if defined(USE_VGA)
    142         if(!strcasecmp(var, "vga")) return vga_install(kk);
     142        if(!strcasecmp(var, "vga")) return vga_install(dp);
    143143#endif
    144144        return -1;
     
    147147
    148148#if defined(USE_WIN32)
    149     if(win32_install(kk) == 0) return 0;
     149    if(win32_install(dp) == 0) return 0;
    150150#endif
    151151#if defined(USE_CONIO)
    152     if(conio_install(kk) == 0) return 0;
     152    if(conio_install(dp) == 0) return 0;
    153153#endif
    154154#if defined(USE_VGA)
    155     if(vga_install(kk) == 0) return 0;
     155    if(vga_install(dp) == 0) return 0;
    156156#endif
    157157#if defined(USE_X11)
    158     if(x11_install(kk) == 0) return 0;
     158    if(x11_install(dp) == 0) return 0;
    159159#endif
    160160#if defined(USE_GL)
    161     if(gl_install(kk) == 0) return 0;
     161    if(gl_install(dp) == 0) return 0;
    162162#endif
    163163#if defined(USE_SLANG)
    164     if(slang_install(kk) == 0) return 0;
     164    if(slang_install(dp) == 0) return 0;
    165165#endif
    166166#if defined(USE_NCURSES)
    167     if(ncurses_install(kk) == 0) return 0;
     167    if(ncurses_install(dp) == 0) return 0;
    168168#endif
    169169
  • libcaca/trunk/caca/caca.h

    r810 r811  
    8989
    9090/** \e libcaca context */
    91 typedef struct caca caca_t;
     91typedef struct caca_display caca_display_t;
    9292/** event structure */
    9393typedef struct caca_event caca_event_t;
     
    204204 *
    205205 *  @{ */
    206 caca_t * caca_attach(cucul_canvas_t *);
    207 void caca_detach(caca_t *);
    208 void caca_set_delay(caca_t *, unsigned int);
    209 void caca_display(caca_t *);
    210 unsigned int caca_get_rendertime(caca_t *);
    211 unsigned int caca_get_window_width(caca_t *);
    212 unsigned int caca_get_window_height(caca_t *);
    213 int caca_set_window_title(caca_t *, char const *);
     206caca_display_t * caca_attach(cucul_canvas_t *);
     207void caca_detach(caca_display_t *);
     208void caca_set_delay(caca_display_t *, unsigned int);
     209void caca_display(caca_display_t *);
     210unsigned int caca_get_rendertime(caca_display_t *);
     211unsigned int caca_get_window_width(caca_display_t *);
     212unsigned int caca_get_window_height(caca_display_t *);
     213int caca_set_window_title(caca_display_t *, char const *);
    214214/*  @} */
    215215
     
    220220 *
    221221 *  @{ */
    222 int caca_get_event(caca_t *, unsigned int, caca_event_t *, int);
    223 unsigned int caca_get_mouse_x(caca_t *);
    224 unsigned int caca_get_mouse_y(caca_t *);
    225 void caca_set_mouse(caca_t *, int);
     222int caca_get_event(caca_display_t *, unsigned int, caca_event_t *, int);
     223unsigned int caca_get_mouse_x(caca_display_t *);
     224unsigned int caca_get_mouse_y(caca_display_t *);
     225void caca_set_mouse(caca_display_t *, int);
    226226/*  @} */
    227227
  • libcaca/trunk/caca/caca_internals.h

    r810 r811  
    6262/* Available external drivers */
    6363#if defined(USE_CONIO)
    64 int conio_install(caca_t *);
     64int conio_install(caca_display_t *);
    6565#endif
    6666#if defined(USE_GL)
    67 int gl_install(caca_t *);
     67int gl_install(caca_display_t *);
    6868#endif
    6969#if defined(USE_NCURSES)
    70 int ncurses_install(caca_t *);
     70int ncurses_install(caca_display_t *);
    7171#endif
    72 int raw_install(caca_t *);
     72int raw_install(caca_display_t *);
    7373#if defined(USE_SLANG)
    74 int slang_install(caca_t *);
     74int slang_install(caca_display_t *);
    7575#endif
    7676#if defined(USE_VGA)
    77 int vga_install(caca_t *);
     77int vga_install(caca_display_t *);
    7878#endif
    7979#if defined(USE_WIN32)
    80 int win32_install(caca_t *);
     80int win32_install(caca_display_t *);
    8181#endif
    8282#if defined(USE_X11)
    83 int x11_install(caca_t *);
     83int x11_install(caca_display_t *);
    8484#endif
    8585
     
    9090};
    9191
    92 /* Internal caca context */
    93 struct caca
     92/* Internal caca display context */
     93struct caca_display
    9494{
    9595    /* A link to our cucul canvas */
    96     cucul_canvas_t *c;
     96    cucul_canvas_t *cv;
    9797
    9898    /* Device-specific functions */
     
    102102        struct driver_private *p;
    103103
    104         int (* init_graphics) (caca_t *);
    105         int (* end_graphics) (caca_t *);
    106         int (* set_window_title) (caca_t *, char const *);
    107         unsigned int (* get_window_width) (caca_t *);
    108         unsigned int (* get_window_height) (caca_t *);
    109         void (* display) (caca_t *);
    110         void (* handle_resize) (caca_t *);
    111         int (* get_event) (caca_t *, caca_event_t *);
    112         void (* set_mouse) (caca_t *, int);
     104        int (* init_graphics) (caca_display_t *);
     105        int (* end_graphics) (caca_display_t *);
     106        int (* set_window_title) (caca_display_t *, char const *);
     107        unsigned int (* get_window_width) (caca_display_t *);
     108        unsigned int (* get_window_height) (caca_display_t *);
     109        void (* display) (caca_display_t *);
     110        void (* handle_resize) (caca_display_t *);
     111        int (* get_event) (caca_display_t *, caca_event_t *);
     112        void (* set_mouse) (caca_display_t *, int);
    113113    } drv;
    114114
     
    154154
    155155/* Internal event functions */
    156 extern void _caca_handle_resize(caca_t *);
     156extern void _caca_handle_resize(caca_display_t *);
    157157#if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL)
    158 extern void _push_event(caca_t *, caca_event_t *);
    159 extern int _pop_event(caca_t *, caca_event_t *);
     158extern void _push_event(caca_display_t *, caca_event_t *);
     159extern int _pop_event(caca_display_t *, caca_event_t *);
    160160#endif
    161161
  • libcaca/trunk/caca/driver_conio.c

    r810 r811  
    3939};
    4040
    41 static int conio_init_graphics(caca_t *kk)
     41static int conio_init_graphics(caca_display_t *dp)
    4242{
    43     kk->drv.p = malloc(sizeof(struct driver_private));
     43    dp->drv.p = malloc(sizeof(struct driver_private));
    4444
    4545    _wscroll = 0;
     
    4747    clrscr();
    4848
    49     gettextinfo(&kk->drv.p->ti);
    50     kk->drv.p->screen = malloc(2 * kk->drv.p->ti.screenwidth
    51                                  * kk->drv.p->ti.screenheight * sizeof(char));
    52     if(kk->drv.p->screen == NULL)
     49    gettextinfo(&dp->drv.p->ti);
     50    dp->drv.p->screen = malloc(2 * dp->drv.p->ti.screenwidth
     51                                 * dp->drv.p->ti.screenheight * sizeof(char));
     52    if(dp->drv.p->screen == NULL)
    5353        return -1;
    5454#   if defined(SCREENUPDATE_IN_PC_H)
    55     ScreenRetrieve(kk->drv.p->screen);
     55    ScreenRetrieve(dp->drv.p->screen);
    5656#   else
    5757    /* FIXME */
    5858#   endif
    59     _cucul_set_size(kk->c, kk->drv.p->ti.screenwidth,
    60                            kk->drv.p->ti.screenheight);
     59    _cucul_set_size(dp->cv, dp->drv.p->ti.screenwidth,
     60                            dp->drv.p->ti.screenheight);
    6161    return 0;
    6262}
    6363
    64 static int conio_end_graphics(caca_t *kk)
     64static int conio_end_graphics(caca_display_t *dp)
    6565{
    6666    _wscroll = 1;
    6767    textcolor((enum COLORS)WHITE);
    6868    textbackground((enum COLORS)BLACK);
    69     gotoxy(kk->c->width, kk->c->height);
     69    gotoxy(dp->cv->width, dp->cv->height);
    7070    cputs("\r\n");
    7171    _setcursortype(_NORMALCURSOR);
    7272
    73     free(kk->drv.p->screen);
    74     free(kk->drv.p);
     73    free(dp->drv.p->screen);
     74    free(dp->drv.p);
    7575
    7676    return 0;
    7777}
    7878
    79 static int conio_set_window_title(caca_t *kk, char const *title)
     79static int conio_set_window_title(caca_display_t *dp, char const *title)
    8080{
    8181    return 0;
    8282}
    8383
    84 static unsigned int conio_get_window_width(caca_t *kk)
     84static unsigned int conio_get_window_width(caca_display_t *dp)
    8585{
    8686    /* Fallback to a 6x10 font */
    87     return kk->c->width * 6;
     87    return dp->cv->width * 6;
    8888}
    8989
    90 static unsigned int conio_get_window_height(caca_t *kk)
     90static unsigned int conio_get_window_height(caca_display_t *dp)
    9191{
    9292    /* Fallback to a 6x10 font */
    93     return kk->c->height * 10;
     93    return dp->cv->height * 10;
    9494}
    9595
    96 static void conio_display(caca_t *kk)
     96static void conio_display(caca_display_t *dp)
    9797{
    98     char *screen = kk->drv.p->screen;
    99     uint32_t *attr = kk->c->attr;
    100     uint32_t *chars = kk->c->chars;
     98    char *screen = dp->drv.p->screen;
     99    uint32_t *attr = dp->cv->attr;
     100    uint32_t *chars = dp->cv->chars;
    101101    int n;
    102102
    103     for(n = kk->c->height * kk->c->width; n--; )
     103    for(n = dp->cv->height * dp->cv->width; n--; )
    104104    {
    105105        *screen++ = _cucul_utf32_to_cp437(*chars++);
     
    107107    }
    108108#   if defined(SCREENUPDATE_IN_PC_H)
    109     ScreenUpdate(kk->drv.p->screen);
     109    ScreenUpdate(dp->drv.p->screen);
    110110#   else
    111111    /* FIXME */
     
    113113}
    114114
    115 static void conio_handle_resize(caca_t *kk)
     115static void conio_handle_resize(caca_display_t *dp)
    116116{
    117117    /* We know nothing about our window */
    118     kk->resize.w = kk->c->width;
    119     kk->resize.h = kk->c->height;
     118    dp->resize.w = dp->cv->width;
     119    dp->resize.h = dp->cv->height;
    120120}
    121121
    122 static int conio_get_event(caca_t *kk, caca_event_t *ev)
     122static int conio_get_event(caca_display_t *dp, caca_event_t *ev)
    123123{
    124124    unsigned char ch;
     
    141141    release = *ev;
    142142    release.type = CACA_EVENT_KEY_RELEASE;
    143     _push_event(kk, &release);
     143    _push_event(dp, &release);
    144144
    145145    return 1;
     
    150150 */
    151151
    152 int conio_install(caca_t *kk)
     152int conio_install(caca_display_t *dp)
    153153{
    154     kk->drv.driver = CACA_DRIVER_CONIO;
     154    dp->drv.driver = CACA_DRIVER_CONIO;
    155155
    156     kk->drv.init_graphics = conio_init_graphics;
    157     kk->drv.end_graphics = conio_end_graphics;
    158     kk->drv.set_window_title = conio_set_window_title;
    159     kk->drv.get_window_width = conio_get_window_width;
    160     kk->drv.get_window_height = conio_get_window_height;
    161     kk->drv.display = conio_display;
    162     kk->drv.handle_resize = conio_handle_resize;
    163     kk->drv.get_event = conio_get_event;
    164     kk->drv.set_mouse = NULL;
     156    dp->drv.init_graphics = conio_init_graphics;
     157    dp->drv.end_graphics = conio_end_graphics;
     158    dp->drv.set_window_title = conio_set_window_title;
     159    dp->drv.get_window_width = conio_get_window_width;
     160    dp->drv.get_window_height = conio_get_window_height;
     161    dp->drv.display = conio_display;
     162    dp->drv.handle_resize = conio_handle_resize;
     163    dp->drv.get_event = conio_get_event;
     164    dp->drv.set_mouse = NULL;
    165165
    166166    return 0;
  • libcaca/trunk/caca/driver_gl.c

    r810 r811  
    4242 */
    4343
    44 static caca_t *gl_kk; /* FIXME: we ought to get rid of this */
     44static caca_display_t *gl_d; /* FIXME: we ought to get rid of this */
    4545
    4646/*
     
    7777};
    7878
    79 static int gl_init_graphics(caca_t *kk)
     79static int gl_init_graphics(caca_display_t *dp)
    8080{
    8181    char *empty_texture;
     
    8686    int i;
    8787
    88     kk->drv.p = malloc(sizeof(struct driver_private));
    89 
    90     gl_kk = kk;
     88    dp->drv.p = malloc(sizeof(struct driver_private));
     89
     90    gl_d = dp;
    9191
    9292#if defined(HAVE_GETENV)
     
    9797
    9898    if(width && height)
    99         _cucul_set_size(kk->c, width, height);
    100 
    101     kk->drv.p->font_width = 9;
    102     kk->drv.p->font_height = 15;
    103 
    104     kk->drv.p->width = kk->c->width * kk->drv.p->font_width;
    105     kk->drv.p->height = kk->c->height * kk->drv.p->font_height;
     99        _cucul_set_size(dp->cv, width, height);
     100
     101    dp->drv.p->font_width = 9;
     102    dp->drv.p->font_height = 15;
     103
     104    dp->drv.p->width = dp->cv->width * dp->drv.p->font_width;
     105    dp->drv.p->height = dp->cv->height * dp->drv.p->font_height;
    106106
    107107#ifdef HAVE_GLUTCLOSEFUNC
    108     kk->drv.p->close = 0;
    109 #endif
    110     kk->drv.p->bit = 0;
    111 
    112     kk->drv.p->mouse_changed = kk->drv.p->mouse_clicked = 0;
    113     kk->drv.p->mouse_button = kk->drv.p->mouse_state = 0;
    114 
    115     kk->drv.p->key = 0;
    116     kk->drv.p->special_key = 0;
    117 
    118     kk->drv.p->sw = 9.0f / 16.0f;
    119     kk->drv.p->sh = 15.0f / 16.0f;
     108    dp->drv.p->close = 0;
     109#endif
     110    dp->drv.p->bit = 0;
     111
     112    dp->drv.p->mouse_changed = dp->drv.p->mouse_clicked = 0;
     113    dp->drv.p->mouse_button = dp->drv.p->mouse_state = 0;
     114
     115    dp->drv.p->key = 0;
     116    dp->drv.p->special_key = 0;
     117
     118    dp->drv.p->sw = 9.0f / 16.0f;
     119    dp->drv.p->sh = 15.0f / 16.0f;
    120120
    121121    glutInit(&argc, argv);
    122122
    123123    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    124     glutInitWindowSize(kk->drv.p->width, kk->drv.p->height);
    125     kk->drv.p->window = glutCreateWindow("caca for GL");
    126 
    127     gluOrtho2D(0, kk->drv.p->width, kk->drv.p->height, 0);
     124    glutInitWindowSize(dp->drv.p->width, dp->drv.p->height);
     125    dp->drv.p->window = glutCreateWindow("caca for GL");
     126
     127    gluOrtho2D(0, dp->drv.p->width, dp->drv.p->height, 0);
    128128
    129129    glDisable(GL_CULL_FACE);
     
    148148    glPushMatrix();
    149149    glLoadIdentity();
    150     gluOrtho2D(0, kk->drv.p->width, kk->drv.p->height, 0);
     150    gluOrtho2D(0, dp->drv.p->width, dp->drv.p->height, 0);
    151151
    152152    glMatrixMode(GL_MODELVIEW);
     
    163163    for(i = 32; i < 128; i++)
    164164    {
    165         glGenTextures(1, (GLuint*)&kk->drv.p->id[i - 32]);
    166         glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[i - 32]);
     165        glGenTextures(1, (GLuint*)&dp->drv.p->id[i - 32]);
     166        glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
    167167        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    168168        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     
    181181
    182182        glEnable(GL_TEXTURE_2D);
    183         glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[i - 32]);
     183        glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
    184184        glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
    185                          0, kk->drv.p->height - 16, 16, 16, 0);
     185                         0, dp->drv.p->height - 16, 16, 16, 0);
    186186
    187187#ifdef HAVE_GLUTCHECKLOOP
     
    196196}
    197197
    198 static int gl_end_graphics(caca_t *kk)
    199 {
    200     glutDestroyWindow(kk->drv.p->window);
    201     free(kk->drv.p);
     198static int gl_end_graphics(caca_display_t *dp)
     199{
     200    glutDestroyWindow(dp->drv.p->window);
     201    free(dp->drv.p);
    202202    return 0;
    203203}
    204204
    205 static int gl_set_window_title(caca_t *kk, char const *title)
     205static int gl_set_window_title(caca_display_t *dp, char const *title)
    206206{
    207207    glutSetWindowTitle(title);
     
    209209}
    210210
    211 static unsigned int gl_get_window_width(caca_t *kk)
    212 {
    213     return kk->drv.p->width;
    214 }
    215 
    216 static unsigned int gl_get_window_height(caca_t *kk)
    217 {
    218     return kk->drv.p->height;
    219 }
    220 
    221 static void gl_display(caca_t *kk)
     211static unsigned int gl_get_window_width(caca_display_t *dp)
     212{
     213    return dp->drv.p->width;
     214}
     215
     216static unsigned int gl_get_window_height(caca_display_t *dp)
     217{
     218    return dp->drv.p->height;
     219}
     220
     221static void gl_display(caca_display_t *dp)
    222222{
    223223    unsigned int x, y, line;
     
    226226
    227227    line = 0;
    228     for(y = 0; y < kk->drv.p->height; y += kk->drv.p->font_height)
    229     {
    230         uint32_t *attr = kk->c->attr + line * kk->c->width;
    231 
    232         for(x = 0; x < kk->drv.p->width; x += kk->drv.p->font_width)
     228    for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height)
     229    {
     230        uint32_t *attr = dp->cv->attr + line * dp->cv->width;
     231
     232        for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
    233233        {
    234234            uint16_t bg = _cucul_argb32_to_rgb12bg(*attr++);
     
    239239            glBegin(GL_QUADS);
    240240                glVertex2f(x, y);
    241                 glVertex2f(x + kk->drv.p->font_width, y);
    242                 glVertex2f(x + kk->drv.p->font_width,
    243                            y + kk->drv.p->font_height);
    244                 glVertex2f(x, y + kk->drv.p->font_height);
     241                glVertex2f(x + dp->drv.p->font_width, y);
     242                glVertex2f(x + dp->drv.p->font_width,
     243                           y + dp->drv.p->font_height);
     244                glVertex2f(x, y + dp->drv.p->font_height);
    245245            glEnd();
    246246        }
     
    255255
    256256    line = 0;
    257     for(y = 0; y < kk->drv.p->height; y += kk->drv.p->font_height)
    258     {
    259         uint32_t *attr = kk->c->attr + line * kk->c->width;
    260         uint32_t *chars = kk->c->chars + line * kk->c->width;
    261 
    262         for(x = 0; x < kk->drv.p->width; x += kk->drv.p->font_width)
     257    for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height)
     258    {
     259        uint32_t *attr = dp->cv->attr + line * dp->cv->width;
     260        uint32_t *chars = dp->cv->chars + line * dp->cv->width;
     261
     262        for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
    263263        {
    264             uint32_t c = *chars++;
    265 
    266             if(c > 0x00000020 && c < 0x00000080)
     264            uint32_t cv = *chars++;
     265
     266            if(cv > 0x00000020 && cv < 0x00000080)
    267267            {
    268268                uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
    269                 glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[c - 32]);
     269                glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[cv - 32]);
    270270                glColor3b(((fg & 0xf00) >> 8) * 8,
    271271                          ((fg & 0x0f0) >> 4) * 8,
    272272                          (fg & 0x00f) * 8);
    273273                glBegin(GL_QUADS);
    274                     glTexCoord2f(0, kk->drv.p->sh);
     274                    glTexCoord2f(0, dp->drv.p->sh);
    275275                    glVertex2f(x, y);
    276                     glTexCoord2f(kk->drv.p->sw, kk->drv.p->sh);
    277                     glVertex2f(x + kk->drv.p->font_width, y);
    278                     glTexCoord2f(kk->drv.p->sw, 0);
    279                     glVertex2f(x + kk->drv.p->font_width,
    280                                y + kk->drv.p->font_height);
     276                    glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
     277                    glVertex2f(x + dp->drv.p->font_width, y);
     278                    glTexCoord2f(dp->drv.p->sw, 0);
     279                    glVertex2f(x + dp->drv.p->font_width,
     280                               y + dp->drv.p->font_height);
    281281                    glTexCoord2f(0, 0);
    282                     glVertex2f(x, y + kk->drv.p->font_height);
     282                    glVertex2f(x, y + dp->drv.p->font_height);
    283283                glEnd();
    284284            }
     
    300300}
    301301
    302 static void gl_handle_resize(caca_t *kk)
    303 {
    304     kk->drv.p->width = kk->drv.p->new_width;
    305     kk->drv.p->height = kk->drv.p->new_height;
     302static void gl_handle_resize(caca_display_t *dp)
     303{
     304    dp->drv.p->width = dp->drv.p->new_width;
     305    dp->drv.p->height = dp->drv.p->new_height;
    306306
    307307    glMatrixMode(GL_PROJECTION);
     
    309309    glLoadIdentity();
    310310
    311     glViewport(0, 0, kk->drv.p->width, kk->drv.p->height);
    312     gluOrtho2D(0, kk->drv.p->width, kk->drv.p->height, 0);
     311    glViewport(0, 0, dp->drv.p->width, dp->drv.p->height);
     312    gluOrtho2D(0, dp->drv.p->width, dp->drv.p->height, 0);
    313313    glMatrixMode(GL_MODELVIEW);
    314314}
    315315
    316 static int gl_get_event(caca_t *kk, caca_event_t *ev)
     316static int gl_get_event(caca_display_t *dp, caca_event_t *ev)
    317317{
    318318#ifdef HAVE_GLUTCHECKLOOP
     
    323323
    324324#ifdef HAVE_GLUTCLOSEFUNC
    325     if(kk->drv.p->close)
    326     {
    327         kk->drv.p->close = 0;
     325    if(dp->drv.p->close)
     326    {
     327        dp->drv.p->close = 0;
    328328        ev->type = CACA_EVENT_QUIT;
    329329        return 1;
     
    331331#endif
    332332
    333     if(kk->resize.resized)
     333    if(dp->resize.resized)
    334334    {
    335335        ev->type = CACA_EVENT_RESIZE;
    336         ev->data.resize.w = kk->c->width;
    337         ev->data.resize.h = kk->c->height;
     336        ev->data.resize.w = dp->cv->width;
     337        ev->data.resize.h = dp->cv->height;
    338338        return 1;
    339339    }
    340340
    341     if(kk->drv.p->mouse_changed)
     341    if(dp->drv.p->mouse_changed)
    342342    {
    343343        ev->type = CACA_EVENT_MOUSE_MOTION;
    344         ev->data.mouse.x = kk->mouse.x;
    345         ev->data.mouse.y = kk->mouse.y;
    346         kk->drv.p->mouse_changed = 0;
    347 
    348         if(kk->drv.p->mouse_clicked)
     344        ev->data.mouse.x = dp->mouse.x;
     345        ev->data.mouse.y = dp->mouse.y;
     346        dp->drv.p->mouse_changed = 0;
     347
     348        if(dp->drv.p->mouse_clicked)
    349349        {
    350             _push_event(kk, ev);
     350            _push_event(dp, ev);
    351351            ev->type = CACA_EVENT_MOUSE_PRESS;
    352             ev->data.mouse.button = kk->drv.p->mouse_button;
    353             kk->drv.p->mouse_clicked = 0;
     352            ev->data.mouse.button = dp->drv.p->mouse_button;
     353            dp->drv.p->mouse_clicked = 0;
    354354        }
    355355
     
    357357    }
    358358
    359     if(kk->drv.p->key != 0)
     359    if(dp->drv.p->key != 0)
    360360    {
    361361        ev->type = CACA_EVENT_KEY_PRESS;
    362         ev->data.key.ch = kk->drv.p->key;
    363         ev->data.key.ucs4 = (uint32_t)kk->drv.p->key;
    364         ev->data.key.utf8[0] = kk->drv.p->key;
     362        ev->data.key.ch = dp->drv.p->key;
     363        ev->data.key.ucs4 = (uint32_t)dp->drv.p->key;
     364        ev->data.key.utf8[0] = dp->drv.p->key;
    365365        ev->data.key.utf8[1] = '\0';
    366         kk->drv.p->key = 0;
     366        dp->drv.p->key = 0;
    367367        return 1;
    368368    }
    369369
    370     if(kk->drv.p->special_key != 0)
    371     {
    372         switch(kk->drv.p->special_key)
     370    if(dp->drv.p->special_key != 0)
     371    {
     372        switch(dp->drv.p->special_key)
    373373        {
    374374            case GLUT_KEY_F1 : ev->data.key.ch = CACA_KEY_F1; break;
     
    395395        ev->data.key.utf8[0] = '\0';
    396396
    397         kk->drv.p->special_key = 0;
     397        dp->drv.p->special_key = 0;
    398398        return 1;
    399399    }
     
    404404
    405405
    406 static void gl_set_mouse(caca_t *kk, int flag)
     406static void gl_set_mouse(caca_display_t *dp, int flag)
    407407{
    408408    if(flag)
     
    418418static void gl_handle_keyboard(unsigned char key, int x, int y)
    419419{
    420     caca_t *kk = gl_kk;
    421 
    422     kk->drv.p->key = key;
     420    caca_display_t *dp = gl_d;
     421
     422    dp->drv.p->key = key;
    423423}
    424424
    425425static void gl_handle_special_key(int key, int x, int y)
    426426{
    427     caca_t *kk = gl_kk;
    428 
    429     kk->drv.p->special_key = key;
     427    caca_display_t *dp = gl_d;
     428
     429    dp->drv.p->special_key = key;
    430430}
    431431
    432432static void gl_handle_reshape(int w, int h)
    433433{
    434     caca_t *kk = gl_kk;
    435 
    436     if(kk->drv.p->bit) /* Do not handle reshaping at the first time */
    437     {
    438         kk->drv.p->new_width = w;
    439         kk->drv.p->new_height = h;
    440 
    441         kk->resize.w = w / kk->drv.p->font_width;
    442         kk->resize.h = (h / kk->drv.p->font_height) + 1;
    443 
    444         kk->resize.resized = 1;
     434    caca_display_t *dp = gl_d;
     435
     436    if(dp->drv.p->bit) /* Do not handle reshaping at the first time */
     437    {
     438        dp->drv.p->new_width = w;
     439        dp->drv.p->new_height = h;
     440
     441        dp->resize.w = w / dp->drv.p->font_width;
     442        dp->resize.h = (h / dp->drv.p->font_height) + 1;
     443
     444        dp->resize.resized = 1;
    445445    }
    446446    else
    447         kk->drv.p->bit = 1;
     447        dp->drv.p->bit = 1;
    448448}
    449449
    450450static void gl_handle_mouse(int button, int state, int x, int y)
    451451{
    452     caca_t *kk = gl_kk;
    453 
    454     kk->drv.p->mouse_clicked = 1;
    455     kk->drv.p->mouse_button = button;
    456     kk->drv.p->mouse_state = state;
    457     kk->drv.p->mouse_x = x / kk->drv.p->font_width;
    458     kk->drv.p->mouse_y = y / kk->drv.p->font_height;
    459     kk->mouse.x = kk->drv.p->mouse_x;
    460     kk->mouse.y = kk->drv.p->mouse_y;
    461     kk->drv.p->mouse_changed = 1;
     452    caca_display_t *dp = gl_d;
     453
     454    dp->drv.p->mouse_clicked = 1;
     455    dp->drv.p->mouse_button = button;
     456    dp->drv.p->mouse_state = state;
     457    dp->drv.p->mouse_x = x / dp->drv.p->font_width;
     458    dp->drv.p->mouse_y = y / dp->drv.p->font_height;
     459    dp->mouse.x = dp->drv.p->mouse_x;
     460    dp->mouse.y = dp->drv.p->mouse_y;
     461    dp->drv.p->mouse_changed = 1;
    462462}
    463463
    464464static void gl_handle_mouse_motion(int x, int y)
    465465{
    466     caca_t *kk = gl_kk;
    467     kk->drv.p->mouse_x = x / kk->drv.p->font_width;
    468     kk->drv.p->mouse_y = y / kk->drv.p->font_height;
    469     kk->mouse.x = kk->drv.p->mouse_x;
    470     kk->mouse.y = kk->drv.p->mouse_y;
    471     kk->drv.p->mouse_changed = 1;
     466    caca_display_t *dp = gl_d;
     467    dp->drv.p->mouse_x = x / dp->drv.p->font_width;
     468    dp->drv.p->mouse_y = y / dp->drv.p->font_height;
     469    dp->mouse.x = dp->drv.p->mouse_x;
     470    dp->mouse.y = dp->drv.p->mouse_y;
     471    dp->drv.p->mouse_changed = 1;
    472472}
    473473
     
    475475static void gl_handle_close(void)
    476476{
    477     caca_t *kk = gl_kk;
    478     kk->drv.p->close = 1;
     477    caca_display_t *dp = gl_d;
     478    dp->drv.p->close = 1;
    479479}
    480480#endif
     
    482482static void _display(void)
    483483{
    484     caca_t *kk = gl_kk;
    485     gl_display(kk);
     484    caca_display_t *dp = gl_d;
     485    gl_display(dp);
    486486}
    487487
     
    491491 */
    492492
    493 int gl_install(caca_t *kk)
     493int gl_install(caca_display_t *dp)
    494494{
    495495#if defined(HAVE_GETENV) && defined(GLUT_XLIB_IMPLEMENTATION)
     
    498498#endif
    499499
    500     kk->drv.driver = CACA_DRIVER_GL;
    501 
    502     kk->drv.init_graphics = gl_init_graphics;
    503     kk->drv.end_graphics = gl_end_graphics;
    504     kk->drv.set_window_title = gl_set_window_title;
    505     kk->drv.get_window_width = gl_get_window_width;
    506     kk->drv.get_window_height = gl_get_window_height;
    507     kk->drv.display = gl_display;
    508     kk->drv.handle_resize = gl_handle_resize;
    509     kk->drv.get_event = gl_get_event;
    510     kk->drv.set_mouse = gl_set_mouse;
     500    dp->drv.driver = CACA_DRIVER_GL;
     501
     502    dp->drv.init_graphics = gl_init_graphics;
     503    dp->drv.end_graphics = gl_end_graphics;
     504    dp->drv.set_window_title = gl_set_window_title;
     505    dp->drv.get_window_width = gl_get_window_width;
     506    dp->drv.get_window_height = gl_get_window_height;
     507    dp->drv.display = gl_display;
     508    dp->drv.handle_resize = gl_handle_resize;
     509    dp->drv.get_event = gl_get_event;
     510    dp->drv.set_mouse = gl_set_mouse;
    511511
    512512    return 0;
  • libcaca/trunk/caca/driver_ncurses.c

    r810 r811  
    5151#if defined(HAVE_SIGNAL)
    5252static RETSIGTYPE sigwinch_handler(int);
    53 static caca_t *sigwinch_kk; /* FIXME: we ought to get rid of this */
     53static caca_display_t *sigwinch_d; /* FIXME: we ought to get rid of this */
    5454#endif
    5555#if defined(HAVE_GETENV) && defined(HAVE_PUTENV)
     
    6464};
    6565
    66 static int ncurses_init_graphics(caca_t *kk)
     66static int ncurses_init_graphics(caca_display_t *dp)
    6767{
    6868    static int curses_colors[] =
     
    9191    int fg, bg, max;
    9292
    93     kk->drv.p = malloc(sizeof(struct driver_private));
     93    dp->drv.p = malloc(sizeof(struct driver_private));
    9494
    9595#if defined(HAVE_GETENV) && defined(HAVE_PUTENV)
     
    9898
    9999#if defined(HAVE_SIGNAL)
    100     sigwinch_kk = kk;
     100    sigwinch_d = dp;
    101101    signal(SIGWINCH, sigwinch_handler);
    102102#endif
     
    112112    /* Activate mouse */
    113113    newmask = REPORT_MOUSE_POSITION | ALL_MOUSE_EVENTS;
    114     mousemask(newmask, &kk->drv.p->oldmask);
     114    mousemask(newmask, &dp->drv.p->oldmask);
    115115    mouseinterval(-1); /* No click emulation */
    116116
     
    137137            int col = ((max + 7 - fg) % max) + max * bg;
    138138            init_pair(col, curses_colors[fg], curses_colors[bg]);
    139             kk->drv.p->attr[fg + 16 * bg] = COLOR_PAIR(col);
     139            dp->drv.p->attr[fg + 16 * bg] = COLOR_PAIR(col);
    140140
    141141            if(max == 8)
    142142            {
    143143                /* Bright fg on simple bg */
    144                 kk->drv.p->attr[fg + 8 + 16 * bg] = A_BOLD | COLOR_PAIR(col);
     144                dp->drv.p->attr[fg + 8 + 16 * bg] = A_BOLD | COLOR_PAIR(col);
    145145                /* Simple fg on bright bg */
    146                 kk->drv.p->attr[fg + 16 * (bg + 8)] = A_BLINK
     146                dp->drv.p->attr[fg + 16 * (bg + 8)] = A_BLINK
    147147                                                    | COLOR_PAIR(col);
    148148                /* Bright fg on bright bg */
    149                 kk->drv.p->attr[fg + 8 + 16 * (bg + 8)] = A_BLINK | A_BOLD
     149                dp->drv.p->attr[fg + 8 + 16 * (bg + 8)] = A_BLINK | A_BOLD
    150150                                                        | COLOR_PAIR(col);
    151151            }
    152152        }
    153153
    154     _cucul_set_size(kk->c, COLS, LINES);
     154    _cucul_set_size(dp->cv, COLS, LINES);
    155155
    156156    return 0;
    157157}
    158158
    159 static int ncurses_end_graphics(caca_t *kk)
    160 {
    161     mousemask(kk->drv.p->oldmask, NULL);
     159static int ncurses_end_graphics(caca_display_t *dp)
     160{
     161    mousemask(dp->drv.p->oldmask, NULL);
    162162    curs_set(1);
    163163    noraw();
    164164    endwin();
    165165
    166     free(kk->drv.p);
     166    free(dp->drv.p);
    167167
    168168    return 0;
    169169}
    170170
    171 static int ncurses_set_window_title(caca_t *kk, char const *title)
     171static int ncurses_set_window_title(caca_display_t *dp, char const *title)
    172172{
    173173    return 0;
    174174}
    175175
    176 static unsigned int ncurses_get_window_width(caca_t *kk)
     176static unsigned int ncurses_get_window_width(caca_display_t *dp)
    177177{
    178178    /* Fallback to a 6x10 font */
    179     return kk->c->width * 6;
    180 }
    181 
    182 static unsigned int ncurses_get_window_height(caca_t *kk)
     179    return dp->cv->width * 6;
     180}
     181
     182static unsigned int ncurses_get_window_height(caca_display_t *dp)
    183183{
    184184    /* Fallback to a 6x10 font */
    185     return kk->c->height * 10;
    186 }
    187 
    188 static void ncurses_display(caca_t *kk)
     185    return dp->cv->height * 10;
     186}
     187
     188static void ncurses_display(caca_display_t *dp)
    189189{
    190190    int x, y;
    191     uint32_t *attr = kk->c->attr;
    192     uint32_t *chars = kk->c->chars;
    193     for(y = 0; y < (int)kk->c->height; y++)
     191    uint32_t *attr = dp->cv->attr;
     192    uint32_t *chars = dp->cv->chars;
     193    for(y = 0; y < (int)dp->cv->height; y++)
    194194    {
    195195        move(y, 0);
    196         for(x = kk->c->width; x--; )
     196        for(x = dp->cv->width; x--; )
    197197        {
    198             attrset(kk->drv.p->attr[_cucul_argb32_to_ansi8(*attr++)]);
     198            attrset(dp->drv.p->attr[_cucul_argb32_to_ansi8(*attr++)]);
    199199            ncurses_write_utf32(*chars++);
    200200        }
     
    203203}
    204204
    205 static void ncurses_handle_resize(caca_t *kk)
     205static void ncurses_handle_resize(caca_display_t *dp)
    206206{
    207207    struct winsize size;
     
    209209    if(ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0)
    210210    {
    211         kk->resize.w = size.ws_col;
    212         kk->resize.h = size.ws_row;
     211        dp->resize.w = size.ws_col;
     212        dp->resize.h = size.ws_row;
    213213#if defined(HAVE_RESIZE_TERM)
    214         resize_term(kk->resize.h, kk->resize.w);
     214        resize_term(dp->resize.h, dp->resize.w);
    215215#else
    216         resizeterm(*kk->resize.h, *kk->resize.w);
     216        resizeterm(*dp->resize.h, *dp->resize.w);
    217217#endif
    218218        wrefresh(curscr);
     
    221221
    222222    /* Fallback */
    223     kk->resize.w = kk->c->width;
    224     kk->resize.h = kk->c->height;
    225 }
    226 
    227 static int ncurses_get_event(caca_t *kk, caca_event_t *ev)
     223    dp->resize.w = dp->cv->width;
     224    dp->resize.h = dp->cv->height;
     225}
     226
     227static int ncurses_get_event(caca_display_t *dp, caca_event_t *ev)
    228228{
    229229    int intkey;
     
    252252            case BUTTON1_PRESSED:
    253253                ev->data.mouse.button = 1;
    254                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     254                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
    255255                break;
    256256            case BUTTON1_RELEASED:
    257257                ev->data.mouse.button = 1;
    258                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     258                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    259259                break;
    260260            case BUTTON1_CLICKED:
    261261                ev->data.mouse.button = 1;
    262                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    263                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     262                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     263                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    264264                break;
    265265            case BUTTON1_DOUBLE_CLICKED:
    266266                ev->data.mouse.button = 1;
    267                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    268                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    269                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    270                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     267                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     268                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     269                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     270                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    271271                break;
    272272            case BUTTON1_TRIPLE_CLICKED:
    273273                ev->data.mouse.button = 1;
    274                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    275                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    276                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    277                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    278                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    279                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     274                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     275                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     276                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     277                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     278                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     279                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    280280                break;
    281281            case BUTTON1_RESERVED_EVENT:
     
    284284            case BUTTON2_PRESSED:
    285285                ev->data.mouse.button = 2;
    286                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     286                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
    287287                break;
    288288            case BUTTON2_RELEASED:
    289289                ev->data.mouse.button = 2;
    290                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     290                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    291291                break;
    292292            case BUTTON2_CLICKED:
    293293                ev->data.mouse.button = 2;
    294                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    295                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     294                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     295                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    296296                break;
    297297            case BUTTON2_DOUBLE_CLICKED:
    298298                ev->data.mouse.button = 2;
    299                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    300                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    301                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    302                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     299                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     300                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     301                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     302                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    303303                break;
    304304            case BUTTON2_TRIPLE_CLICKED:
    305305                ev->data.mouse.button = 2;
    306                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    307                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    308                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    309                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    310                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    311                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     306                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     307                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     308                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     309                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     310                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     311                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    312312                break;
    313313            case BUTTON2_RESERVED_EVENT:
     
    316316            case BUTTON3_PRESSED:
    317317                ev->data.mouse.button = 3;
    318                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     318                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
    319319                break;
    320320            case BUTTON3_RELEASED:
    321321                ev->data.mouse.button = 3;
    322                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     322                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    323323                break;
    324324            case BUTTON3_CLICKED:
    325325                ev->data.mouse.button = 3;
    326                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    327                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     326                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     327                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    328328                break;
    329329            case BUTTON3_DOUBLE_CLICKED:
    330330                ev->data.mouse.button = 3;
    331                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    332                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    333                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    334                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     331                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     332                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     333                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     334                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    335335                break;
    336336            case BUTTON3_TRIPLE_CLICKED:
    337337                ev->data.mouse.button = 3;
    338                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    339                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    340                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    341                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    342                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    343                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     338                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     339                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     340                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     341                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     342                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     343                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    344344                break;
    345345            case BUTTON3_RESERVED_EVENT:
     
    348348            case BUTTON4_PRESSED:
    349349                ev->data.mouse.button = 4;
    350                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
     350                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
    351351                break;
    352352            case BUTTON4_RELEASED:
    353353                ev->data.mouse.button = 4;
    354                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     354                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    355355                break;
    356356            case BUTTON4_CLICKED:
    357357                ev->data.mouse.button = 4;
    358                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    359                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     358                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     359                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    360360                break;
    361361            case BUTTON4_DOUBLE_CLICKED:
    362362                ev->data.mouse.button = 4;
    363                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    364                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    365                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    366                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     363                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     364                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     365                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     366                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    367367                break;
    368368            case BUTTON4_TRIPLE_CLICKED:
    369369                ev->data.mouse.button = 4;
    370                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    371                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    372                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    373                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
    374                 ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(kk, ev);
    375                 ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(kk, ev);
     370                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     371                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     372                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     373                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
     374                ev->type = CACA_EVENT_MOUSE_PRESS; _push_event(dp, ev);
     375                ev->type = CACA_EVENT_MOUSE_RELEASE; _push_event(dp, ev);
    376376                break;
    377377            case BUTTON4_RESERVED_EVENT:
     
    382382        }
    383383
    384         if(kk->mouse.x == (unsigned int)mevent.x &&
    385            kk->mouse.y == (unsigned int)mevent.y)
    386             return _pop_event(kk, ev);
    387 
    388         kk->mouse.x = mevent.x;
    389         kk->mouse.y = mevent.y;
     384        if(dp->mouse.x == (unsigned int)mevent.x &&
     385           dp->mouse.y == (unsigned int)mevent.y)
     386            return _pop_event(dp, ev);
     387
     388        dp->mouse.x = mevent.x;
     389        dp->mouse.y = mevent.y;
    390390
    391391        ev->type = CACA_EVENT_MOUSE_MOTION;
    392         ev->data.mouse.x = kk->mouse.x;
    393         ev->data.mouse.y = kk->mouse.y;
     392        ev->data.mouse.x = dp->mouse.x;
     393        ev->data.mouse.y = dp->mouse.y;
    394394        return 1;
    395395    }
     
    438438static RETSIGTYPE sigwinch_handler(int sig)
    439439{
    440     sigwinch_kk->resize.resized = 1;
     440    sigwinch_d->resize.resized = 1;
    441441
    442442    signal(SIGWINCH, sigwinch_handler);
     
    482482#endif
    483483
    484 static void ncurses_write_utf32(uint32_t c)
     484static void ncurses_write_utf32(uint32_t ch)
    485485{
    486486#if defined(HAVE_NCURSESW_NCURSES_H)
     
    494494#endif
    495495
    496     if(c < 0x80)
    497     {
    498         addch(c);
     496    if(ch < 0x80)
     497    {
     498        addch(ch);
    499499        return;
    500500    }
    501501
    502502#if defined(HAVE_NCURSESW_NCURSES_H)
    503     if(c < 0x10000)
    504     {
    505         addch(c); /* FIXME: doesn't work either */
     503    if(ch < 0x10000)
     504    {
     505        addch(ch); /* FIXME: doesn't work either */
    506506        return;
    507507    }
    508508
    509     bytes = (c < 0x800) ? 2 : (c < 0x10000) ? 3 : 4;
     509    bytes = (ch < 0x800) ? 2 : (ch < 0x10000) ? 3 : 4;
    510510    buf[bytes] = '\0';
    511511    parser = buf + bytes;
     
    513513    switch(bytes)
    514514    {
    515         case 4: *--parser = (c | 0x80) & 0xbf; c >>= 6;
    516         case 3: *--parser = (c | 0x80) & 0xbf; c >>= 6;
    517         case 2: *--parser = (c | 0x80) & 0xbf; c >>= 6;
    518     }
    519     *--parser = c | mark[bytes];
     515        case 4: *--parser = (ch | 0x80) & 0xbf; ch >>= 6;
     516        case 3: *--parser = (ch | 0x80) & 0xbf; ch >>= 6;
     517        case 2: *--parser = (ch | 0x80) & 0xbf; ch >>= 6;
     518    }
     519    *--parser = ch | mark[bytes];
    520520
    521521    addstr(buf);
     
    529529 */
    530530
    531 int ncurses_install(caca_t *kk)
    532 {
    533     kk->drv.driver = CACA_DRIVER_NCURSES;
    534 
    535     kk->drv.init_graphics = ncurses_init_graphics;
    536     kk->drv.end_graphics = ncurses_end_graphics;
    537     kk->drv.set_window_title = ncurses_set_window_title;
    538     kk->drv.get_window_width = ncurses_get_window_width;
    539     kk->drv.get_window_height = ncurses_get_window_height;
    540     kk->drv.display = ncurses_display;
    541     kk->drv.handle_resize = ncurses_handle_resize;
    542     kk->drv.get_event = ncurses_get_event;
    543     kk->drv.set_mouse = NULL;
     531int ncurses_install(caca_display_t *dp)
     532{
     533    dp->drv.driver = CACA_DRIVER_NCURSES;
     534
     535    dp->drv.init_graphics = ncurses_init_graphics;
     536    dp->drv.end_graphics = ncurses_end_graphics;
     537    dp->drv.set_window_title = ncurses_set_window_title;
     538    dp->drv.get_window_width = ncurses_get_window_width;
     539    dp->drv.get_window_height = ncurses_get_window_height;
     540    dp->drv.display = ncurses_display;
     541    dp->drv.handle_resize = ncurses_handle_resize;
     542    dp->drv.get_event = ncurses_get_event;
     543    dp->drv.set_mouse = NULL;
    544544
    545545    return 0;
  • libcaca/trunk/caca/driver_raw.c

    r810 r811  
    2727#include "cucul_internals.h"
    2828
    29 static int raw_init_graphics(caca_t *kk)
     29static int raw_init_graphics(caca_display_t *dp)
    3030{
    3131    return 0;
    3232}
    3333
    34 static int raw_end_graphics(caca_t *kk)
     34static int raw_end_graphics(caca_display_t *dp)
    3535{
    3636    return 0;
    3737}
    3838
    39 static int raw_set_window_title(caca_t *kk, char const *title)
     39static int raw_set_window_title(caca_display_t *dp, char const *title)
    4040{
    4141    return 0;
    4242}
    4343
    44 static unsigned int raw_get_window_width(caca_t *kk)
     44static unsigned int raw_get_window_width(caca_display_t *dp)
    4545{
    4646    return 0;
    4747}
    4848
    49 static unsigned int raw_get_window_height(caca_t *kk)
     49static unsigned int raw_get_window_height(caca_display_t *dp)
    5050{
    5151    return 0;
    5252}
    5353
    54 static void raw_display(caca_t *kk)
     54static void raw_display(caca_display_t *dp)
    5555{
    56     uint32_t *attr = kk->c->attr;
    57     uint32_t *chars = kk->c->chars;
     56    uint32_t *attr = dp->cv->attr;
     57    uint32_t *chars = dp->cv->chars;
    5858    uint32_t w, h;
    5959    unsigned int n;
    6060
    61     w = kk->c->width;
    62     h = kk->c->height;
     61    w = dp->cv->width;
     62    h = dp->cv->height;
    6363
    6464    fprintf(stdout, "CACA%c%c%c%c%c%c%c%c",
     
    6666                    (h >> 24), (h >> 16) & 0xff, (h >> 8) & 0xff, h & 0xff);
    6767
    68     for(n = kk->c->height * kk->c->width; n--; )
     68    for(n = dp->cv->height * dp->cv->width; n--; )
    6969    {
    70         uint32_t c = *chars++;
     70        uint32_t ch = *chars++;
    7171        uint32_t a = *attr++;
    7272
    7373        fprintf(stdout, "%c%c%c%c%c%c%c%c",
    74                 (c >> 24), (c >> 16) & 0xff, (c >> 8) & 0xff, c & 0xff,
     74                (ch >> 24), (ch >> 16) & 0xff, (ch >> 8) & 0xff, ch & 0xff,
    7575                (a >> 24), (a >> 16) & 0xff, (a >> 8) & 0xff, a & 0xff);
    7676    }
     
    8080}
    8181
    82 static void raw_handle_resize(caca_t *kk)
     82static void raw_handle_resize(caca_display_t *dp)
    8383{
    8484    ;
    8585}
    8686
    87 static int raw_get_event(caca_t *kk, caca_event_t *ev)
     87static int raw_get_event(caca_display_t *dp, caca_event_t *ev)
    8888{
    8989    ev->type = CACA_EVENT_NONE;
     
    9595 */
    9696
    97 int raw_install(caca_t *kk)
     97int raw_install(caca_display_t *dp)
    9898{
    99     kk->drv.driver = CACA_DRIVER_RAW;
     99    dp->drv.driver = CACA_DRIVER_RAW;
    100100
    101     kk->drv.init_graphics = raw_init_graphics;
    102     kk->drv.end_graphics = raw_end_graphics;
    103     kk->drv.set_window_title = raw_set_window_title;
    104     kk->drv.get_window_width = raw_get_window_width;
    105     kk->drv.get_window_height = raw_get_window_height;
    106     kk->drv.display = raw_display;
    107     kk->drv.handle_resize = raw_handle_resize;
    108     kk->drv.get_event = raw_get_event;
    109     kk->drv.set_mouse = NULL;
     101    dp->drv.init_graphics = raw_init_graphics;
     102    dp->drv.end_graphics = raw_end_graphics;
     103    dp->drv.set_window_title = raw_set_window_title;
     104    dp->drv.get_window_width = raw_get_window_width;
     105    dp->drv.get_window_height = raw_get_window_height;
     106    dp->drv.display = raw_display;
     107    dp->drv.handle_resize = raw_handle_resize;
     108    dp->drv.get_event = raw_get_event;
     109    dp->drv.set_mouse = NULL;
    110110
    111111    return 0;
  • libcaca/trunk/caca/driver_slang.c

    r810 r811  
    107107#if defined(HAVE_SIGNAL)
    108108static RETSIGTYPE sigwinch_handler(int);
    109 static caca_t *sigwinch_kk; /* FIXME: we ought to get rid of this */
     109static caca_display_t *sigwinch_d; /* FIXME: we ought to get rid of this */
    110110#endif
    111111#if defined(HAVE_GETENV) && defined(HAVE_PUTENV)
     
    113113#endif
    114114
    115 static int slang_init_graphics(caca_t *kk)
     115static int slang_init_graphics(caca_display_t *dp)
    116116{
    117117#if defined(HAVE_GETENV) && defined(HAVE_PUTENV)
     
    120120
    121121#if defined(HAVE_SIGNAL)
    122     sigwinch_kk = kk;
     122    sigwinch_d = dp;
    123123    signal(SIGWINCH, sigwinch_handler);
    124124#endif
     
    165165#endif
    166166
    167     _cucul_set_size(kk->c, SLtt_Screen_Cols, SLtt_Screen_Rows);
     167    _cucul_set_size(dp->cv, SLtt_Screen_Cols, SLtt_Screen_Rows);
    168168
    169169    return 0;
    170170}
    171171
    172 static int slang_end_graphics(caca_t *kk)
     172static int slang_end_graphics(caca_display_t *dp)
    173173{
    174174    SLtt_set_mouse_mode(0, 0);
     
    180180}
    181181
    182 static int slang_set_window_title(caca_t *kk, char const *title)
     182static int slang_set_window_title(caca_display_t *dp, char const *title)
    183183{
    184184    /* FIXME */
     
    186186}
    187187
    188 static unsigned int slang_get_window_width(caca_t *kk)
     188static unsigned int slang_get_window_width(caca_display_t *dp)
    189189{
    190190    /* Fallback to a 6x10 font */
    191     return kk->c->width * 6;
    192 }
    193 
    194 static unsigned int slang_get_window_height(caca_t *kk)
     191    return dp->cv->width * 6;
     192}
     193
     194static unsigned int slang_get_window_height(caca_display_t *dp)
    195195{
    196196    /* Fallback to a 6x10 font */
    197     return kk->c->height * 10;
    198 }
    199 
    200 static void slang_display(caca_t *kk)
     197    return dp->cv->height * 10;
     198}
     199
     200static void slang_display(caca_display_t *dp)
    201201{
    202202    int x, y;
    203     uint32_t *attr = kk->c->attr;
    204     uint32_t *chars = kk->c->chars;
    205     for(y = 0; y < (int)kk->c->height; y++)
     203    uint32_t *attr = dp->cv->attr;
     204    uint32_t *chars = dp->cv->chars;
     205    for(y = 0; y < (int)dp->cv->height; y++)
    206206    {
    207207        SLsmg_gotorc(y, 0);
    208         for(x = kk->c->width; x--; )
     208        for(x = dp->cv->width; x--; )
    209209        {
    210             uint32_t c = *chars++;
     210            uint32_t ch = *chars++;
    211211
    212212#if defined(OPTIMISE_SLANG_PALETTE)
     
    219219            {
    220220                SLsmg_set_color(slang_assoc[_cucul_argb32_to_ansi8(*attr++)]);
    221                 slang_write_utf32(c);
     221                slang_write_utf32(ch);
    222222            }
    223223            else
     
    236236#else
    237237            SLsmg_set_color(_cucul_argb32_to_ansi8(*attr++));
    238             slang_write_utf32(c);
     238            slang_write_utf32(ch);
    239239#endif
    240240        }
     
    243243}
    244244
    245 static void slang_handle_resize(caca_t *kk)
     245static void slang_handle_resize(caca_display_t *dp)
    246246{
    247247    SLtt_get_screen_size();
    248     kk->resize.w = SLtt_Screen_Cols;
    249     kk->resize.h = SLtt_Screen_Rows;
    250 
    251     if(kk->resize.w != kk->c->width || kk->resize.h != kk->c->height)
     248    dp->resize.w = SLtt_Screen_Cols;
     249    dp->resize.h = SLtt_Screen_Rows;
     250
     251    if(dp->resize.w != dp->cv->width || dp->resize.h != dp->cv->height)
    252252        SLsmg_reinit_smg();
    253253}
    254254
    255 static int slang_get_event(caca_t *kk, caca_event_t *ev)
     255static int slang_get_event(caca_display_t *dp, caca_event_t *ev)
    256256{
    257257    int intkey;
     
    290290        ev->data.mouse.button = button;
    291291        ev->type = CACA_EVENT_MOUSE_PRESS;
    292         _push_event(kk, ev);
     292        _push_event(dp, ev);
    293293        ev->type = CACA_EVENT_MOUSE_RELEASE;
    294         _push_event(kk, ev);
    295 
    296         if(kk->mouse.x == x && kk->mouse.y == y)
    297             return _pop_event(kk, ev);
    298 
    299         kk->mouse.x = x;
    300         kk->mouse.y = y;
     294        _push_event(dp, ev);
     295
     296        if(dp->mouse.x == x && dp->mouse.y == y)
     297            return _pop_event(dp, ev);
     298
     299        dp->mouse.x = x;
     300        dp->mouse.y = y;
    301301
    302302        ev->type = CACA_EVENT_MOUSE_MOTION;
    303         ev->data.mouse.x = kk->mouse.x;
    304         ev->data.mouse.y = kk->mouse.y;
     303        ev->data.mouse.x = dp->mouse.x;
     304        ev->data.mouse.y = dp->mouse.y;
    305305        return 1;
    306306    }
     
    389389}
    390390
    391 static void slang_write_utf32(uint32_t c)
     391static void slang_write_utf32(uint32_t ch)
    392392{
    393393#ifdef HAVE_SLSMG_UTF8_ENABLE
     
    401401#endif
    402402
    403     if(c < 0x80)
    404     {
    405         SLsmg_write_char(c);
     403    if(ch < 0x80)
     404    {
     405        SLsmg_write_char(ch);
    406406        return;
    407407    }
    408408
    409409#ifdef HAVE_SLSMG_UTF8_ENABLE
    410     bytes = (c < 0x800) ? 2 : (c < 0x10000) ? 3 : 4;
     410    bytes = (ch < 0x800) ? 2 : (ch < 0x10000) ? 3 : 4;
    411411    buf[bytes] = '\0';
    412412    parser = buf + bytes;
     
    414414    switch(bytes)
    415415    {
    416         case 4: *--parser = (c | 0x80) & 0xbf; c >>= 6;
    417         case 3: *--parser = (c | 0x80) & 0xbf; c >>= 6;
    418         case 2: *--parser = (c | 0x80) & 0xbf; c >>= 6;
    419     }
    420     *--parser = c | mark[bytes];
     416        case 4: *--parser = (ch | 0x80) & 0xbf; ch >>= 6;
     417        case 3: *--parser = (ch | 0x80) & 0xbf; ch >>= 6;
     418        case 2: *--parser = (ch | 0x80) & 0xbf; ch >>= 6;
     419    }
     420    *--parser = ch | mark[bytes];
    421421
    422422    SLsmg_write_string(buf);
     
    429429static RETSIGTYPE sigwinch_handler(int sig)
    430430{
    431     sigwinch_kk->resize.resized = 1;
     431    sigwinch_d->resize.resized = 1;
    432432
    433433    signal(SIGWINCH, sigwinch_handler);
     
    467467 */
    468468
    469 int slang_install(caca_t *kk)
    470 {
    471     kk->drv.driver = CACA_DRIVER_SLANG;
    472 
    473     kk->drv.init_graphics = slang_init_graphics;
    474     kk->drv.end_graphics = slang_end_graphics;
    475     kk->drv.set_window_title = slang_set_window_title;
    476     kk->drv.get_window_width = slang_get_window_width;
    477     kk->drv.get_window_height = slang_get_window_height;
    478     kk->drv.display = slang_display;
    479     kk->drv.handle_resize = slang_handle_resize;
    480     kk->drv.get_event = slang_get_event;
    481     kk->drv.set_mouse = NULL;
     469int slang_install(caca_display_t *dp)
     470{
     471    dp->drv.driver = CACA_DRIVER_SLANG;
     472
     473    dp->drv.init_graphics = slang_init_graphics;
     474    dp->drv.end_graphics = slang_end_graphics;
     475    dp->drv.set_window_title = slang_set_window_title;
     476    dp->drv.get_window_width = slang_get_window_width;
     477    dp->drv.get_window_height = slang_get_window_height;
     478    dp->drv.display = slang_display;
     479    dp->drv.handle_resize = slang_handle_resize;
     480    dp->drv.get_event = slang_get_event;
     481    dp->drv.set_mouse = NULL;
    482482
    483483    return 0;
  • libcaca/trunk/caca/driver_vga.c

    r810 r811  
    5050};
    5151
    52 static int vga_init_graphics(caca_t *kk)
     52static int vga_init_graphics(caca_display_t *dp)
    5353{
    5454    int i;
     
    7575
    7676    /* We don't have much choice */
    77     _cucul_set_size(kk->c, 80, 25);
     77    _cucul_set_size(dp->cv, 80, 25);
    7878
    7979    return 0;
    8080}
    8181
    82 static int vga_end_graphics(caca_t *kk)
     82static int vga_end_graphics(caca_display_t *dp)
    8383{
    8484    uint8_t tmp;
     
    9494}
    9595
    96 static int vga_set_window_title(caca_t *kk, char const *title)
     96static int vga_set_window_title(caca_display_t *dp, char const *title)
    9797{
    9898    /* Unsupported, of course. */
     
    100100}
    101101
    102 static unsigned int vga_get_window_width(caca_t *kk)
     102static unsigned int vga_get_window_width(caca_display_t *dp)
    103103{
    104104    /* Fallback to a 320x200 screen */
     
    106106}
    107107
    108 static unsigned int vga_get_window_height(caca_t *kk)
     108static unsigned int vga_get_window_height(caca_display_t *dp)
    109109{
    110110    /* Fallback to a 320x200 screen */
     
    112112}
    113113
    114 static void vga_display(caca_t *kk)
     114static void vga_display(caca_display_t *dp)
    115115{
    116116    char *screen = (char *)(intptr_t)0x000b8000;
    117     uint32_t *attr = kk->c->attr;
    118     uint32_t *chars = kk->c->chars;
     117    uint32_t *attr = dp->cv->attr;
     118    uint32_t *chars = dp->cv->chars;
    119119    int n;
    120120
    121     for(n = kk->c->height * kk->c->width; n--; )
     121    for(n = dp->cv->height * dp->cv->width; n--; )
    122122    {
    123123        *screen++ = _cucul_utf32_to_cp437(*chars++);
     
    126126}
    127127
    128 static void vga_handle_resize(caca_t *kk)
     128static void vga_handle_resize(caca_display_t *dp)
    129129{
    130130    /* We know nothing about our window */
    131     kk->resize.w = kk->c->width;
    132     kk->resize.h = kk->c->height;
     131    dp->resize.w = dp->cv->width;
     132    dp->resize.h = dp->cv->height;
    133133}
    134134
    135 static int vga_get_event(caca_t *kk, caca_event-t *ev)
     135static int vga_get_event(caca_display_t *dp, caca_event-t *ev)
    136136{
    137137    /* FIXME */
     
    144144 */
    145145
    146 int vga_install(caca_t *kk)
     146int vga_install(caca_display_t *dp)
    147147{
    148     kk->drv.driver = CACA_DRIVER_VGA;
     148    dp->drv.driver = CACA_DRIVER_VGA;
    149149
    150     kk->drv.init_graphics = vga_init_graphics;
    151     kk->drv.end_graphics = vga_end_graphics;
    152     kk->drv.set_window_title = vga_set_window_title;
    153     kk->drv.get_window_width = vga_get_window_width;
    154     kk->drv.get_window_height = vga_get_window_height;
    155     kk->drv.display = vga_display;
    156     kk->drv.handle_resize = vga_handle_resize;
    157     kk->drv.get_event = vga_get_event;
    158     kk->drv.set_mouse = NULL;
     150    dp->drv.init_graphics = vga_init_graphics;
     151    dp->drv.end_graphics = vga_end_graphics;
     152    dp->drv.set_window_title = vga_set_window_title;
     153    dp->drv.get_window_width = vga_get_window_width;
     154    dp->drv.get_window_height = vga_get_window_height;
     155    dp->drv.display = vga_display;
     156    dp->drv.handle_resize = vga_handle_resize;
     157    dp->drv.get_event = vga_get_event;
     158    dp->drv.set_mouse = NULL;
    159159
    160160    return 0;
  • libcaca/trunk/caca/driver_win32.c

    r810 r811  
    8181};
    8282
    83 static int win32_init_graphics(caca_t *kk)
     83static int win32_init_graphics(caca_display_t *dp)
    8484{
    8585    CONSOLE_SCREEN_BUFFER_INFO csbi;
     
    8787    COORD size;
    8888
    89     kk->drv.p = malloc(sizeof(struct driver_private));
     89    dp->drv.p = malloc(sizeof(struct driver_private));
    9090
    9191    /* This call is allowed to fail in case we already have a console */
    9292    AllocConsole();
    9393
    94     kk->drv.p->hin = GetStdHandle(STD_INPUT_HANDLE);
    95     kk->drv.p->hout = CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE,
     94    dp->drv.p->hin = GetStdHandle(STD_INPUT_HANDLE);
     95    dp->drv.p->hout = CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE,
    9696                                 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
    9797                                 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    98     if(kk->drv.p->hout == INVALID_HANDLE_VALUE)
     98    if(dp->drv.p->hout == INVALID_HANDLE_VALUE)
    9999        return -1;
    100100
    101     GetConsoleCursorInfo(kk->drv.p->hout, &kk->drv.p->cci);
    102     kk->drv.p->cci.bVisible = FALSE;
    103     SetConsoleCursorInfo(kk->drv.p->hout, &kk->drv.p->cci);
    104 
    105     SetConsoleMode(kk->drv.p->hout, ENABLE_MOUSE_INPUT);
    106 
    107     kk->drv.p->screen =
     101    GetConsoleCursorInfo(dp->drv.p->hout, &dp->drv.p->cci);
     102    dp->drv.p->cci.bVisible = FALSE;
     103    SetConsoleCursorInfo(dp->drv.p->hout, &dp->drv.p->cci);
     104
     105    SetConsoleMode(dp->drv.p->hout, ENABLE_MOUSE_INPUT);
     106
     107    dp->drv.p->screen =
    108108        CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE,
    109109                                  0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
    110     if(!kk->drv.p->screen || kk->drv.p->screen == INVALID_HANDLE_VALUE)
     110    if(!dp->drv.p->screen || dp->drv.p->screen == INVALID_HANDLE_VALUE)
    111111        return -1;
    112112
    113113    /* Set the new console size */
    114     size.X = kk->c->width;
    115     size.Y = kk->c->height;
    116     SetConsoleScreenBufferSize(kk->drv.p->screen, size);
     114    size.X = dp->cv->width;
     115    size.Y = dp->cv->height;
     116    SetConsoleScreenBufferSize(dp->drv.p->screen, size);
    117117
    118118    rect.Left = rect.Top = 0;
    119     rect.Right = kk->c->width - 1;
    120     rect.Bottom = kk->c->height - 1;
    121     SetConsoleWindowInfo(kk->drv.p->screen, TRUE, &rect);
     119    rect.Right = dp->cv->width - 1;
     120    rect.Bottom = dp->cv->height - 1;
     121    SetConsoleWindowInfo(dp->drv.p->screen, TRUE, &rect);
    122122
    123123    /* Report our new size to libcucul */
    124     if(!GetConsoleScreenBufferInfo(kk->drv.p->screen, &csbi))
     124    if(!GetConsoleScreenBufferInfo(dp->drv.p->screen, &csbi))
    125125        return -1;
    126126
    127     _cucul_set_size(kk->c, csbi.srWindow.Right - csbi.srWindow.Left + 1,
    128                            csbi.srWindow.Bottom - csbi.srWindow.Top + 1);
    129 
    130     SetConsoleMode(kk->drv.p->screen, 0);
    131 
    132     GetConsoleCursorInfo(kk->drv.p->screen, &kk->drv.p->cci);
    133     kk->drv.p->cci.dwSize = 0;
    134     kk->drv.p->cci.bVisible = FALSE;
    135     SetConsoleCursorInfo(kk->drv.p->screen, &kk->drv.p->cci);
    136 
    137     SetConsoleActiveScreenBuffer(kk->drv.p->screen);
    138 
    139     kk->drv.p->buffer = malloc(kk->c->width * kk->c->height
     127    _cucul_set_size(dp->cv, csbi.srWindow.Right - csbi.srWindow.Left + 1,
     128                            csbi.srWindow.Bottom - csbi.srWindow.Top + 1);
     129
     130    SetConsoleMode(dp->drv.p->screen, 0);
     131
     132    GetConsoleCursorInfo(dp->drv.p->screen, &dp->drv.p->cci);
     133    dp->drv.p->cci.dwSize = 0;
     134    dp->drv.p->cci.bVisible = FALSE;
     135    SetConsoleCursorInfo(dp->drv.p->screen, &dp->drv.p->cci);
     136
     137    SetConsoleActiveScreenBuffer(dp->drv.p->screen);
     138
     139    dp->drv.p->buffer = malloc(dp->cv->width * dp->cv->height
    140140                               * sizeof(CHAR_INFO));
    141     if(kk->drv.p->buffer == NULL)
     141    if(dp->drv.p->buffer == NULL)
    142142        return -1;
    143143
     
    145145}
    146146
    147 static int win32_end_graphics(caca_t *kk)
    148 {
    149     SetConsoleActiveScreenBuffer(kk->drv.p->hout);
    150     CloseHandle(kk->drv.p->screen);
    151 
    152     SetConsoleTextAttribute(kk->drv.p->hout, FOREGROUND_INTENSITY
     147static int win32_end_graphics(caca_display_t *dp)
     148{
     149    SetConsoleActiveScreenBuffer(dp->drv.p->hout);
     150    CloseHandle(dp->drv.p->screen);
     151
     152    SetConsoleTextAttribute(dp->drv.p->hout, FOREGROUND_INTENSITY
    153153                                             | FOREGROUND_RED
    154154                                             | FOREGROUND_GREEN
    155155                                             | FOREGROUND_BLUE);
    156     kk->drv.p->cci.bVisible = TRUE;
    157     SetConsoleCursorInfo(kk->drv.p->hout, &kk->drv.p->cci);
    158     CloseHandle(kk->drv.p->hout);
    159 
    160     free(kk->drv.p);
    161 
    162     return 0;
    163 }
    164 
    165 static int win32_set_window_title(caca_t *kk, char const *title)
     156    dp->drv.p->cci.bVisible = TRUE;
     157    SetConsoleCursorInfo(dp->drv.p->hout, &dp->drv.p->cci);
     158    CloseHandle(dp->drv.p->hout);
     159
     160    free(dp->drv.p);
     161
     162    return 0;
     163}
     164
     165static int win32_set_window_title(caca_display_t *dp, char const *title)
    166166{
    167167    SetConsoleTitle(title);
     
    169169}
    170170
    171 static unsigned int win32_get_window_width(caca_t *kk)
     171static unsigned int win32_get_window_width(caca_display_t *dp)
    172172{
    173173    /* FIXME */
    174174
    175175    /* Fallback to a 6x10 font */
    176     return kk->c->width * 6;
    177 }
    178 
    179 static unsigned int win32_get_window_height(caca_t *kk)
     176    return dp->cv->width * 6;
     177}
     178
     179static unsigned int win32_get_window_height(caca_display_t *dp)
    180180{
    181181    /* FIXME */
    182182
    183183    /* Fallback to a 6x10 font */
    184     return kk->c->height * 10;
    185 }
    186 
    187 static void win32_display(caca_t *kk)
     184    return dp->cv->height * 10;
     185}
     186
     187static void win32_display(caca_display_t *dp)
    188188{
    189189    COORD size, pos;
     
    192192
    193193    /* Render everything to our screen buffer */
    194     for(i = 0; i < kk->c->width * kk->c->height; i++)
     194    for(i = 0; i < dp->cv->width * dp->cv->height; i++)
    195195    {
    196         uint32_t c = kk->c->chars[i];
     196        uint32_t ch = dp->cv->chars[i];
    197197
    198198#if 0
    199         if(c > 0x00000020 && c < 0x00000080)
    200             kk->drv.p->buffer[i].Char.AsciiChar = (uint8_t)c;
     199        if(ch > 0x00000020 && ch < 0x00000080)
     200            dp->drv.p->buffer[i].Char.AsciiChar = (uint8_t)ch;
    201201        else
    202             kk->drv.p->buffer[i].Char.AsciiChar = ' ';
     202            dp->drv.p->buffer[i].Char.AsciiChar = ' ';
    203203#else
    204         if(c > 0x00000020 && c < 0x00010000)
    205             kk->drv.p->buffer[i].Char.UnicodeChar = (uint16_t)c;
     204        if(ch > 0x00000020 && ch < 0x00010000)
     205            dp->drv.p->buffer[i].Char.UnicodeChar = (uint16_t)ch;
    206206        else
    207             kk->drv.p->buffer[i].Char.UnicodeChar = (uint16_t)' ';
     207            dp->drv.p->buffer[i].Char.UnicodeChar = (uint16_t)' ';
    208208#endif
    209209
    210         kk->drv.p->buffer[i].Attributes =
    211                 win32_fg_palette[_cucul_argb32_to_ansi4fg(kk->c->attr[i])]
    212                  | win32_bg_palette[_cucul_argb32_to_ansi4bg(kk->c->attr[i])];
     210        dp->drv.p->buffer[i].Attributes =
     211                win32_fg_palette[_cucul_argb32_to_ansi4fg(dp->cv->attr[i])]
     212                 | win32_bg_palette[_cucul_argb32_to_ansi4bg(dp->cv->attr[i])];
    213213    }
    214214
    215215    /* Blit the screen buffer */
    216     size.X = kk->c->width;
    217     size.Y = kk->c->height;
     216    size.X = dp->cv->width;
     217    size.Y = dp->cv->height;
    218218    pos.X = pos.Y = 0;
    219219    rect.Left = rect.Top = 0;
    220     rect.Right = kk->c->width - 1;
    221     rect.Bottom = kk->c->height - 1;
     220    rect.Right = dp->cv->width - 1;
     221    rect.Bottom = dp->cv->height - 1;
    222222#if 0
    223     WriteConsoleOutput(kk->drv.p->screen, kk->drv.p->buffer, size, pos, &rect);
     223    WriteConsoleOutput(dp->drv.p->screen, dp->drv.p->buffer, size, pos, &rect);
    224224#else
    225     WriteConsoleOutputW(kk->drv.p->screen, kk->drv.p->buffer, size, pos, &rect);
     225    WriteConsoleOutputW(dp->drv.p->screen, dp->drv.p->buffer, size, pos, &rect);
    226226#endif
    227227}
    228228
    229 static void win32_handle_resize(caca_t *kk)
     229static void win32_handle_resize(caca_display_t *dp)
    230230{
    231231    /* FIXME: I don't know what to do here. */
    232     kk->resize.w = kk->c->width;
    233     kk->resize.h = kk->c->height;
    234 }
    235 
    236 static int win32_get_event(caca_t *kk, caca_event_t *ev)
     232    dp->resize.w = dp->cv->width;
     233    dp->resize.h = dp->cv->height;
     234}
     235
     236static int win32_get_event(caca_display_t *dp, caca_event_t *ev)
    237237{
    238238    INPUT_RECORD rec;
     
    241241    for( ; ; )
    242242    {
    243         GetNumberOfConsoleInputEvents(kk->drv.p->hin, &num);
     243        GetNumberOfConsoleInputEvents(dp->drv.p->hin, &num);
    244244        if(num == 0)
    245245            break;
    246246
    247         ReadConsoleInput(kk->drv.p->hin, &rec, 1, &num);
     247        ReadConsoleInput(dp->drv.p->hin, &rec, 1, &num);
    248248        if(rec.EventType == KEY_EVENT)
    249249        {
     
    288288                COORD pos = rec.Event.MouseEvent.dwMousePosition;
    289289
    290                 if(kk->mouse.x == (unsigned int)pos.X &&
    291                    kk->mouse.y == (unsigned int)pos.Y)
     290                if(dp->mouse.x == (unsigned int)pos.X &&
     291                   dp->mouse.y == (unsigned int)pos.Y)
    292292                    continue;
    293293
    294                 kk->mouse.x = pos.X;
    295                 kk->mouse.y = pos.Y;
     294                dp->mouse.x = pos.X;
     295                dp->mouse.y = pos.Y;
    296296
    297297                ev->type = CACA_EVENT_MOUSE_MOTION;
    298                 ev->data.mouse.x = kk->mouse.x;
    299                 ev->data.mouse.y = kk->mouse.y;
     298                ev->data.mouse.x = dp->mouse.x;
     299                ev->data.mouse.y = dp->mouse.y;
    300300                return 1;
    301301            }
     
    332332 */
    333333
    334 int win32_install(caca_t *kk)
    335 {
    336     kk->drv.driver = CACA_DRIVER_WIN32;
    337 
    338     kk->drv.init_graphics = win32_init_graphics;
    339     kk->drv.end_graphics = win32_end_graphics;
    340     kk->drv.set_window_title = win32_set_window_title;
    341     kk->drv.get_window_width = win32_get_window_width;
    342     kk->drv.get_window_height = win32_get_window_height;
    343     kk->drv.display = win32_display;
    344     kk->drv.handle_resize = win32_handle_resize;
    345     kk->drv.get_event = win32_get_event;
    346     kk->drv.set_mouse = NULL;
     334int win32_install(caca_display_t *dp)
     335{
     336    dp->drv.driver = CACA_DRIVER_WIN32;
     337
     338    dp->drv.init_graphics = win32_init_graphics;
     339    dp->drv.end_graphics = win32_end_graphics;
     340    dp->drv.set_window_title = win32_set_window_title;
     341    dp->drv.get_window_width = win32_get_window_width;
     342    dp->drv.get_window_height = win32_get_window_height;
     343    dp->drv.display = win32_display;
     344    dp->drv.handle_resize = win32_handle_resize;
     345    dp->drv.get_event = win32_get_event;
     346    dp->drv.set_mouse = NULL;
    347347
    348348    return 0;
  • libcaca/trunk/caca/driver_x11.c

    r810 r811  
    6060};
    6161
    62 static int x11_init_graphics(caca_t *kk)
     62static int x11_init_graphics(caca_display_t *dp)
    6363{
    6464    Colormap colormap;
     
    7070    int i;
    7171
    72     kk->drv.p = malloc(sizeof(struct driver_private));
     72    dp->drv.p = malloc(sizeof(struct driver_private));
    7373
    7474#if defined(HAVE_GETENV)
     
    7979
    8080    if(width && height)
    81         _cucul_set_size(kk->c, width, height);
    82 
    83     kk->drv.p->dpy = XOpenDisplay(NULL);
    84     if(kk->drv.p->dpy == NULL)
     81        _cucul_set_size(dp->cv, width, height);
     82
     83    dp->drv.p->dpy = XOpenDisplay(NULL);
     84    if(dp->drv.p->dpy == NULL)
    8585        return -1;
    8686
     
    102102        {
    103103            XSetErrorHandler(old_error_handler);
    104             XCloseDisplay(kk->drv.p->dpy);
     104            XCloseDisplay(dp->drv.p->dpy);
    105105            return -1;
    106106        }
    107107
    108         kk->drv.p->font = XLoadFont(kk->drv.p->dpy, *parser);
    109         if(!kk->drv.p->font)
     108        dp->drv.p->font = XLoadFont(dp->drv.p->dpy, *parser);
     109        if(!dp->drv.p->font)
    110110            continue;
    111111
    112         kk->drv.p->font_struct = XQueryFont(kk->drv.p->dpy, kk->drv.p->font);
    113         if(!kk->drv.p->font_struct)
    114         {
    115             XUnloadFont(kk->drv.p->dpy, kk->drv.p->font);
     112        dp->drv.p->font_struct = XQueryFont(dp->drv.p->dpy, dp->drv.p->font);
     113        if(!dp->drv.p->font_struct)
     114        {
     115            XUnloadFont(dp->drv.p->dpy, dp->drv.p->font);
    116116            continue;
    117117        }
     
    123123    XSetErrorHandler(old_error_handler);
    124124
    125     kk->drv.p->font_width = kk->drv.p->font_struct->max_bounds.width;
    126     kk->drv.p->font_height = kk->drv.p->font_struct->max_bounds.ascent
    127                          + kk->drv.p->font_struct->max_bounds.descent;
    128     kk->drv.p->font_offset = kk->drv.p->font_struct->max_bounds.descent;
    129 
    130     colormap = DefaultColormap(kk->drv.p->dpy, DefaultScreen(kk->drv.p->dpy));
     125    dp->drv.p->font_width = dp->drv.p->font_struct->max_bounds.width;
     126    dp->drv.p->font_height = dp->drv.p->font_struct->max_bounds.ascent
     127                         + dp->drv.p->font_struct->max_bounds.descent;
     128    dp->drv.p->font_offset = dp->drv.p->font_struct->max_bounds.descent;
     129
     130    colormap = DefaultColormap(dp->drv.p->dpy, DefaultScreen(dp->drv.p->dpy));
    131131    for(i = 0x000; i < 0x1000; i++)
    132132    {
     
    135135        color.green = ((i & 0x0f0) >> 4) * 0x1111;
    136136        color.blue = (i & 0x00f) * 0x1111;
    137         XAllocColor(kk->drv.p->dpy, colormap, &color);
    138         kk->drv.p->colors[i] = color.pixel;
     137        XAllocColor(dp->drv.p->dpy, colormap, &color);
     138        dp->drv.p->colors[i] = color.pixel;
    139139    }
    140140
    141141    x11_winattr.backing_store = Always;
    142     x11_winattr.background_pixel = kk->drv.p->colors[0x000];
     142    x11_winattr.background_pixel = dp->drv.p->colors[0x000];
    143143    x11_winattr.event_mask = ExposureMask | StructureNotifyMask;
    144144
    145     kk->drv.p->window =
    146         XCreateWindow(kk->drv.p->dpy, DefaultRootWindow(kk->drv.p->dpy), 0, 0,
    147                       kk->c->width * kk->drv.p->font_width,
    148                       kk->c->height * kk->drv.p->font_height,
     145    dp->drv.p->window =
     146        XCreateWindow(dp->drv.p->dpy, DefaultRootWindow(dp->drv.p->dpy), 0, 0,
     147                      dp->cv->width * dp->drv.p->font_width,
     148                      dp->cv->height * dp->drv.p->font_height,
    149149                      0, 0, InputOutput, 0,
    150150                      CWBackingStore | CWBackPixel | CWEventMask,
    151151                      &x11_winattr);
    152152
    153     kk->drv.p->wm_protocols =
    154         XInternAtom(kk->drv.p->dpy, "WM_PROTOCOLS", True);
    155     kk->drv.p->wm_delete_window =
    156         XInternAtom(kk->drv.p->dpy, "WM_DELETE_WINDOW", True);
    157 
    158     if(kk->drv.p->wm_protocols != None && kk->drv.p->wm_delete_window != None)
    159         XSetWMProtocols(kk->drv.p->dpy, kk->drv.p->window,
    160                         &kk->drv.p->wm_delete_window, 1);
    161 
    162     XStoreName(kk->drv.p->dpy, kk->drv.p->window, "caca for X");
    163 
    164     XSelectInput(kk->drv.p->dpy, kk->drv.p->window, StructureNotifyMask);
    165     XMapWindow(kk->drv.p->dpy, kk->drv.p->window);
    166 
    167     kk->drv.p->gc = XCreateGC(kk->drv.p->dpy, kk->drv.p->window, 0, NULL);
    168     XSetForeground(kk->drv.p->dpy, kk->drv.p->gc, kk->drv.p->colors[0x888]);
    169     XSetFont(kk->drv.p->dpy, kk->drv.p->gc, kk->drv.p->font);
     153    dp->drv.p->wm_protocols =
     154        XInternAtom(dp->drv.p->dpy, "WM_PROTOCOLS", True);
     155    dp->drv.p->wm_delete_window =
     156        XInternAtom(dp->drv.p->dpy, "WM_DELETE_WINDOW", True);
     157
     158    if(dp->drv.p->wm_protocols != None && dp->drv.p->wm_delete_window != None)
     159        XSetWMProtocols(dp->drv.p->dpy, dp->drv.p->window,
     160                        &dp->drv.p->wm_delete_window, 1);
     161
     162    XStoreName(dp->drv.p->dpy, dp->drv.p->window, "caca for X");
     163
     164    XSelectInput(dp->drv.p->dpy, dp->drv.p->window, StructureNotifyMask);
     165    XMapWindow(dp->drv.p->dpy, dp->drv.p->window);
     166
     167    dp->drv.p->gc = XCreateGC(dp->drv.p->dpy, dp->drv.p->window, 0, NULL);
     168    XSetForeground(dp->drv.p->dpy, dp->drv.p->gc, dp->drv.p->colors[0x888]);
     169    XSetFont(dp->drv.p->dpy, dp->drv.p->gc, dp->drv.p->font);
    170170
    171171    for(;;)
    172172    {
    173173        XEvent xevent;
    174         XNextEvent(kk->drv.p->dpy, &xevent);
     174        XNextEvent(dp->drv.p->dpy, &xevent);
    175175        if (xevent.type == MapNotify)
    176176            break;
     
    179179#if defined(HAVE_X11_XKBLIB_H)
    180180    /* Disable autorepeat */
    181     XkbSetDetectableAutoRepeat(kk->drv.p->dpy, True, &kk->drv.p->autorepeat);
    182     if(!kk->drv.p->autorepeat)
    183         XAutoRepeatOff(kk->drv.p->dpy);
     181    XkbSetDetectableAutoRepeat(dp->drv.p->dpy, True, &dp->drv.p->autorepeat);
     182    if(!dp->drv.p->autorepeat)
     183        XAutoRepeatOff(dp->drv.p->dpy);
    184184#endif
    185185
    186     kk->drv.p->event_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask
     186    dp->drv.p->event_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask
    187187          | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask
    188188          | ExposureMask;
    189189
    190     XSelectInput(kk->drv.p->dpy, kk->drv.p->window, kk->drv.p->event_mask);
    191 
    192     XSync(kk->drv.p->dpy, False);
    193 
    194     kk->drv.p->pixmap = XCreatePixmap(kk->drv.p->dpy, kk->drv.p->window,
    195                                    kk->c->width * kk->drv.p->font_width,
    196                                    kk->c->height * kk->drv.p->font_height,
    197                                    DefaultDepth(kk->drv.p->dpy,
    198                                             DefaultScreen(kk->drv.p->dpy)));
    199     kk->drv.p->pointer = None;
     190    XSelectInput(dp->drv.p->dpy, dp->drv.p->window, dp->drv.p->event_mask);
     191
     192    XSync(dp->drv.p->dpy, False);
     193
     194    dp->drv.p->pixmap = XCreatePixmap(dp->drv.p->dpy, dp->drv.p->window,
     195                                   dp->cv->width * dp->drv.p->font_width,
     196                                   dp->cv->height * dp->drv.p->font_height,
     197                                   DefaultDepth(dp->drv.p->dpy,
     198                                            DefaultScreen(dp->drv.p->dpy)));
     199    dp->drv.p->pointer = None;
    200200
    201201    return 0;
    202202}
    203203
    204 static int x11_end_graphics(caca_t *kk)
    205 {
    206     XSync(kk->drv.p->dpy, False);
     204static int x11_end_graphics(caca_display_t *dp)
     205{
     206    XSync(dp->drv.p->dpy, False);
    207207#if defined(HAVE_X11_XKBLIB_H)
    208     if(!kk->drv.p->autorepeat)
    209         XAutoRepeatOn(kk->drv.p->dpy);
     208    if(!dp->drv.p->autorepeat)
     209        XAutoRepeatOn(dp->drv.p->dpy);
    210210#endif
    211     XFreePixmap(kk->drv.p->dpy, kk->drv.p->pixmap);
    212     XFreeFont(kk->drv.p->dpy, kk->drv.p->font_struct);
    213     XFreeGC(kk->drv.p->dpy, kk->drv.p->gc);
    214     XUnmapWindow(kk->drv.p->dpy, kk->drv.p->window);
    215     XDestroyWindow(kk->drv.p->dpy, kk->drv.p->window);
    216     XCloseDisplay(kk->drv.p->dpy);
    217 
    218     free(kk->drv.p);
     211    XFreePixmap(dp->drv.p->dpy, dp->drv.p->pixmap);
     212    XFreeFont(dp->drv.p->dpy, dp->drv.p->font_struct);
     213    XFreeGC(dp->drv.p->dpy, dp->drv.p->gc);
     214    XUnmapWindow(dp->drv.p->dpy, dp->drv.p->window);
     215    XDestroyWindow(dp->drv.p->dpy, dp->drv.p->window);
     216    XCloseDisplay(dp->drv.p->dpy);
     217
     218    free(dp->drv.p);
    219219
    220220    return 0;
    221221}
    222222
    223 static int x11_set_window_title(caca_t *kk, char const *title)
    224 {
    225     XStoreName(kk->drv.p->dpy, kk->drv.p->window, title);
     223static int x11_set_window_title(caca_display_t *dp, char const *title)
     224{
     225    XStoreName(dp->drv.p->dpy, dp->drv.p->window, title);
    226226    return 0;
    227227}
    228228
    229 static unsigned int x11_get_window_width(caca_t *kk)
    230 {
    231     return kk->c->width * kk->drv.p->font_width;
    232 }
    233 
    234 static unsigned int x11_get_window_height(caca_t *kk)
    235 {
    236     return kk->c->height * kk->drv.p->font_height;
    237 }
    238 
    239 static void x11_display(caca_t *kk)
     229static unsigned int x11_get_window_width(caca_display_t *dp)
     230{
     231    return dp->cv->width * dp->drv.p->font_width;
     232}
     233
     234static unsigned int x11_get_window_height(caca_display_t *dp)
     235{
     236    return dp->cv->height * dp->drv.p->font_height;
     237}
     238
     239static void x11_display(caca_display_t *dp)
    240240{
    241241    unsigned int x, y, len;
     
    243243    /* First draw the background colours. Splitting the process in two
    244244     * loops like this is actually slightly faster. */
    245     for(y = 0; y < kk->c->height; y++)
    246     {
    247         for(x = 0; x < kk->c->width; x += len)
    248         {
    249             uint32_t *attr = kk->c->attr + x + y * kk->c->width;
     245    for(y = 0; y < dp->cv->height; y++)
     246    {
     247        for(x = 0; x < dp->cv->width; x += len)
     248        {
     249            uint32_t *attr = dp->cv->attr + x + y * dp->cv->width;
    250250            uint16_t bg = _cucul_argb32_to_rgb12bg(*attr);
    251251
    252252            len = 1;
    253             while(x + len < kk->c->width
     253            while(x + len < dp->cv->width
    254254                   && _cucul_argb32_to_rgb12bg(attr[len]) == bg)
    255255                len++;
    256256
    257             XSetForeground(kk->drv.p->dpy, kk->drv.p->gc,
    258                            kk->drv.p->colors[bg]);
    259             XFillRectangle(kk->drv.p->dpy, kk->drv.p->pixmap, kk->drv.p->gc,
    260                            x * kk->drv.p->font_width, y * kk->drv.p->font_height,
    261                            len * kk->drv.p->font_width, kk->drv.p->font_height);
     257            XSetForeground(dp->drv.p->dpy, dp->drv.p->gc,
     258                           dp->drv.p->colors[bg]);
     259            XFillRectangle(dp->drv.p->dpy, dp->drv.p->pixmap, dp->drv.p->gc,
     260                           x * dp->drv.p->font_width, y * dp->drv.p->font_height,
     261                           len * dp->drv.p->font_width, dp->drv.p->font_height);
    262262        }
    263263    }
    264264
    265265    /* Then print the foreground characters */
    266     for(y = 0; y < kk->c->height; y++)
    267     {
    268         unsigned int yoff = (y + 1) * kk->drv.p->font_height
    269                                     - kk->drv.p->font_offset;
    270         uint32_t *chars = kk->c->chars + y * kk->c->width;
    271 
    272         for(x = 0; x < kk->c->width; x++, chars++)
    273         {
    274             uint32_t *attr = kk->c->attr + x + y * kk->c->width;
     266    for(y = 0; y < dp->cv->height; y++)
     267    {
     268        unsigned int yoff = (y + 1) * dp->drv.p->font_height
     269                                    - dp->drv.p->font_offset;
     270        uint32_t *chars = dp->cv->chars + y * dp->cv->width;
     271
     272        for(x = 0; x < dp->cv->width; x++, chars++)
     273        {
     274            uint32_t *attr = dp->cv->attr + x + y * dp->cv->width;
    275275
    276276            /* Skip spaces */
     
    278278                continue;
    279279
    280             XSetForeground(kk->drv.p->dpy, kk->drv.p->gc,
    281                            kk->drv.p->colors[_cucul_argb32_to_rgb12fg(*attr)]);
     280            XSetForeground(dp->drv.p->dpy, dp->drv.p->gc,
     281                           dp->drv.p->colors[_cucul_argb32_to_rgb12fg(*attr)]);
    282282
    283283            /* Plain ASCII, no problem. */
    284284            if(*chars > 0x00000020 && *chars < 0x00000080)
    285285            {
    286                 char c = (uint8_t)*chars;
    287                 XDrawString(kk->drv.p->dpy, kk->drv.p->pixmap, kk->drv.p->gc,
    288                             x * kk->drv.p->font_width, yoff, &c, 1);
     286                char ch = (uint8_t)*chars;
     287                XDrawString(dp->drv.p->dpy, dp->drv.p->pixmap, dp->drv.p->gc,
     288                            x * dp->drv.p->font_width, yoff, &ch, 1);
    289289                continue;
    290290            }
     
    296296            {
    297297                case 0x00002580: /* ▀ */
    298                     XFillRectangle(kk->drv.p->dpy, kk->drv.p->pixmap,
    299                                    kk->drv.p->gc,
    300                                    x * kk->drv.p->font_width,
    301                                    y * kk->drv.p->font_height,
    302                                    kk->drv.p->font_width,
    303                                    kk->drv.p->font_height / 2);
     298                    XFillRectangle(dp->drv.p->dpy, dp->drv.p->pixmap,
     299                                   dp->drv.p->gc,
     300                                   x * dp->drv.p->font_width,
     301                                   y * dp->drv.p->font_height,
     302                                   dp->drv.p->font_width,
     303                                   dp->drv.p->font_height / 2);
    304304                    break;
    305305                case 0x00002584: /* ▄ */
    306                     XFillRectangle(kk->drv.p->dpy, kk->drv.p->pixmap,
    307                                    kk->drv.p->gc,
    308                                    x * kk->drv.p->font_width,
    309                                    (y + 1) * kk->drv.p->font_height
    310                                            - kk->drv.p->font_height / 2,
    311                                    kk->drv.p->font_width,
    312                                    kk->drv.p->font_height / 2);
     306                    XFillRectangle(dp->drv.p->dpy, dp->drv.p->pixmap,
     307                                   dp->drv.p->gc,
     308                                   x * dp->drv.p->font_width,
     309                                   (y + 1) * dp->drv.p->font_height
     310                                           - dp->drv.p->font_height / 2,
     311                                   dp->drv.p->font_width,
     312                                   dp->drv.p->font_height / 2);
    313313                    break;
    314314                case 0x00002588: /* █ */
    315                     XFillRectangle(kk->drv.p->dpy, kk->drv.p->pixmap,
    316                                    kk->drv.p->gc,
    317                                    x * kk->drv.p->font_width,
    318                                    y * kk->drv.p->font_height,
    319                                    kk->drv.p->font_width,
    320                                    kk->drv.p->font_height);
     315                    XFillRectangle(dp->drv.p->dpy, dp->drv.p->pixmap,
     316                                   dp->drv.p->gc,
     317                                   x * dp->drv.p->font_width,
     318                                   y * dp->drv.p->font_height,
     319                                   dp->drv.p->font_width,
     320                                   dp->drv.p->font_height);
    321321                    break;
    322322                case 0x0000258c: /* ▌ */
    323                     XFillRectangle(kk->drv.p->dpy, kk->drv.p->pixmap,
    324                                    kk->drv.p->gc,
    325                                    x * kk->drv.p->font_width,
    326                                    y * kk->drv.p->font_height,
    327                                    kk->drv.p->font_width / 2,
    328                                    kk->drv.p->font_height);
     323                    XFillRectangle(dp->drv.p->dpy, dp->drv.p->pixmap,
     324                                   dp->drv.p->gc,
     325                                   x * dp->drv.p->font_width,
     326                                   y * dp->drv.p->font_height,
     327                                   dp->drv.p->font_width / 2,
     328                                   dp->drv.p->font_height);
    329329                    break;
    330330                case 0x00002590: /* ▐ */
    331                     XFillRectangle(kk->drv.p->dpy, kk->drv.p->pixmap,
    332                                    kk->drv.p->gc,
    333                                    (x + 1) * kk->drv.p->font_width
    334                                            - kk->drv.p->font_width / 2,
    335                                    y * kk->drv.p->font_height,
    336                                    kk->drv.p->font_width / 2,
    337                                    kk->drv.p->font_height);
     331                    XFillRectangle(dp->drv.p->dpy, dp->drv.p->pixmap,
     332                                   dp->drv.p->gc,
     333                                   (x + 1) * dp->drv.p->font_width
     334                                           - dp->drv.p->font_width / 2,
     335                                   y * dp->drv.p->font_height,
     336                                   dp->drv.p->font_width / 2,
     337                                   dp->drv.p->font_height);
    338338                    break;
    339339                case 0x00002593: /* ▓ */
     
    343343                    /* FIXME: this sucks utterly */
    344344                    int i, j, k = *chars - 0x00002591;
    345                     for(j = kk->drv.p->font_height; j--; )
    346                         for(i = kk->drv.p->font_width; i--; )
     345                    for(j = dp->drv.p->font_height; j--; )
     346                        for(i = dp->drv.p->font_width; i--; )
    347347                    {
    348348                        if(((i + 2 * (j & 1)) & 3) > k)
    349349                            continue;
    350350
    351                         XDrawPoint(kk->drv.p->dpy, kk->drv.p->pixmap,
    352                                    kk->drv.p->gc,
    353                                    x * kk->drv.p->font_width + i,
    354                                    y * kk->drv.p->font_height + j);
     351                        XDrawPoint(dp->drv.p->dpy, dp->drv.p->pixmap,
     352                                   dp->drv.p->gc,
     353                                   x * dp->drv.p->font_width + i,
     354                                   y * dp->drv.p->font_height + j);
    355355                    }
    356356                    break;
     
    358358                default:
    359359                {
    360                     char c;
    361                     c = '?';
    362                     XDrawString(kk->drv.p->dpy, kk->drv.p->pixmap,
    363                                 kk->drv.p->gc,
    364                                 x * kk->drv.p->font_width, yoff, &c, 1);
     360                    char ch;
     361                    ch = '?';
     362                    XDrawString(dp->drv.p->dpy, dp->drv.p->pixmap,
     363                                dp->drv.p->gc,
     364                                x * dp->drv.p->font_width, yoff, &ch, 1);
    365365                    break;
    366366                }
     
    369369    }
    370370
    371     XCopyArea(kk->drv.p->dpy, kk->drv.p->pixmap, kk->drv.p->window,
    372               kk->drv.p->gc, 0, 0,
    373               kk->c->width * kk->drv.p->font_width,
    374               kk->c->height * kk->drv.p->font_height,
     371    XCopyArea(dp->drv.p->dpy, dp->drv.p->pixmap, dp->drv.p->window,
     372              dp->drv.p->gc, 0, 0,
     373              dp->cv->width * dp->drv.p->font_width,
     374              dp->cv->height * dp->drv.p->font_height,
    375375              0, 0);
    376     XFlush(kk->drv.p->dpy);
    377 }
    378 
    379 static void x11_handle_resize(caca_t *kk)
     376    XFlush(dp->drv.p->dpy);
     377}
     378
     379static void x11_handle_resize(caca_display_t *dp)
    380380{
    381381    Pixmap new_pixmap;
    382382
    383     new_pixmap = XCreatePixmap(kk->drv.p->dpy, kk->drv.p->window,
    384                                kk->resize.w * kk->drv.p->font_width,
    385                                kk->resize.h * kk->drv.p->font_height,
    386                                DefaultDepth(kk->drv.p->dpy,
    387                                             DefaultScreen(kk->drv.p->dpy)));
    388     XCopyArea(kk->drv.p->dpy, kk->drv.p->pixmap, new_pixmap,
    389               kk->drv.p->gc, 0, 0,
    390               kk->resize.w * kk->drv.p->font_width,
    391               kk->resize.h * kk->drv.p->font_height, 0, 0);
    392     XFreePixmap(kk->drv.p->dpy, kk->drv.p->pixmap);
    393     kk->drv.p->pixmap = new_pixmap;
    394 }
    395 
    396 static int x11_get_event(caca_t *kk, caca_event_t *ev)
     383    new_pixmap = XCreatePixmap(dp->drv.p->dpy, dp->drv.p->window,
     384                               dp->resize.w * dp->drv.p->font_width,
     385                               dp->resize.h * dp->drv.p->font_height,
     386                               DefaultDepth(dp->drv.p->dpy,
     387                                            DefaultScreen(dp->drv.p->dpy)));
     388    XCopyArea(dp->drv.p->dpy, dp->drv.p->pixmap, new_pixmap,
     389              dp->drv.p->gc, 0, 0,
     390              dp->resize.w * dp->drv.p->font_width,
     391              dp->resize.h * dp->drv.p->font_height, 0, 0);
     392    XFreePixmap(dp->drv.p->dpy, dp->drv.p->pixmap);
     393    dp->drv.p->pixmap = new_pixmap;
     394}
     395
     396static int x11_get_event(caca_display_t *dp, caca_event_t *ev)
    397397{
    398398    XEvent xevent;
    399399    char key;
    400400
    401     while(XCheckWindowEvent(kk->drv.p->dpy, kk->drv.p->window,
    402                             kk->drv.p->event_mask, &xevent) == True)
     401    while(XCheckWindowEvent(dp->drv.p->dpy, dp->drv.p->window,
     402                            dp->drv.p->event_mask, &xevent) == True)
    403403    {
    404404        KeySym keysym;
     
    407407        if(xevent.type == Expose)
    408408        {
    409             XCopyArea(kk->drv.p->dpy, kk->drv.p->pixmap,
    410                       kk->drv.p->window, kk->drv.p->gc, 0, 0,
    411                       kk->c->width * kk->drv.p->font_width,
    412                       kk->c->height * kk->drv.p->font_height, 0, 0);
     409            XCopyArea(dp->drv.p->dpy, dp->drv.p->pixmap,
     410                      dp->drv.p->window, dp->drv.p->gc, 0, 0,
     411                      dp->cv->width * dp->drv.p->font_width,
     412                      dp->cv->height * dp->drv.p->font_height, 0, 0);
    413413            continue;
    414414        }
     
    419419            unsigned int w, h;
    420420
    421             w = (xevent.xconfigure.width + kk->drv.p->font_width / 3)
    422                   / kk->drv.p->font_width;
    423             h = (xevent.xconfigure.height + kk->drv.p->font_height / 3)
    424                   / kk->drv.p->font_height;
    425 
    426             if(!w || !h || (w == kk->c->width && h == kk->c->height))
     421            w = (xevent.xconfigure.width + dp->drv.p->font_width / 3)
     422                  / dp->drv.p->font_width;
     423            h = (xevent.xconfigure.height + dp->drv.p->font_height / 3)
     424                  / dp->drv.p->font_height;
     425
     426            if(!w || !h || (w == dp->cv->width && h == dp->cv->height))
    427427                continue;
    428428
    429             kk->resize.w = w;
    430             kk->resize.h = h;
    431             kk->resize.resized = 1;
     429            dp->resize.w = w;
     430            dp->resize.h = h;
     431            dp->resize.resized = 1;
    432432
    433433            continue;
     
    437437        if(xevent.type == MotionNotify)
    438438        {
    439             unsigned int newx = xevent.xmotion.x / kk->drv.p->font_width;
    440             unsigned int newy = xevent.xmotion.y / kk->drv.p->font_height;
    441 
    442             if(newx >= kk->c->width)
    443                 newx = kk->c->width - 1;
    444             if(newy >= kk->c->height)
    445                 newy = kk->c->height - 1;
    446 
    447             if(kk->mouse.x == newx && kk->mouse.y == newy)
     439            unsigned int newx = xevent.xmotion.x / dp->drv.p->font_width;
     440            unsigned int newy = xevent.xmotion.y / dp->drv.p->font_height;
     441
     442            if(newx >= dp->cv->width)
     443                newx = dp->cv->width - 1;
     444            if(newy >= dp->cv->height)
     445                newy = dp->cv->height - 1;
     446
     447            if(dp->mouse.x == newx && dp->mouse.y == newy)
    448448                continue;
    449449
    450             kk->mouse.x = newx;
    451             kk->mouse.y = newy;
     450            dp->mouse.x = newx;
     451            dp->mouse.y = newy;
    452452
    453453            ev->type = CACA_EVENT_MOUSE_MOTION;
    454             ev->data.mouse.x = kk->mouse.x;
    455             ev->data.mouse.y = kk->mouse.y;
     454            ev->data.mouse.x = dp->mouse.x;
     455            ev->data.mouse.y = dp->mouse.y;
    456456            return 1;
    457457        }
     
    489489        }
    490490
    491         keysym = XKeycodeToKeysym(kk->drv.p->dpy, xevent.xkey.keycode, 0);
     491        keysym = XKeycodeToKeysym(dp->drv.p->dpy, xevent.xkey.keycode, 0);
    492492        switch(keysym)
    493493        {
     
    520520    }
    521521
    522     while(XCheckTypedEvent(kk->drv.p->dpy, ClientMessage, &xevent))
    523     {
    524         if(xevent.xclient.message_type != kk->drv.p->wm_protocols)
     522    while(XCheckTypedEvent(dp->drv.p->dpy, ClientMessage, &xevent))
     523    {
     524        if(xevent.xclient.message_type != dp->drv.p->wm_protocols)
    525525            continue;
    526526
    527         if((Atom)xevent.xclient.data.l[0] == kk->drv.p->wm_delete_window)
     527        if((Atom)xevent.xclient.data.l[0] == dp->drv.p->wm_delete_window)
    528528        {
    529529            ev->type = CACA_EVENT_QUIT;
     
    536536}
    537537
    538 static void x11_set_mouse(caca_t *kk, int flags)
     538static void x11_set_mouse(caca_display_t *dp, int flags)
    539539{
    540540    Cursor no_ptr;
     
    546546    if(flags)
    547547    {
    548         XDefineCursor(kk->drv.p->dpy,kk->drv.p->window, 0);
     548        XDefineCursor(dp->drv.p->dpy,dp->drv.p->window, 0);
    549549        return;
    550550    }
    551551
    552     colormap = DefaultColormap(kk->drv.p->dpy, DefaultScreen(kk->drv.p->dpy));
    553     if(!XAllocNamedColor(kk->drv.p->dpy, colormap, "black", &black, &dummy))
     552    colormap = DefaultColormap(dp->drv.p->dpy, DefaultScreen(dp->drv.p->dpy));
     553    if(!XAllocNamedColor(dp->drv.p->dpy, colormap, "black", &black, &dummy))
    554554    {
    555555        return;
    556556    }
    557     bm_no = XCreateBitmapFromData(kk->drv.p->dpy, kk->drv.p->window,
     557    bm_no = XCreateBitmapFromData(dp->drv.p->dpy, dp->drv.p->window,
    558558                                  empty, 8, 8);
    559     no_ptr = XCreatePixmapCursor(kk->drv.p->dpy, bm_no, bm_no,
     559    no_ptr = XCreatePixmapCursor(dp->drv.p->dpy, bm_no, bm_no,
    560560                                 &black, &black, 0, 0);
    561     XDefineCursor(kk->drv.p->dpy, kk->drv.p->window, no_ptr);
    562     XFreeCursor(kk->drv.p->dpy, no_ptr);
     561    XDefineCursor(dp->drv.p->dpy, dp->drv.p->window, no_ptr);
     562    XFreeCursor(dp->drv.p->dpy, no_ptr);
    563563    if(bm_no != None)
    564         XFreePixmap(kk->drv.p->dpy, bm_no);
    565     XFreeColors(kk->drv.p->dpy, colormap, &black.pixel, 1, 0);
    566 
    567     XSync(kk->drv.p->dpy, False);
     564        XFreePixmap(dp->drv.p->dpy, bm_no);
     565    XFreeColors(dp->drv.p->dpy, colormap, &black.pixel, 1, 0);
     566
     567    XSync(dp->drv.p->dpy, False);
    568568}
    569569
     
    582582 */
    583583
    584 int x11_install(caca_t *kk)
     584int x11_install(caca_display_t *dp)
    585585{
    586586#if defined(HAVE_GETENV)
     
    589589#endif
    590590
    591     kk->drv.driver = CACA_DRIVER_X11;
    592 
    593     kk->drv.init_graphics = x11_init_graphics;
    594     kk->drv.end_graphics = x11_end_graphics;
    595     kk->drv.set_window_title = x11_set_window_title;
    596     kk->drv.get_window_width = x11_get_window_width;
    597     kk->drv.get_window_height = x11_get_window_height;
    598     kk->drv.display = x11_display;
    599     kk->drv.handle_resize = x11_handle_resize;
    600     kk->drv.get_event = x11_get_event;
    601     kk->drv.set_mouse = x11_set_mouse;
     591    dp->drv.driver = CACA_DRIVER_X11;
     592
     593    dp->drv.init_graphics = x11_init_graphics;
     594    dp->drv.end_graphics = x11_end_graphics;
     595    dp->drv.set_window_title = x11_set_window_title;
     596    dp->drv.get_window_width = x11_get_window_width;
     597    dp->drv.get_window_height = x11_get_window_height;
     598    dp->drv.display = x11_display;
     599    dp->drv.handle_resize = x11_handle_resize;
     600    dp->drv.get_event = x11_get_event;
     601    dp->drv.set_mouse = x11_set_mouse;
    602602
    603603    return 0;
  • libcaca/trunk/caca/event.c

    r810 r811  
    2727#include "caca_internals.h"
    2828
    29 static int _get_next_event(caca_t *, caca_event_t *);
    30 static int _lowlevel_event(caca_t *, caca_event_t *);
     29static int _get_next_event(caca_display_t *, caca_event_t *);
     30static int _lowlevel_event(caca_display_t *, caca_event_t *);
    3131
    3232#if !defined(_DOXYGEN_SKIP_ME)
     
    5151 *  function to wait indefinitely until a matching event is received.
    5252 *
    53  *  \param kk The libcaca graphical context.
     53 *  \param dp The libcaca graphical context.
    5454 *  \param event_mask Bitmask of requested events.
    5555 *  \param timeout A timeout value in microseconds
     
    5757 *  \return The next matching event in the queue, or 0 if no event is pending.
    5858 */
    59 int caca_get_event(caca_t *kk, unsigned int event_mask,
     59int caca_get_event(caca_display_t *dp, unsigned int event_mask,
    6060                   caca_event_t *ev, int timeout)
    6161{
     
    7171    for( ; ; )
    7272    {
    73         int ret = _get_next_event(kk, ev);
     73        int ret = _get_next_event(dp, ev);
    7474
    7575        /* If we got the event we wanted, return */
     
    109109 *  the mouse is clicked. Other drivers such as X11 work well.
    110110 *
    111  *  \param kk The libcaca graphical context.
     111 *  \param dp The libcaca graphical context.
    112112 *  \return The X mouse coordinate.
    113113 */
    114 unsigned int caca_get_mouse_x(caca_t *kk)
    115 {
    116     if(kk->mouse.x >= kk->c->width)
    117         kk->mouse.x = kk->c->width - 1;
    118 
    119     return kk->mouse.x;
     114unsigned int caca_get_mouse_x(caca_display_t *dp)
     115{
     116    if(dp->mouse.x >= dp->cv->width)
     117        dp->mouse.x = dp->cv->width - 1;
     118
     119    return dp->mouse.x;
    120120}
    121121
     
    127127 *  the mouse is clicked. Other drivers such as X11 work well.
    128128 *
    129  *  \param kk The libcaca graphical context.
     129 *  \param dp The libcaca graphical context.
    130130 *  \return The Y mouse coordinate.
    131131 */
    132 unsigned int caca_get_mouse_y(caca_t *kk)
    133 {
    134     if(kk->mouse.y >= kk->c->height)
    135         kk->mouse.y = kk->c->height - 1;
    136 
    137     return kk->mouse.y;
     132unsigned int caca_get_mouse_y(caca_display_t *dp)
     133{
     134    if(dp->mouse.y >= dp->cv->height)
     135        dp->mouse.y = dp->cv->height - 1;
     136
     137    return dp->mouse.y;
    138138}
    139139
     
    142142 */
    143143
    144 static int _get_next_event(caca_t *kk, caca_event_t *ev)
     144static int _get_next_event(caca_display_t *dp, caca_event_t *ev)
    145145{
    146146#if defined(USE_SLANG) || defined(USE_NCURSES)
     
    150150
    151151    /* If we are about to return a resize event, acknowledge it */
    152     if(kk->resize.resized)
    153     {
    154         kk->resize.resized = 0;
    155         _caca_handle_resize(kk);
     152    if(dp->resize.resized)
     153    {
     154        dp->resize.resized = 0;
     155        _caca_handle_resize(dp);
    156156        ev->type = CACA_EVENT_RESIZE;
    157         ev->data.resize.w = kk->c->width;
    158         ev->data.resize.h = kk->c->height;
     157        ev->data.resize.w = dp->cv->width;
     158        ev->data.resize.h = dp->cv->height;
    159159        return 1;
    160160    }
    161161
    162     ret = _lowlevel_event(kk, ev);
     162    ret = _lowlevel_event(dp, ev);
    163163
    164164#if defined(USE_SLANG)
    165     if(kk->drv.driver != CACA_DRIVER_SLANG)
     165    if(dp->drv.driver != CACA_DRIVER_SLANG)
    166166#endif
    167167#if defined(USE_NCURSES)
    168     if(kk->drv.driver != CACA_DRIVER_NCURSES)
     168    if(dp->drv.driver != CACA_DRIVER_NCURSES)
    169169#endif
    170170    return ret;
     
    172172#if defined(USE_SLANG) || defined(USE_NCURSES)
    173173    /* Simulate long keypresses using autorepeat features */
    174     ticks = _caca_getticks(&kk->events.key_timer);
    175     kk->events.last_key_ticks += ticks;
    176     kk->events.autorepeat_ticks += ticks;
     174    ticks = _caca_getticks(&dp->events.key_timer);
     175    dp->events.last_key_ticks += ticks;
     176    dp->events.autorepeat_ticks += ticks;
    177177
    178178    /* Handle autorepeat */
    179     if(kk->events.last_key_event.type
    180            && kk->events.autorepeat_ticks > AUTOREPEAT_TRIGGER
    181            && kk->events.autorepeat_ticks > AUTOREPEAT_THRESHOLD
    182            && kk->events.autorepeat_ticks > AUTOREPEAT_RATE)
    183     {
    184         _push_event(kk, ev);
    185         kk->events.autorepeat_ticks -= AUTOREPEAT_RATE;
    186         *ev = kk->events.last_key_event;
     179    if(dp->events.last_key_event.type
     180           && dp->events.autorepeat_ticks > AUTOREPEAT_TRIGGER
     181           && dp->events.autorepeat_ticks > AUTOREPEAT_THRESHOLD
     182           && dp->events.autorepeat_ticks > AUTOREPEAT_RATE)
     183    {
     184        _push_event(dp, ev);
     185        dp->events.autorepeat_ticks -= AUTOREPEAT_RATE;
     186        *ev = dp->events.last_key_event;
    187187        return 1;
    188188    }
     
    191191     * this event and return the next one by calling ourselves. */
    192192    if(ev->type == CACA_EVENT_KEY_PRESS
    193         && kk->events.last_key_event.type
    194         && ev->data.key.ch == kk->events.last_key_event.data.key.ch
    195         && ev->data.key.ucs4 == kk->events.last_key_event.data.key.ucs4)
    196     {
    197         kk->events.last_key_ticks = 0;
    198         return _get_next_event(kk, ev);
     193        && dp->events.last_key_event.type
     194        && ev->data.key.ch == dp->events.last_key_event.data.key.ch
     195        && ev->data.key.ucs4 == dp->events.last_key_event.data.key.ucs4)
     196    {
     197        dp->events.last_key_ticks = 0;
     198        return _get_next_event(dp, ev);
    199199    }
    200200
    201201    /* We are in autorepeat mode, but key has expired or a new key was
    202202     * pressed - store our event and return a key release event first */
    203     if(kk->events.last_key_event.type
    204           && (kk->events.last_key_ticks > AUTOREPEAT_THRESHOLD
     203    if(dp->events.last_key_event.type
     204          && (dp->events.last_key_ticks > AUTOREPEAT_THRESHOLD
    205205               || (ev->type & CACA_EVENT_KEY_PRESS)))
    206206    {
    207         _push_event(kk, ev);
    208         *ev = kk->events.last_key_event;
     207        _push_event(dp, ev);
     208        *ev = dp->events.last_key_event;
    209209        ev->type = CACA_EVENT_KEY_RELEASE;
    210         kk->events.last_key_event.type = CACA_EVENT_NONE;
     210        dp->events.last_key_event.type = CACA_EVENT_NONE;
    211211        return 1;
    212212    }
     
    215215    if(ev->type & CACA_EVENT_KEY_PRESS)
    216216    {
    217         kk->events.last_key_ticks = 0;
    218         kk->events.autorepeat_ticks = 0;
    219         kk->events.last_key_event = *ev;
     217        dp->events.last_key_ticks = 0;
     218        dp->events.autorepeat_ticks = 0;
     219        dp->events.last_key_event = *ev;
    220220    }
    221221
     
    224224}
    225225
    226 static int _lowlevel_event(caca_t *kk, caca_event_t *ev)
     226static int _lowlevel_event(caca_display_t *dp, caca_event_t *ev)
    227227{
    228228#if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO)
    229     int ret = _pop_event(kk, ev);
     229    int ret = _pop_event(dp, ev);
    230230
    231231    if(ret)
     
    233233#endif
    234234
    235     return kk->drv.get_event(kk, ev);
     235    return dp->drv.get_event(dp, ev);
    236236}
    237237
    238238#if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL)
    239 void _push_event(caca_t *kk, caca_event_t *ev)
    240 {
    241     if(!ev->type || kk->events.queue == EVENTBUF_LEN)
     239void _push_event(caca_display_t *dp, caca_event_t *ev)
     240{
     241    if(!ev->type || dp->events.queue == EVENTBUF_LEN)
    242242        return;
    243     kk->events.buf[kk->events.queue] = *ev;
    244     kk->events.queue++;
    245 }
    246 
    247 int _pop_event(caca_t *kk, caca_event_t *ev)
     243    dp->events.buf[dp->events.queue] = *ev;
     244    dp->events.queue++;
     245}
     246
     247int _pop_event(caca_display_t *dp, caca_event_t *ev)
    248248{
    249249    int i;
    250250
    251     if(kk->events.queue == 0)
     251    if(dp->events.queue == 0)
    252252        return 0;
    253253
    254     *ev = kk->events.buf[0];
    255     for(i = 1; i < kk->events.queue; i++)
    256         kk->events.buf[i - 1] = kk->events.buf[i];
    257     kk->events.queue--;
     254    *ev = dp->events.buf[0];
     255    for(i = 1; i < dp->events.queue; i++)
     256        dp->events.buf[i - 1] = dp->events.buf[i];
     257    dp->events.queue--;
    258258
    259259    return 1;
  • libcaca/trunk/caca/graphics.c

    r810 r811  
    2828 *  the X11 and Win32 drivers.
    2929 *
    30  *  \param kk The libcaca graphical context.
     30 *  \param dp The libcaca graphical context.
    3131 *  \param title The desired window title.
    3232 *  \return 0 upon success, a non-zero value if an error occurs.
    3333 */
    34 int caca_set_window_title(caca_t *kk, char const *title)
     34int caca_set_window_title(caca_display_t *dp, char const *title)
    3535{
    36     return kk->drv.set_window_title(kk, title);
     36    return dp->drv.set_window_title(dp, title);
    3737}
    3838
     
    4444 *  6x10 font is being used. Note that the units are not necessarily pixels.
    4545 *
    46  *  \param kk The libcaca graphical context.
     46 *  \param dp The libcaca graphical context.
    4747 *  \return The window width.
    4848 */
    49 unsigned int caca_get_window_width(caca_t *kk)
     49unsigned int caca_get_window_width(caca_display_t *dp)
    5050{
    51     return kk->drv.get_window_width(kk);
     51    return dp->drv.get_window_width(dp);
    5252}
    5353
     
    5959 *  used. Note that the units are not necessarily pixels.
    6060 *
    61  *  \param kk The libcaca graphical context.
     61 *  \param dp The libcaca graphical context.
    6262 *  \return The window height.
    6363 */
    64 unsigned int caca_get_window_height(caca_t *kk)
     64unsigned int caca_get_window_height(caca_display_t *dp)
    6565{
    66     return kk->drv.get_window_height(kk);
     66    return dp->drv.get_window_height(dp);
    6767}
    6868
     
    7676 *  default behaviour.
    7777 *
    78  *  \param kk The libcaca graphical context.
     78 *  \param dp The libcaca graphical context.
    7979 *  \param usec The refresh delay in microseconds.
    8080 */
    81 void caca_set_delay(caca_t *kk, unsigned int usec)
     81void caca_set_delay(caca_display_t *dp, unsigned int usec)
    8282{
    83     kk->delay = usec;
     83    dp->delay = usec;
    8484}
    8585
     
    9292 *  even if the real rendering time was shorter.
    9393 *
    94  *  \param kk The libcaca graphical context.
     94 *  \param dp The libcaca graphical context.
    9595 *  \return The render time in microseconds.
    9696 */
    97 unsigned int caca_get_rendertime(caca_t *kk)
     97unsigned int caca_get_rendertime(caca_display_t *dp)
    9898{
    99     return kk->rendertime;
     99    return dp->rendertime;
    100100}
    101101
     
    112112 *  performing the screen refresh.
    113113 *
    114  *  \param kk The libcaca graphical context.
     114 *  \param dp The libcaca graphical context.
    115115 */
    116 void caca_display(caca_t *kk)
     116void caca_display(caca_display_t *dp)
    117117{
    118118#if !defined(_DOXYGEN_SKIP_ME)
    119119#define IDLE_USEC 10000
    120120#endif
    121     int ticks = kk->lastticks + _caca_getticks(&kk->timer);
     121    int ticks = dp->lastticks + _caca_getticks(&dp->timer);
    122122
    123     kk->drv.display(kk);
     123    dp->drv.display(dp);
    124124
    125125    /* Once the display is finished, we can ack resizes */
    126     if(kk->resize.resized)
     126    if(dp->resize.resized)
    127127    {
    128         kk->resize.resized = 0;
    129         _caca_handle_resize(kk);
     128        dp->resize.resized = 0;
     129        _caca_handle_resize(dp);
    130130    }
    131131
    132     /* Wait until kk->delay + time of last call */
    133     ticks += _caca_getticks(&kk->timer);
    134     for(ticks += _caca_getticks(&kk->timer);
    135         ticks + IDLE_USEC < (int)kk->delay;
    136         ticks += _caca_getticks(&kk->timer))
     132    /* Wait until dp->delay + time of last call */
     133    ticks += _caca_getticks(&dp->timer);
     134    for(ticks += _caca_getticks(&dp->timer);
     135        ticks + IDLE_USEC < (int)dp->delay;
     136        ticks += _caca_getticks(&dp->timer))
    137137    {
    138138        _caca_sleep(IDLE_USEC);
     
    140140
    141141    /* Update the sliding mean of the render time */
    142     kk->rendertime = (7 * kk->rendertime + ticks) / 8;
     142    dp->rendertime = (7 * dp->rendertime + ticks) / 8;
    143143
    144     kk->lastticks = ticks - kk->delay;
     144    dp->lastticks = ticks - dp->delay;
    145145
    146146    /* If we drifted too much, it's bad, bad, bad. */
    147     if(kk->lastticks > (int)kk->delay)
    148         kk->lastticks = 0;
     147    if(dp->lastticks > (int)dp->delay)
     148        dp->lastticks = 0;
    149149}
    150150
     
    154154 *  support it.
    155155 *
    156  *  \param kk The libcaca graphical context.
     156 *  \param dp The libcaca graphical context.
    157157 *  \param flag 0 hides the pointer, 1 shows the system's default pointer
    158158 *              (usually an arrow). Other values are reserved for future use.
    159159 */
    160 void caca_set_mouse(caca_t *kk, int flag)
     160void caca_set_mouse(caca_display_t *dp, int flag)
    161161{
    162     if(kk->drv.set_mouse)
    163         kk->drv.set_mouse(kk, flag);
     162    if(dp->drv.set_mouse)
     163        dp->drv.set_mouse(dp, flag);
    164164}
    165165
     
    168168 */
    169169
    170 void _caca_handle_resize(caca_t *kk)
     170void _caca_handle_resize(caca_display_t *dp)
    171171{
    172     kk->drv.handle_resize(kk);
     172    dp->drv.handle_resize(dp);
    173173
    174174    /* Tell libcucul we changed size */
    175     if(kk->resize.w != kk->c->width || kk->resize.h != kk->c->height)
    176         _cucul_set_size(kk->c, kk->resize.w, kk->resize.h);
     175    if(dp->resize.w != dp->cv->width || dp->resize.h != dp->cv->height)
     176        _cucul_set_size(dp->cv, dp->resize.w, dp->resize.h);
    177177}
    178178
Note: See TracChangeset for help on using the changeset viewer.