Ignore:
Timestamp:
Nov 18, 2007, 10:13:33 PM (12 years ago)
Author:
Pascal Terjan
Message:
  • Finish Caca::Event (a.k.a. J'ai fait caca aujourd'hui)
Location:
libcaca/trunk/ruby
Files:
2 added
4 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}
  • libcaca/trunk/ruby/caca-event.c

    r2017 r2019  
    1616
    1717VALUE cEvent;
     18static VALUE cEventKey;
     19VALUE cEventKeyPress;
     20VALUE cEventKeyRelease;
     21static VALUE cEventMouse;
     22VALUE cEventMousePress;
     23VALUE cEventMouseRelease;
     24VALUE cEventMouseMotion;
     25VALUE cEventResize;
     26VALUE cEventQuit;
    1827
    1928void Init_caca_event(VALUE mCaca)
    2029{
    2130    cEvent = rb_define_class_under(mCaca, "Event", rb_cObject);
     31    rb_define_const(cEvent, "TYPE", INT2FIX(CACA_EVENT_ANY));
     32
     33    cEventKey = rb_define_class_under(cEvent, "Key", cEvent);
     34    rb_define_const(cEventKey, "TYPE",
     35                    INT2FIX(CACA_EVENT_KEY_PRESS|
     36                            CACA_EVENT_KEY_RELEASE));
     37
     38    cEventKeyPress = rb_define_class_under(cEventKey, "Press", cEventKey);
     39    rb_define_const(cEventKeyPress, "TYPE",
     40                    INT2FIX(CACA_EVENT_KEY_PRESS));
     41
     42    cEventKeyRelease = rb_define_class_under(cEventKey, "Release", cEventKey);
     43    rb_define_const(cEventKeyRelease, "TYPE",
     44                    INT2FIX(CACA_EVENT_KEY_RELEASE));
     45   
     46    cEventMouse = rb_define_class_under(cEvent, "Mouse", cEvent);
     47    rb_define_const(cEventMouse, "TYPE",
     48                    INT2FIX(CACA_EVENT_MOUSE_PRESS|
     49                            CACA_EVENT_MOUSE_RELEASE|
     50                            CACA_EVENT_MOUSE_MOTION));
     51
     52    cEventMousePress = rb_define_class_under(cEventMouse, "Press", cEventMouse);
     53    rb_define_const(cEventMousePress, "TYPE",
     54                    INT2FIX(CACA_EVENT_MOUSE_PRESS));
     55
     56    cEventMouseRelease = rb_define_class_under(cEventMouse, "Release", cEventMouse);
     57    rb_define_const(cEventMouseRelease, "TYPE",
     58                    INT2FIX(CACA_EVENT_MOUSE_RELEASE));
     59
     60    cEventMouseMotion = rb_define_class_under(cEventMouse, "Motion", cEventMouse);
     61    rb_define_const(cEventMouseMotion, "TYPE",
     62                    INT2FIX(CACA_EVENT_MOUSE_MOTION));
     63
     64    cEventResize = rb_define_class_under(cEvent, "Resize", cEvent);
     65    rb_define_const(cEventResize, "TYPE",
     66                    INT2FIX(CACA_EVENT_RESIZE));
     67
     68    cEventQuit = rb_define_class_under(cEvent, "Quit", cEvent);
     69    rb_define_const(cEventQuit, "TYPE",
     70                    INT2FIX(CACA_EVENT_QUIT));
     71
    2272}
  • libcaca/trunk/ruby/caca-event.h

    r2017 r2019  
    55
    66extern VALUE cEvent;
     7extern VALUE cEventKeyPress;
     8extern VALUE cEventKeyRelease;
     9extern VALUE cEventMouse;
     10extern VALUE cEventMousePress;
     11extern VALUE cEventMouseRelease;
     12extern VALUE cEventMouseMotion;
     13extern VALUE cEventResize;
     14extern VALUE cEventQuit;
    715extern void Init_caca_event(VALUE);
    816
  • libcaca/trunk/ruby/caca.c

    r2015 r2019  
    1414
    1515#include "caca-display.h"
     16#include "caca-event.h"
    1617
    1718void Init_caca()
     
    2021
    2122    Init_caca_display(mCaca);
     23    Init_caca_event(mCaca);
    2224}
Note: See TracChangeset for help on using the changeset viewer.