Ignore:
Timestamp:
Nov 18, 2007, 10:13:33 PM (13 years ago)
Author:
Pascal Terjan
Message:
  • Finish Caca::Event (a.k.a. J'ai fait caca aujourd'hui)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/ruby/caca-display.c

    r2017 r2019  
    124124{
    125125    caca_event_t ev;
     126    VALUE e;
     127
    126128    if(caca_get_event(_SELF, NUM2UINT(event_mask), &ev, NUM2INT(timeout)) == 0)
    127129    {
    128130        return Qnil;
    129131    }
    130     //FIXME
    131     return Qnil;
     132
     133    switch(ev.type)
     134    {
     135    case CACA_EVENT_KEY_PRESS:
     136        e = rb_funcall(cEventKeyPress, rb_intern("new"), 3,
     137                       UINT2NUM(ev.data.key.ch),
     138                       ULONG2NUM(ev.data.key.utf32),
     139                       rb_str_new(ev.data.key.utf8, 8));
     140        break;
     141    case CACA_EVENT_KEY_RELEASE:
     142        e = rb_funcall(cEventKeyRelease, rb_intern("new"), 3,
     143                       UINT2NUM(ev.data.key.ch),
     144                       ULONG2NUM(ev.data.key.utf32),
     145                       rb_str_new(ev.data.key.utf8, 8));
     146        break;
     147    case CACA_EVENT_MOUSE_PRESS:
     148        e = rb_funcall(cEventMousePress, rb_intern("new"), 3,
     149                       UINT2NUM(ev.data.mouse.x),
     150                       UINT2NUM(ev.data.mouse.y),
     151                       UINT2NUM(ev.data.mouse.button));
     152        break;
     153    case CACA_EVENT_MOUSE_RELEASE:
     154        e = rb_funcall(cEventMouseRelease, rb_intern("new"), 3,
     155                       UINT2NUM(ev.data.mouse.x),
     156                       UINT2NUM(ev.data.mouse.y),
     157                       UINT2NUM(ev.data.mouse.button));
     158        break;
     159    case CACA_EVENT_MOUSE_MOTION:
     160        e = rb_funcall(cEventMouseMotion, rb_intern("new"), 3,
     161                       UINT2NUM(ev.data.mouse.x),
     162                       UINT2NUM(ev.data.mouse.y),
     163                       Qnil);
     164        break;
     165    case CACA_EVENT_RESIZE:
     166        e = rb_funcall(cEventResize, rb_intern("new"), 2,
     167                       UINT2NUM(ev.data.resize.w),
     168                       UINT2NUM(ev.data.resize.h));
     169        break;
     170    case CACA_EVENT_QUIT:
     171        e = rb_funcall(cEventQuit, rb_intern("new"), 0);
     172        break;
     173    default:
     174        rb_raise(rb_eRuntimeError, "Invalid event received !");
     175    }
     176
     177    return e;
    132178}
    133179
     
    150196    rb_define_method(cDisplay, "mouse=", set_mouse, 1);
    151197    rb_define_method(cDisplay, "set_mouse", set_mouse2, 1);
    152     rb_define_method(cDisplay, "get_event", get_event, 3);
     198    rb_define_method(cDisplay, "get_event", get_event, 2);
    153199}
Note: See TracChangeset for help on using the changeset viewer.