#include "reflex/ruby/event.h" #include #include "rays/ruby/point.h" #include "defs.h" using namespace Rucy; using Reflex::coord; RUCY_DEFINE_VALUE_FROM_TO(Reflex::WheelEvent) #define THIS to(self) #define CHECK RUCY_CHECK_OBJ(Reflex::WheelEvent, self) static VALUE alloc(VALUE klass) { return new_type(klass); } static VALUE initialize(VALUE self) { CHECK; check_arg_count(__FILE__, __LINE__, "WheelEvent#initialize", argc, 0, 1, 2, 3); THIS->dx = (argc >= 1) ? to(argv[0]) : 0; THIS->dy = (argc >= 2) ? to(argv[1]) : 0; THIS->dz = (argc >= 3) ? to(argv[2]) : 0; return rb_call_super(0, NULL); } static VALUE initialize_copy(VALUE self, VALUE obj) { CHECK; *THIS = to(obj); return self; } static VALUE dx(VALUE self) { CHECK; return value(THIS->dx); } static VALUE dy(VALUE self) { CHECK; return value(THIS->dy); } static VALUE dz(VALUE self) { CHECK; return value(THIS->dz); } static VALUE x(VALUE self) { CHECK; return value(THIS->x); } static VALUE y(VALUE self) { CHECK; return value(THIS->y); } static VALUE z(VALUE self) { CHECK; return value(THIS->z); } static VALUE modifiers(VALUE self) { CHECK; return value(THIS->modifiers); } static VALUE delta(VALUE self) { CHECK; return value(Rays::Point(THIS->dx, THIS->dy, THIS->dz)); } static VALUE position(VALUE self) { CHECK; return value(Rays::Point(THIS->x, THIS->y, THIS->z)); } static Class cWheelEvent; void Init_wheel_event () { Module mReflex = rb_define_module("Reflex"); cWheelEvent = mReflex.define_class("WheelEvent", Reflex::event_class()); rb_define_alloc_func(cWheelEvent, alloc); rb_define_private_method(cWheelEvent, "initialize", RUBY_METHOD_FUNC(initialize), -1); rb_define_private_method(cWheelEvent, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1); rb_define_method(cWheelEvent, "dx", RUBY_METHOD_FUNC(dx), 0); rb_define_method(cWheelEvent, "dy", RUBY_METHOD_FUNC(dy), 0); rb_define_method(cWheelEvent, "dz", RUBY_METHOD_FUNC(dz), 0); rb_define_method(cWheelEvent, "x", RUBY_METHOD_FUNC(x), 0); rb_define_method(cWheelEvent, "y", RUBY_METHOD_FUNC(y), 0); rb_define_method(cWheelEvent, "z", RUBY_METHOD_FUNC(z), 0); rb_define_method(cWheelEvent, "modifiers", RUBY_METHOD_FUNC(modifiers), 0); rb_define_method(cWheelEvent, "delta", RUBY_METHOD_FUNC(delta), 0); rb_define_method(cWheelEvent, "position", RUBY_METHOD_FUNC(position), 0); } namespace Reflex { Class wheel_event_class () { return cWheelEvent; } }// Reflex