~ubuntu-branches/ubuntu/raring/libcaca/raring

« back to all changes in this revision

Viewing changes to caca/driver/win32.c

  • Committer: Bazaar Package Importer
  • Author(s): Sam Hocevar
  • Date: 2010-02-08 01:40:59 UTC
  • mfrom: (1.1.8 upstream) (4.1.6 sid)
  • Revision ID: james.westby@ubuntu.com-20100208014059-9q4av8pze8p7uw3i
Tags: 0.99.beta17-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 *  libcaca       Colour ASCII-Art library
3
 
 *  Copyright (c) 2002-2006 Sam Hocevar <sam@zoy.org>
 
3
 *  Copyright (c) 2002-2009 Sam Hocevar <sam@hocevar.net>
4
4
 *                All Rights Reserved
5
5
 *
6
 
 *  $Id$
7
 
 *
8
6
 *  This library is free software. It comes without any warranty, to
9
7
 *  the extent permitted by applicable law. You can redistribute it
10
8
 *  and/or modify it under the terms of the Do What The Fuck You Want
195
193
    COORD size, pos;
196
194
    SMALL_RECT rect;
197
195
    CHAR_INFO *buffer = dp->drv.p->buffer;
198
 
    uint32_t const *cvchars = (uint32_t const *)caca_get_canvas_chars(dp->cv);
199
 
    uint32_t const *cvattrs = (uint32_t const *)caca_get_canvas_attrs(dp->cv);
 
196
    uint32_t const *cvchars = caca_get_canvas_chars(dp->cv);
 
197
    uint32_t const *cvattrs = caca_get_canvas_attrs(dp->cv);
200
198
    int width = caca_get_canvas_width(dp->cv);
201
199
    int height = caca_get_canvas_height(dp->cv);
202
200
    int n;
205
203
    for(n = height * width; n--; )
206
204
    {
207
205
        uint32_t ch = *cvchars++;
208
 
        uint8_t fg = caca_attr_to_ansi_fg(*cvattrs);
209
 
        uint8_t bg = caca_attr_to_ansi_bg(*cvattrs);
 
206
        uint16_t bgfg = caca_attr_to_ansi(*cvattrs);
 
207
        uint8_t fg = bgfg & 0xf;
 
208
        uint8_t bg = bgfg >> 4;
210
209
 
211
210
#if 0
212
211
        if(ch > 0x00000020 && ch < 0x00000080)
238
237
#if 0
239
238
    WriteConsoleOutput(dp->drv.p->screen, dp->drv.p->buffer, size, pos, &rect);
240
239
#else
 
240
    /* FIXME: would this benefit from dirty rectangles? */
241
241
    WriteConsoleOutputW(dp->drv.p->screen, dp->drv.p->buffer, size, pos, &rect);
242
242
#endif
243
243
}
277
277
 
278
278
                return 1;
279
279
            }
 
280
            else
 
