Ignore:
Timestamp:
Mar 23, 2006, 7:36:59 PM (14 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_x11.c

    r672 r681  
    400400}
    401401
    402 static unsigned int x11_get_event(caca_t *kk)
    403 {
    404     unsigned int event = 0;
     402static int x11_get_event(caca_t *kk, struct caca_event *ev)
     403{
    405404    XEvent xevent;
    406405    char key;
     
    458457            kk->mouse.y = newy;
    459458
    460             return CACA_EVENT_MOUSE_MOTION | (kk->mouse.x << 12) | kk->mouse.y;
     459            ev->type = CACA_EVENT_MOUSE_MOTION;
     460            ev->data.mouse.x = kk->mouse.x;
     461            ev->data.mouse.y = kk->mouse.y;
     462            return 1;
    461463        }
    462464
    463465        /* Check for mouse press and release events */
    464466        if(xevent.type == ButtonPress)
    465             return CACA_EVENT_MOUSE_PRESS
    466                     | ((XButtonEvent *)&xevent)->button;
     467        {
     468            ev->type = CACA_EVENT_MOUSE_PRESS;
     469            ev->data.mouse.button = ((XButtonEvent *)&xevent)->button;
     470            return 1;
     471        }
    467472
    468473        if(xevent.type == ButtonRelease)
    469             return CACA_EVENT_MOUSE_RELEASE
    470                     | ((XButtonEvent *)&xevent)->button;
     474        {
     475            ev->type = CACA_EVENT_MOUSE_RELEASE;
     476            ev->data.mouse.button = ((XButtonEvent *)&xevent)->button;
     477            return 1;
     478        }
    471479
    472480        /* Check for key press and release events */
    473481        if(xevent.type == KeyPress)
    474             event |= CACA_EVENT_KEY_PRESS;
     482            ev->type = CACA_EVENT_KEY_PRESS;
    475483        else if(xevent.type == KeyRelease)
    476             event |= CACA_EVENT_KEY_RELEASE;
     484            ev->type = CACA_EVENT_KEY_RELEASE;
    477485        else
    478486            continue;
    479487
    480488        if(XLookupString(&xevent.xkey, &key, 1, NULL, NULL))
    481             return event | key;
     489        {
     490            ev->data.key.c = key;
     491            ev->data.key.ucs4 = key;
     492            ev->data.key.utf8[0] = key;
     493            ev->data.key.utf8[1] = '\0';
     494            return 1;
     495        }
    482496
    483497        keysym = XKeycodeToKeysym(kk->drv.p->dpy, xevent.xkey.keycode, 0);
    484498        switch(keysym)
    485499        {
    486         case XK_F1:    return event | CACA_KEY_F1;
    487         case XK_F2:    return event | CACA_KEY_F2;
    488         case XK_F3:    return event | CACA_KEY_F3;
    489         case XK_F4:    return event | CACA_KEY_F4;
    490         case XK_F5:    return event | CACA_KEY_F5;
    491         case XK_F6:    return event | CACA_KEY_F6;
    492         case XK_F7:    return event | CACA_KEY_F7;
    493         case XK_F8:    return event | CACA_KEY_F8;
    494         case XK_F9:    return event | CACA_KEY_F9;
    495         case XK_F10:   return event | CACA_KEY_F10;
    496         case XK_F11:   return event | CACA_KEY_F11;
    497         case XK_F12:   return event | CACA_KEY_F12;
    498         case XK_F13:   return event | CACA_KEY_F13;
    499         case XK_F14:   return event | CACA_KEY_F14;
    500         case XK_F15:   return event | CACA_KEY_F15;
    501         case XK_Left:  return event | CACA_KEY_LEFT;
    502         case XK_Right: return event | CACA_KEY_RIGHT;
    503         case XK_Up:    return event | CACA_KEY_UP;
    504         case XK_Down:  return event | CACA_KEY_DOWN;
    505         default:       return CACA_EVENT_NONE;
    506         }
     500            case XK_F1:    ev->data.key.c = CACA_KEY_F1;    break;
     501            case XK_F2:    ev->data.key.c = CACA_KEY_F2;    break;
     502            case XK_F3:    ev->data.key.c = CACA_KEY_F3;    break;
     503            case XK_F4:    ev->data.key.c = CACA_KEY_F4;    break;
     504            case XK_F5:    ev->data.key.c = CACA_KEY_F5;    break;
     505            case XK_F6:    ev->data.key.c = CACA_KEY_F6;    break;
     506            case XK_F7:    ev->data.key.c = CACA_KEY_F7;    break;
     507            case XK_F8:    ev->data.key.c = CACA_KEY_F8;    break;
     508            case XK_F9:    ev->data.key.c = CACA_KEY_F9;    break;
     509            case XK_F10:   ev->data.key.c = CACA_KEY_F10;   break;
     510            case XK_F11:   ev->data.key.c = CACA_KEY_F11;   break;
     511            case XK_F12:   ev->data.key.c = CACA_KEY_F12;   break;
     512            case XK_F13:   ev->data.key.c = CACA_KEY_F13;   break;
     513            case XK_F14:   ev->data.key.c = CACA_KEY_F14;   break;
     514            case XK_F15:   ev->data.key.c = CACA_KEY_F15;   break;
     515            case XK_Left:  ev->data.key.c = CACA_KEY_LEFT;  break;
     516            case XK_Right: ev->data.key.c = CACA_KEY_RIGHT; break;
     517            case XK_Up:    ev->data.key.c = CACA_KEY_UP;    break;
     518            case XK_Down:  ev->data.key.c = CACA_KEY_DOWN;  break;
     519
     520            default: ev->type = CACA_EVENT_NONE; return 0;
     521        }
     522
     523        ev->data.key.ucs4 = 0;
     524        ev->data.key.utf8[0] = '\0';
     525        return 1;
    507526    }
    508527
    509     return CACA_EVENT_NONE;
     528    ev->type = CACA_EVENT_NONE;
     529    return 0;
    510530}
    511531
Note: See TracChangeset for help on using the changeset viewer.