Ignore:
Timestamp:
Mar 23, 2006, 7:36:59 PM (15 years ago)
Author:
Sam Hocevar
Message:
  • Massive rework of the event handling code, as per the TODO list.
File:
1 edited

Legend:

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

    r672 r681  
    255255}
    256256
    257 static unsigned int slang_get_event(caca_t *kk)
    258 {
    259     unsigned int event;
     257static int slang_get_event(caca_t *kk, struct caca_event *ev)
     258{
    260259    int intkey;
    261260
    262261    if(!SLang_input_pending(0))
    263         return CACA_EVENT_NONE;
     262    {
     263        ev->type = CACA_EVENT_NONE;
     264        return 0;
     265    }
    264266
    265267    /* We first use SLang_getkey() to see whether Esc was pressed
     
    277279    if(intkey < 0x100)
    278280    {
    279         return CACA_EVENT_KEY_PRESS | intkey;
     281        ev->type = CACA_EVENT_KEY_PRESS;
     282        ev->data.key.c = intkey;
     283        return 1;
    280284    }
    281285
     
    285289        unsigned int x = SLang_getkey() - '!';
    286290        unsigned int y = SLang_getkey() - '!';
    287         _push_event(kk, CACA_EVENT_MOUSE_PRESS | button);
    288         _push_event(kk, CACA_EVENT_MOUSE_RELEASE | button);
     291
     292        ev->data.mouse.button = button;
     293        ev->type = CACA_EVENT_MOUSE_PRESS;
     294        _push_event(kk, ev);
     295        ev->type = CACA_EVENT_MOUSE_RELEASE;
     296        _push_event(kk, ev);
    289297
    290298        if(kk->mouse.x == x && kk->mouse.y == y)
    291             return _pop_event(kk);
     299            return _pop_event(kk, ev);
    292300
    293301        kk->mouse.x = x;
    294302        kk->mouse.y = y;
    295303
    296         return CACA_EVENT_MOUSE_MOTION | (kk->mouse.x << 12) | kk->mouse.y;
    297     }
    298 
    299     event = CACA_EVENT_KEY_PRESS;
     304        ev->type = CACA_EVENT_MOUSE_MOTION;
     305        ev->data.mouse.x = kk->mouse.x;
     306        ev->data.mouse.y = kk->mouse.y;
     307        return 1;
     308    }
    300309
    301310    switch(intkey)
    302311    {
    303         case SL_KEY_UP: return event | CACA_KEY_UP;
    304         case SL_KEY_DOWN: return event | CACA_KEY_DOWN;
    305         case SL_KEY_LEFT: return event | CACA_KEY_LEFT;
    306         case SL_KEY_RIGHT: return event | CACA_KEY_RIGHT;
    307 
    308         case SL_KEY_IC: return event | CACA_KEY_INSERT;
    309         case SL_KEY_DELETE: return event | CACA_KEY_DELETE;
    310         case SL_KEY_HOME: return event | CACA_KEY_HOME;
    311         case SL_KEY_END: return event | CACA_KEY_END;
    312         case SL_KEY_PPAGE: return event | CACA_KEY_PAGEUP;
    313         case SL_KEY_NPAGE: return event | CACA_KEY_PAGEDOWN;
    314 
    315         case SL_KEY_F(1): return event | CACA_KEY_F1;
    316         case SL_KEY_F(2): return event | CACA_KEY_F2;
    317         case SL_KEY_F(3): return event | CACA_KEY_F3;
    318         case SL_KEY_F(4): return event | CACA_KEY_F4;
    319         case SL_KEY_F(5): return event | CACA_KEY_F5;
    320         case SL_KEY_F(6): return event | CACA_KEY_F6;
    321         case SL_KEY_F(7): return event | CACA_KEY_F7;
    322         case SL_KEY_F(8): return event | CACA_KEY_F8;
    323         case SL_KEY_F(9): return event | CACA_KEY_F9;
    324         case SL_KEY_F(10): return event | CACA_KEY_F10;
    325         case SL_KEY_F(11): return event | CACA_KEY_F11;
    326         case SL_KEY_F(12): return event | CACA_KEY_F12;
    327     }
    328 
    329     return CACA_EVENT_NONE;
     312        case SL_KEY_UP: ev->data.key.c = CACA_KEY_UP; break;
     313        case SL_KEY_DOWN: ev->data.key.c = CACA_KEY_DOWN; break;
     314        case SL_KEY_LEFT: ev->data.key.c = CACA_KEY_LEFT; break;
     315        case SL_KEY_RIGHT: ev->data.key.c = CACA_KEY_RIGHT; break;
     316
     317        case SL_KEY_IC: ev->data.key.c = CACA_KEY_INSERT; break;
     318        case SL_KEY_DELETE: ev->data.key.c = CACA_KEY_DELETE; break;
     319        case SL_KEY_HOME: ev->data.key.c = CACA_KEY_HOME; break;
     320        case SL_KEY_END: ev->data.key.c = CACA_KEY_END; break;
     321        case SL_KEY_PPAGE: ev->data.key.c = CACA_KEY_PAGEUP; break;
     322        case SL_KEY_NPAGE: ev->data.key.c = CACA_KEY_PAGEDOWN; break;
     323
     324        case SL_KEY_F(1): ev->data.key.c = CACA_KEY_F1; break;
     325        case SL_KEY_F(2): ev->data.key.c = CACA_KEY_F2; break;
     326        case SL_KEY_F(3): ev->data.key.c = CACA_KEY_F3; break;
     327        case SL_KEY_F(4): ev->data.key.c = CACA_KEY_F4; break;
     328        case SL_KEY_F(5): ev->data.key.c = CACA_KEY_F5; break;
     329        case SL_KEY_F(6): ev->data.key.c = CACA_KEY_F6; break;
     330        case SL_KEY_F(7): ev->data.key.c = CACA_KEY_F7; break;
     331        case SL_KEY_F(8): ev->data.key.c = CACA_KEY_F8; break;
     332        case SL_KEY_F(9): ev->data.key.c = CACA_KEY_F9; break;
     333        case SL_KEY_F(10): ev->data.key.c = CACA_KEY_F10; break;
     334        case SL_KEY_F(11): ev->data.key.c = CACA_KEY_F11; break;
     335        case SL_KEY_F(12): ev->data.key.c = CACA_KEY_F12; break;
     336
     337        default: ev->type = CACA_EVENT_NONE; return 0;
     338    }
     339
     340    ev->type = CACA_EVENT_KEY_PRESS;
     341    ev->data.key.ucs4 = 0;
     342    ev->data.key.utf8[0] = '\0';
     343    return 1;
    330344}
    331345
Note: See TracChangeset for help on using the changeset viewer.