Ignore:
Timestamp:
Apr 18, 2006, 5:11:25 PM (14 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.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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;
Note: See TracChangeset for help on using the changeset viewer.