Ignore:
Timestamp:
Mar 8, 2006, 10:28:41 AM (14 years ago)
Author:
Sam Hocevar
Message:
  • Split event.c into the appropriate driver_*.c files.
File:
1 edited

Legend:

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

    r540 r548  
    246246}
    247247
     248static unsigned int slang_get_event(caca_t *kk)
     249{
     250    unsigned int event;
     251    int intkey;
     252
     253    if(kk->resize_event)
     254    {
     255        kk->resize_event = 0;
     256        kk->resize = 1;
     257        return CACA_EVENT_RESIZE;
     258    }
     259
     260    if(!SLang_input_pending(0))
     261        return CACA_EVENT_NONE;
     262
     263    /* We first use SLang_getkey() to see whether Esc was pressed
     264     * alone, then (if it wasn't) we unget the key and use SLkp_getkey()
     265     * instead, so that escape sequences are interpreted. */
     266    intkey = SLang_getkey();
     267
     268    if(intkey != 0x1b /* Esc */ || SLang_input_pending(0))
     269    {
     270        SLang_ungetkey(intkey);
     271        intkey = SLkp_getkey();
     272    }
     273
     274    /* If the key was ASCII, return it immediately */
     275    if(intkey < 0x100)
     276    {
     277        return CACA_EVENT_KEY_PRESS | intkey;
     278    }
     279
     280    if(intkey == 0x3e9)
     281    {
     282        int button = (SLang_getkey() - ' ' + 1) & 0xf;
     283        unsigned int x = SLang_getkey() - '!';
     284        unsigned int y = SLang_getkey() - '!';
     285        _push_event(kk, CACA_EVENT_MOUSE_PRESS | button);
     286        _push_event(kk, CACA_EVENT_MOUSE_RELEASE | button);
     287
     288        if(kk->mouse_x == x && kk->mouse_y == y)
     289            return _pop_event(kk);
     290
     291        kk->mouse_x = x;
     292        kk->mouse_y = y;
     293
     294        return CACA_EVENT_MOUSE_MOTION | (kk->mouse_x << 12) | kk->mouse_y;
     295    }
     296
     297    event = CACA_EVENT_KEY_PRESS;
     298
     299    switch(intkey)
     300    {
     301        case SL_KEY_UP: return event | CACA_KEY_UP;
     302        case SL_KEY_DOWN: return event | CACA_KEY_DOWN;
     303        case SL_KEY_LEFT: return event | CACA_KEY_LEFT;
     304        case SL_KEY_RIGHT: return event | CACA_KEY_RIGHT;
     305
     306        case SL_KEY_IC: return event | CACA_KEY_INSERT;
     307        case SL_KEY_DELETE: return event | CACA_KEY_DELETE;
     308        case SL_KEY_HOME: return event | CACA_KEY_HOME;
     309        case SL_KEY_END: return event | CACA_KEY_END;
     310        case SL_KEY_PPAGE: return event | CACA_KEY_PAGEUP;
     311        case SL_KEY_NPAGE: return event | CACA_KEY_PAGEDOWN;
     312
     313        case SL_KEY_F(1): return event | CACA_KEY_F1;
     314        case SL_KEY_F(2): return event | CACA_KEY_F2;
     315        case SL_KEY_F(3): return event | CACA_KEY_F3;
     316        case SL_KEY_F(4): return event | CACA_KEY_F4;
     317        case SL_KEY_F(5): return event | CACA_KEY_F5;
     318        case SL_KEY_F(6): return event | CACA_KEY_F6;
     319        case SL_KEY_F(7): return event | CACA_KEY_F7;
     320        case SL_KEY_F(8): return event | CACA_KEY_F8;
     321        case SL_KEY_F(9): return event | CACA_KEY_F9;
     322        case SL_KEY_F(10): return event | CACA_KEY_F10;
     323        case SL_KEY_F(11): return event | CACA_KEY_F11;
     324        case SL_KEY_F(12): return event | CACA_KEY_F12;
     325    }
     326
     327    return CACA_EVENT_NONE;
     328}
     329
    248330/*
    249331 * XXX: following functions are local
     
    317399    kk->driver.display = slang_display;
    318400    kk->driver.handle_resize = slang_handle_resize;
     401    kk->driver.get_event = slang_get_event;
    319402}
    320403
Note: See TracChangeset for help on using the changeset viewer.