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_gl.c

    r672 r681  
    309309}
    310310
    311 static unsigned int gl_get_event(caca_t *kk)
    312 {
    313     unsigned int event = 0;
    314 
     311static int gl_get_event(caca_t *kk, struct caca_event *ev)
     312{
    315313    glutMainLoopEvent();
    316314
    317315    if(kk->resize.resized)
    318         return CACA_EVENT_RESIZE;
     316    {
     317        ev->type = CACA_EVENT_RESIZE;
     318        ev->data.resize.w = kk->qq->width;
     319        ev->data.resize.h = kk->qq->height;
     320        return 1;
     321    }
    319322
    320323    if(kk->drv.p->mouse_changed)
    321324    {
     325        ev->type = CACA_EVENT_MOUSE_MOTION;
     326        ev->data.mouse.x = kk->mouse.x;
     327        ev->data.mouse.y = kk->mouse.y;
     328        kk->drv.p->mouse_changed = 0;
     329
    322330        if(kk->drv.p->mouse_clicked)
    323331        {
    324             event |= CACA_EVENT_MOUSE_PRESS | kk->drv.p->mouse_button;
     332            _push_event(kk, ev);
     333            ev->type = CACA_EVENT_MOUSE_PRESS;
     334            ev->data.mouse.button = kk->drv.p->mouse_button;
    325335            kk->drv.p->mouse_clicked = 0;
    326336        }
    327         kk->mouse.x = kk->drv.p->mouse_x;
    328         kk->mouse.y = kk->drv.p->mouse_y;
    329         event |= CACA_EVENT_MOUSE_MOTION | (kk->mouse.x << 12) | kk->mouse.y;
    330         kk->drv.p->mouse_changed = 0;
     337
     338        return 1;
    331339    }
    332340
    333341    if(kk->drv.p->key != 0)
    334342    {
    335         event |= CACA_EVENT_KEY_PRESS;
    336         event |= kk->drv.p->key;
     343        ev->type = CACA_EVENT_KEY_PRESS;
     344        ev->data.key.c = kk->drv.p->key;
     345        ev->data.key.ucs4 = (uint32_t)kk->drv.p->key;
     346        ev->data.key.utf8[0] = kk->drv.p->key;
     347        ev->data.key.utf8[1] = '\0';
    337348        kk->drv.p->key = 0;
    338         return event;
     349        return 1;
    339350    }
    340351
    341352    if(kk->drv.p->special_key != 0)
    342353    {
    343         event |= CACA_EVENT_KEY_PRESS;
    344 
    345354        switch(kk->drv.p->special_key)
    346355        {
    347             case GLUT_KEY_F1 : kk->drv.p->special_key = 0; return event | CACA_KEY_F1;
    348             case GLUT_KEY_F2 : kk->drv.p->special_key = 0; return event | CACA_KEY_F2;
    349             case GLUT_KEY_F3 : kk->drv.p->special_key = 0; return event | CACA_KEY_F3;
    350             case GLUT_KEY_F4 : kk->drv.p->special_key = 0; return event | CACA_KEY_F4;
    351             case GLUT_KEY_F5 : kk->drv.p->special_key = 0; return event | CACA_KEY_F5;
    352             case GLUT_KEY_F6 : kk->drv.p->special_key = 0; return event | CACA_KEY_F6;
    353             case GLUT_KEY_F7 : kk->drv.p->special_key = 0; return event | CACA_KEY_F7;
    354             case GLUT_KEY_F8 : kk->drv.p->special_key = 0; return event | CACA_KEY_F8;
    355             case GLUT_KEY_F9 : kk->drv.p->special_key = 0; return event | CACA_KEY_F9;
    356             case GLUT_KEY_F10: kk->drv.p->special_key = 0; return event | CACA_KEY_F10;
    357             case GLUT_KEY_F11: kk->drv.p->special_key = 0; return event | CACA_KEY_F11;
    358             case GLUT_KEY_F12: kk->drv.p->special_key = 0; return event | CACA_KEY_F12;
    359             case GLUT_KEY_LEFT : kk->drv.p->special_key = 0; return event | CACA_KEY_LEFT;
    360             case GLUT_KEY_RIGHT: kk->drv.p->special_key = 0; return event | CACA_KEY_RIGHT;
    361             case GLUT_KEY_UP   : kk->drv.p->special_key = 0; return event | CACA_KEY_UP;
    362             case GLUT_KEY_DOWN : kk->drv.p->special_key = 0; return event | CACA_KEY_DOWN;
    363             default: return CACA_EVENT_NONE;
     356            case GLUT_KEY_F1 : ev->data.key.c = CACA_KEY_F1; break;
     357            case GLUT_KEY_F2 : ev->data.key.c = CACA_KEY_F2; break;
     358            case GLUT_KEY_F3 : ev->data.key.c = CACA_KEY_F3; break;
     359            case GLUT_KEY_F4 : ev->data.key.c = CACA_KEY_F4; break;
     360            case GLUT_KEY_F5 : ev->data.key.c = CACA_KEY_F5; break;
     361            case GLUT_KEY_F6 : ev->data.key.c = CACA_KEY_F6; break;
     362            case GLUT_KEY_F7 : ev->data.key.c = CACA_KEY_F7; break;
     363            case GLUT_KEY_F8 : ev->data.key.c = CACA_KEY_F8; break;
     364            case GLUT_KEY_F9 : ev->data.key.c = CACA_KEY_F9; break;
     365            case GLUT_KEY_F10: ev->data.key.c = CACA_KEY_F10; break;
     366            case GLUT_KEY_F11: ev->data.key.c = CACA_KEY_F11; break;
     367            case GLUT_KEY_F12: ev->data.key.c = CACA_KEY_F12; break;
     368            case GLUT_KEY_LEFT : ev->data.key.c = CACA_KEY_LEFT; break;
     369            case GLUT_KEY_RIGHT: ev->data.key.c = CACA_KEY_RIGHT; break;
     370            case GLUT_KEY_UP   : ev->data.key.c = CACA_KEY_UP; break;
     371            case GLUT_KEY_DOWN : ev->data.key.c = CACA_KEY_DOWN; break;
     372            default: ev->type = CACA_EVENT_NONE; return 0;
    364373        }
    365     }
    366     return CACA_EVENT_NONE;
     374
     375        ev->type = CACA_EVENT_KEY_PRESS;
     376        ev->data.key.ucs4 = 0;
     377        ev->data.key.utf8[0] = '\0';
     378
     379        kk->drv.p->special_key = 0;
     380        return 1;
     381    }
     382
     383    ev->type = CACA_EVENT_NONE;
     384    return 0;
    367385}
    368386
Note: See TracChangeset for help on using the changeset viewer.