281
            {
 
282
                switch (rec.Event.KeyEvent.wVirtualKeyCode)
 
283
                {
 
284
                case VK_TAB:        ev->data.key.ch = '\t';              break;
 
285
                case VK_RETURN:     ev->data.key.ch = '\r';              break;
 
286
                case VK_ESCAPE:     ev->data.key.ch = '\033';            break;
 
287
                case VK_SPACE:      ev->data.key.ch = ' ';               break;
 
288
                case VK_DELETE:     ev->data.key.ch = '\x7f';            break;
 
289
 
 
290
                case VK_LEFT:       ev->data.key.ch = CACA_KEY_LEFT;     break;
 
291
                case VK_RIGHT:      ev->data.key.ch = CACA_KEY_RIGHT;    break;
 
292
                case VK_UP:         ev->data.key.ch = CACA_KEY_UP;       break;
 
293
                case VK_DOWN:       ev->data.key.ch = CACA_KEY_DOWN;     break;
 
294
 
 
295
                case VK_INSERT:     ev->data.key.ch = CACA_KEY_INSERT;   break;
 
296
                case VK_HOME:       ev->data.key.ch = CACA_KEY_HOME;     break;
 
297
                case VK_END:        ev->data.key.ch = CACA_KEY_END;      break;
 
298
                case VK_PRIOR:      ev->data.key.ch = CACA_KEY_PAGEUP;   break;
 
299
                case VK_NEXT:       ev->data.key.ch = CACA_KEY_PAGEDOWN; break;
 
300
 
 
301
                case VK_F1:         ev->data.key.ch = CACA_KEY_F1;       break;
 
302
                case VK_F2:         ev->data.key.ch = CACA_KEY_F2;       break;
 
303
                case VK_F3:         ev->data.key.ch = CACA_KEY_F3;       break;
 
304
                case VK_F4:         ev->data.key.ch = CACA_KEY_F4;       break;
 
305
                case VK_F5:         ev->data.key.ch = CACA_KEY_F5;       break;
 
306
                case VK_F6:         ev->data.key.ch = CACA_KEY_F6;       break;
 
307
                case VK_F7:         ev->data.key.ch = CACA_KEY_F7;       break;
 
308
                case VK_F8:         ev->data.key.ch = CACA_KEY_F8;       break;
 
309
                case VK_F9:         ev->data.key.ch = CACA_KEY_F9;       break;
 
310
                case VK_F10:        ev->data.key.ch = CACA_KEY_F10;      break;
 
311
                case VK_F11:        ev->data.key.ch = CACA_KEY_F11;      break;
 
312
                case VK_F12:        ev->data.key.ch = CACA_KEY_F12;      break;
 
313
                case VK_F13:        ev->data.key.ch = CACA_KEY_F13;      break;
 
314
                case VK_F14:        ev->data.key.ch = CACA_KEY_F14;      break;
 
315
                case VK_F15:        ev->data.key.ch = CACA_KEY_F15;      break;
 
316
 
 
317
                case VK_NUMPAD0:    ev->data.key.ch = '0';               break;
 
318
                case VK_NUMPAD1:    ev->data.key.ch = '1';               break;
 
319
                case VK_NUMPAD2:    ev->data.key.ch = '2';               break;
 
320
                case VK_NUMPAD3:    ev->data.key.ch = '3';               break;
 
321
                case VK_NUMPAD4:    ev->data.key.ch = '4';               break;
 
322
                case VK_NUMPAD5:    ev->data.key.ch = '5';               break;
 
323
                case VK_NUMPAD6:    ev->data.key.ch = '6';               break;
 
324
                case VK_NUMPAD7:    ev->data.key.ch = '7';               break;
 
325
                case VK_NUMPAD8:    ev->data.key.ch = '8';               break;
 
326
                case VK_NUMPAD9:    ev->data.key.ch = '9';               break;
 
327
                case VK_MULTIPLY:   ev->data.key.ch = '*';               break;
 
328
                case VK_ADD:        ev->data.key.ch = '+';               break;
 
329
                case VK_SEPARATOR:  ev->data.key.ch = ',';               break;
 
330
                case VK_SUBTRACT:   ev->data.key.ch = '-';               break;
 
331
                case VK_DECIMAL:    ev->data.key.ch = '.';               break;
 
332
                case VK_DIVIDE:     ev->data.key.ch = '/';               break;
 
333
 
 
334
                default: ev->type = CACA_EVENT_NONE; return 0;
 
335
                }
 
336
 
 
337
                if ((ev->data.key.ch > 0)
 
338
                    &&
 
339
                    (ev->data.key.ch <= 0x7f))
 
340
                {
 
341
                    ev->data.key.utf32 = (uint32_t)ev->data.key.ch;
 
342
                    ev->data.key.utf8[0] = ev->data.key.ch;
 
343
                    ev->data.key.utf8[1] = '\0';
 
344
                }
 
345
                else
 
346
                {
 
347
                    ev->data.key.utf32 = 0;
 
348
                    ev->data.key.utf8[0] = '\0';
 
349
                }
 
350
 
 
351
                return 1;
 
352
            }
280
353
        }
281
354
 
282
355
        if(rec.EventType == MOUSE_EVENT)