reflexion 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/application.cpp +16 -0
  3. data/.doc/ext/reflex/device.cpp +46 -3
  4. data/.doc/ext/reflex/device_event.cpp +62 -0
  5. data/.doc/ext/reflex/key_event.cpp +49 -19
  6. data/.doc/ext/reflex/midi.cpp +82 -0
  7. data/.doc/ext/reflex/native.cpp +10 -4
  8. data/.doc/ext/reflex/note_event.cpp +121 -0
  9. data/.doc/ext/reflex/reflex.cpp +30 -8
  10. data/.doc/ext/reflex/view.cpp +11 -16
  11. data/.doc/ext/reflex/window.cpp +24 -0
  12. data/ChangeLog.md +16 -0
  13. data/Rakefile +7 -0
  14. data/VERSION +1 -1
  15. data/ext/reflex/application.cpp +18 -0
  16. data/ext/reflex/device.cpp +48 -3
  17. data/ext/reflex/device_event.cpp +65 -0
  18. data/ext/reflex/key_event.cpp +49 -19
  19. data/ext/reflex/midi.cpp +87 -0
  20. data/ext/reflex/native.cpp +10 -4
  21. data/ext/reflex/note_event.cpp +130 -0
  22. data/ext/reflex/reflex.cpp +31 -8
  23. data/ext/reflex/view.cpp +11 -16
  24. data/ext/reflex/window.cpp +27 -0
  25. data/include/reflex/application.h +4 -0
  26. data/include/reflex/defs.h +58 -21
  27. data/include/reflex/device.h +22 -0
  28. data/include/reflex/event.h +64 -2
  29. data/include/reflex/gamepad.h +175 -0
  30. data/include/reflex/midi.h +53 -0
  31. data/include/reflex/reflex.h +2 -0
  32. data/include/reflex/ruby/application.h +18 -0
  33. data/include/reflex/ruby/device.h +40 -0
  34. data/include/reflex/ruby/event.h +22 -0
  35. data/include/reflex/ruby/midi.h +84 -0
  36. data/include/reflex/ruby/window.h +27 -0
  37. data/include/reflex/view.h +9 -1
  38. data/include/reflex/window.h +6 -0
  39. data/lib/reflex/note_event.rb +34 -0
  40. data/lib/reflex/view.rb +2 -1
  41. data/lib/reflex.rb +9 -8
  42. data/reflex.gemspec +3 -3
  43. data/src/application.cpp +70 -0
  44. data/src/application.h +9 -0
  45. data/src/device.cpp +24 -0
  46. data/src/event.cpp +133 -7
  47. data/src/event.h +5 -0
  48. data/src/gamepad.cpp +176 -0
  49. data/src/gamepad.h +74 -0
  50. data/src/ios/app_delegate.mm +2 -2
  51. data/src/ios/application.mm +0 -25
  52. data/src/ios/event.h +0 -5
  53. data/src/ios/event.mm +11 -87
  54. data/src/ios/gamepad.mm +314 -0
  55. data/src/ios/reflex.mm +0 -5
  56. data/src/midi.cpp +379 -0
  57. data/src/midi.h +32 -0
  58. data/src/osx/app_delegate.mm +2 -2
  59. data/src/osx/application.mm +0 -25
  60. data/src/osx/event.h +0 -5
  61. data/src/osx/event.mm +9 -86
  62. data/src/osx/gamepad.mm +40 -0
  63. data/src/osx/gamepad_gc.mm +299 -0
  64. data/src/osx/gamepad_hid.mm +567 -0
  65. data/src/osx/reflex.mm +0 -5
  66. data/src/queue.h +71 -0
  67. data/src/reflex.cpp +18 -0
  68. data/src/timer.cpp +3 -10
  69. data/src/view.cpp +39 -0
  70. data/src/view.h +2 -0
  71. data/src/win32/application.cpp +5 -26
  72. data/src/win32/event.cpp +6 -89
  73. data/src/win32/event.h +1 -1
  74. data/src/win32/gamepad.cpp +110 -0
  75. data/src/win32/gamepad.h +20 -0
  76. data/src/win32/window.cpp +2 -1
  77. data/src/window.cpp +61 -10
  78. data/src/window.h +2 -0
  79. data/test/test_capture_event.rb +20 -16
  80. data/test/test_key_event.rb +8 -1
  81. data/test/test_note_event.rb +43 -0
  82. data/test/test_view.rb +24 -12
  83. metadata +43 -14
@@ -369,6 +369,27 @@ VALUE on_wheel(VALUE self, VALUE event)
369
369
  CALL(on_wheel(to<Reflex::WheelEvent*>(event)));
370
370
  }
371
371
 
372
+ static
373
+ VALUE on_note(VALUE self, VALUE event)
374
+ {
375
+ CHECK;
376
+ CALL(on_note(to<Reflex::NoteEvent*>(event)));
377
+ }
378
+
379
+ static
380
+ VALUE on_note_on(VALUE self, VALUE event)
381
+ {
382
+ CHECK;
383
+ CALL(on_note_on(to<Reflex::NoteEvent*>(event)));
384
+ }
385
+
386
+ static
387
+ VALUE on_note_off(VALUE self, VALUE event)
388
+ {
389
+ CHECK;
390
+ CALL(on_note_off(to<Reflex::NoteEvent*>(event)));
391
+ }
392
+
372
393
 
373
394
  static Class cWindow;
374
395
 
@@ -422,6 +443,9 @@ Init_reflex_window ()
422
443
  rb_define_method(cWindow, "on_pointer_move", RUBY_METHOD_FUNC(on_pointer_move), 1);
423
444
  rb_define_method(cWindow, "on_pointer_cancel", RUBY_METHOD_FUNC(on_pointer_cancel), 1);
424
445
  rb_define_method(cWindow, "on_wheel", RUBY_METHOD_FUNC(on_wheel), 1);
446
+ rb_define_method(cWindow, "on_note", RUBY_METHOD_FUNC(on_note), 1);
447
+ rb_define_method(cWindow, "on_note_on", RUBY_METHOD_FUNC(on_note_on), 1);
448
+ rb_define_method(cWindow, "on_note_off", RUBY_METHOD_FUNC(on_note_off), 1);
425
449
 
426
450
  cWindow.define_const("ORIENTATION_PORTRAIT", Reflex::Window::FLAG_PORTRAIT);
427
451
  cWindow.define_const("ORIENTATION_LANDSCAPE", Reflex::Window::FLAG_LANDSCAPE);
data/ChangeLog.md CHANGED
@@ -1,6 +1,22 @@
1
1
  # reflex ChangeLog
2
2
 
3
3
 
4
+ ## [v0.3.7] - 2025-05-11
5
+
6
+ - Add MIDI class
7
+ - Add NoteEvent class and on_note and on_note_on/off event handlers
8
+ - Add reflex/test/test_note_event.rb
9
+ - KeyEvent can take 'time' parameter
10
+
11
+
12
+ ## [v0.3.6] - 2025-04-08
13
+
14
+ - Add Gamepad class
15
+ - Add Device and DeviceEvent classes
16
+ - Add Application#on_device_connect/disconnect
17
+ - Add Application_call_start() and Application_call_quit()
18
+
19
+
4
20
  ## [v0.3.5] - 2025-03-24
5
21
 
6
22
  - Add PULL_REQUEST_TEMPLATE.md
data/Rakefile CHANGED
@@ -21,6 +21,13 @@ use_external_library 'https://github.com/erincatto/box2d',
21
21
  incdirs: %w[include src],
22
22
  srcdirs: 'src'
23
23
 
24
+ use_external_library 'https://github.com/thestk/rtmidi',
25
+ tag: '6.0.0',
26
+ incdirs: 'rtmidi',
27
+ srcdirs: 'rtmidi',
28
+ defs: '__MACOSX_CORE__',
29
+ &proc {sh %( mkdir rtmidi && cp RtMidi.* rtmidi )}
30
+
24
31
  default_tasks :ext
25
32
  use_bundler
26
33
  build_native_library
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.5
1
+ 0.3.7
@@ -89,6 +89,22 @@ RUCY_DEF1(on_quit, event)
89
89
  }
90
90
  RUCY_END
91
91
 
92
+ static
93
+ RUCY_DEF1(on_device_connect, event)
94
+ {
95
+ CHECK;
96
+ CALL(on_device_connect(to<Reflex::DeviceEvent*>(event)));
97
+ }
98
+ RUCY_END
99
+
100
+ static
101
+ RUCY_DEF1(on_device_disconnect, event)
102
+ {
103
+ CHECK;
104
+ CALL(on_device_disconnect(to<Reflex::DeviceEvent*>(event)));
105
+ }
106
+ RUCY_END
107
+
92
108
  static
93
109
  RUCY_DEF1(on_motion, event)
94
110
  {
@@ -137,6 +153,8 @@ Init_reflex_application ()
137
153
  cApplication.define_method("each_window", each_window);
138
154
  cApplication.define_method("on_start", on_start);
139
155
  cApplication.define_method("on_quit", on_quit);
156
+ cApplication.define_method("on_device_connect", on_device_connect);
157
+ cApplication.define_method("on_device_disconnect", on_device_disconnect);
140
158
  cApplication.define_method("on_motion", on_motion);
141
159
  cApplication.define_method("on_preference", on_preference);
142
160
  cApplication.define_method("on_about", on_about);
@@ -1,9 +1,34 @@
1
- #include "reflex/device.h"
1
+ #include "reflex/ruby/device.h"
2
+
3
+
2
4
  #include "defs.h"
3
5
 
4
6
 
7
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::Device)
8
+
9
+ #define THIS to<Reflex::Device*>(self)
10
+
11
+ #define CHECK RUCY_CHECK_OBJECT(Reflex::Device, self)
12
+
13
+
14
+ static
15
+ RUCY_DEF_ALLOC(alloc, klass)
16
+ {
17
+ Reflex::reflex_error(__FILE__, __LINE__, "can not instantiate Device class.");
18
+ }
19
+ RUCY_END
20
+
21
+ static
22
+ RUCY_DEF0(name)
23
+ {
24
+ CHECK;
25
+ return value(THIS->name());
26
+ }
27
+ RUCY_END
28
+
29
+
5
30
  static
6
- RUCY_DEF0(vibrate)
31
+ RUCY_DEF0(s_vibrate)
7
32
  {
8
33
  Reflex::vibrate();
9
34
  return self;
@@ -11,10 +36,30 @@ RUCY_DEF0(vibrate)
11
36
  RUCY_END
12
37
 
13
38
 
39
+ static Class cDevice;
40
+
14
41
  void
15
42
  Init_reflex_device ()
16
43
  {
17
44
  Module mReflex = define_module("Reflex");
18
45
 
19
- mReflex.define_singleton_method("vibrate", vibrate);
46
+ cDevice = mReflex.define_class("Device", Reflex::device_class());
47
+ cDevice.define_alloc_func(alloc);
48
+ cDevice.define_method("name", name);
49
+
50
+ mReflex.define_singleton_method("vibrate", s_vibrate);
20
51
  }
52
+
53
+
54
+ namespace Reflex
55
+ {
56
+
57
+
58
+ Class
59
+ device_class ()
60
+ {
61
+ return cDevice;
62
+ }
63
+
64
+
65
+ }// Reflex
@@ -0,0 +1,65 @@
1
+ #include "reflex/ruby/event.h"
2
+
3
+
4
+ #include "reflex/ruby/device.h"
5
+ #include "defs.h"
6
+
7
+
8
+ RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::DeviceEvent)
9
+
10
+ #define THIS to<Reflex::DeviceEvent*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_OBJ(Reflex::DeviceEvent, self)
13
+
14
+
15
+ static
16
+ RUCY_DEF_ALLOC(alloc, klass)
17
+ {
18
+ return new_type<Reflex::DeviceEvent>(klass);
19
+ }
20
+ RUCY_END
21
+
22
+ static
23
+ RUCY_DEF1(initialize_copy, obj)
24
+ {
25
+ CHECK;
26
+ *THIS = to<Reflex::DeviceEvent&>(obj).dup();
27
+ return self;
28
+ }
29
+ RUCY_END
30
+
31
+ static
32
+ RUCY_DEF0(get_device)
33
+ {
34
+ CHECK;
35
+ return value(THIS->device());
36
+ }
37
+ RUCY_END
38
+
39
+
40
+ static Class cDeviceEvent;
41
+
42
+ void
43
+ Init_reflex_device_event ()
44
+ {
45
+ Module mReflex = define_module("Reflex");
46
+
47
+ cDeviceEvent = mReflex.define_class("DeviceEvent", Reflex::event_class());
48
+ cDeviceEvent.define_alloc_func(alloc);
49
+ cDeviceEvent.define_private_method("initialize_copy", initialize_copy);
50
+ cDeviceEvent.define_method("device", get_device);
51
+ }
52
+
53
+
54
+ namespace Reflex
55
+ {
56
+
57
+
58
+ Class
59
+ device_event_class ()
60
+ {
61
+ return cDeviceEvent;
62
+ }
63
+
64
+
65
+ }// Reflex
@@ -260,25 +260,55 @@ RUCY_DEF0(get_key)
260
260
  CASE(LAUNCH_APP1): SYMBOL1(launch_app1);
261
261
  CASE(LAUNCH_APP2): SYMBOL1(launch_app2);
262
262
 
263
- CASE(GAMEPAD_LEFT): SYMBOL1(gamepad_left);
264
- CASE(GAMEPAD_RIGHT): SYMBOL1(gamepad_right);
265
- CASE(GAMEPAD_UP): SYMBOL1(gamepad_up);
266
- CASE(GAMEPAD_DOWN): SYMBOL1(gamepad_down);
267
- CASE(GAMEPAD_A): SYMBOL1(gamepad_a);
268
- CASE(GAMEPAD_B): SYMBOL1(gamepad_b);
269
- CASE(GAMEPAD_X): SYMBOL1(gamepad_x);
270
- CASE(GAMEPAD_Y): SYMBOL1(gamepad_y);
271
- CASE(GAMEPAD_TRIGGER_LEFT): SYMBOL1(gamepad_trigger_left);
272
- CASE(GAMEPAD_TRIGGER_RIGHT): SYMBOL1(gamepad_trigger_right);
273
- CASE(GAMEPAD_SHOULDER_LEFT): SYMBOL1(gamepad_shoulder_left);
274
- CASE(GAMEPAD_SHOULDER_RIGHT): SYMBOL1(gamepad_shoulder_right);
275
- CASE(GAMEPAD_THUMB_LEFT): SYMBOL1(gamepad_thumb_left);
276
- CASE(GAMEPAD_THUMB_RIGHT): SYMBOL1(gamepad_thumb_right);
277
- CASE(GAMEPAD_HOME): SYMBOL1(gamepad_home);
278
- CASE(GAMEPAD_MENU): SYMBOL1(gamepad_menu);
279
- CASE(GAMEPAD_OPTION): SYMBOL1(gamepad_option);
280
- CASE(GAMEPAD_START): SYMBOL1(gamepad_start);
281
- CASE(GAMEPAD_SELECT): SYMBOL1(gamepad_select);
263
+ CASE(GAMEPAD_LEFT): SYMBOL1(gamepad_left);
264
+ CASE(GAMEPAD_RIGHT): SYMBOL1(gamepad_right);
265
+ CASE(GAMEPAD_UP): SYMBOL1(gamepad_up);
266
+ CASE(GAMEPAD_DOWN): SYMBOL1(gamepad_down);
267
+ CASE(GAMEPAD_LSTICK_LEFT): SYMBOL1(gamepad_lstick_left);
268
+ CASE(GAMEPAD_LSTICK_RIGHT): SYMBOL1(gamepad_lstick_right);
269
+ CASE(GAMEPAD_LSTICK_UP): SYMBOL1(gamepad_lstick_up);
270
+ CASE(GAMEPAD_LSTICK_DOWN): SYMBOL1(gamepad_lstick_down);
271
+ CASE(GAMEPAD_RSTICK_LEFT): SYMBOL1(gamepad_rstick_left);
272
+ CASE(GAMEPAD_RSTICK_RIGHT): SYMBOL1(gamepad_rstick_right);
273
+ CASE(GAMEPAD_RSTICK_UP): SYMBOL1(gamepad_rstick_up);
274
+ CASE(GAMEPAD_RSTICK_DOWN): SYMBOL1(gamepad_rstick_down);
275
+ CASE(GAMEPAD_A): SYMBOL1(gamepad_a);
276
+ CASE(GAMEPAD_B): SYMBOL1(gamepad_b);
277
+ CASE(GAMEPAD_X): SYMBOL1(gamepad_x);
278
+ CASE(GAMEPAD_Y): SYMBOL1(gamepad_y);
279
+ CASE(GAMEPAD_LTRIGGER): SYMBOL1(gamepad_ltrigger);
280
+ CASE(GAMEPAD_RTRIGGER): SYMBOL1(gamepad_rtrigger);
281
+ CASE(GAMEPAD_LSHOULDER): SYMBOL1(gamepad_lshoulder);
282
+ CASE(GAMEPAD_RSHOULDER): SYMBOL1(gamepad_rshoulder);
283
+ CASE(GAMEPAD_LTHUMB): SYMBOL1(gamepad_lthumb);
284
+ CASE(GAMEPAD_RTHUMB): SYMBOL1(gamepad_rthumb);
285
+ CASE(GAMEPAD_LPADDLE_0): SYMBOL1(gamepad_lpaddle_0);
286
+ CASE(GAMEPAD_LPADDLE_1): SYMBOL1(gamepad_lpaddle_1);
287
+ CASE(GAMEPAD_RPADDLE_0): SYMBOL1(gamepad_rpaddle_0);
288
+ CASE(GAMEPAD_RPADDLE_1): SYMBOL1(gamepad_rpaddle_1);
289
+ CASE(GAMEPAD_HOME): SYMBOL1(gamepad_home);
290
+ CASE(GAMEPAD_MENU): SYMBOL1(gamepad_menu);
291
+ CASE(GAMEPAD_OPTION): SYMBOL1(gamepad_option);
292
+ CASE(GAMEPAD_SHARE): SYMBOL1(gamepad_share);
293
+ CASE(GAMEPAD_START): SYMBOL1(gamepad_start);
294
+ CASE(GAMEPAD_SELECT): SYMBOL1(gamepad_select);
295
+ CASE(GAMEPAD_BUTTON_TOUCH): SYMBOL1(gamepad_button_touch);
296
+ CASE(GAMEPAD_BUTTON_0): SYMBOL1(gamepad_button_0);
297
+ CASE(GAMEPAD_BUTTON_1): SYMBOL1(gamepad_button_1);
298
+ CASE(GAMEPAD_BUTTON_2): SYMBOL1(gamepad_button_2);
299
+ CASE(GAMEPAD_BUTTON_3): SYMBOL1(gamepad_button_3);
300
+ CASE(GAMEPAD_BUTTON_4): SYMBOL1(gamepad_button_4);
301
+ CASE(GAMEPAD_BUTTON_5): SYMBOL1(gamepad_button_5);
302
+ CASE(GAMEPAD_BUTTON_6): SYMBOL1(gamepad_button_6);
303
+ CASE(GAMEPAD_BUTTON_7): SYMBOL1(gamepad_button_7);
304
+ CASE(GAMEPAD_BUTTON_8): SYMBOL1(gamepad_button_8);
305
+ CASE(GAMEPAD_BUTTON_9): SYMBOL1(gamepad_button_9);
306
+ CASE(GAMEPAD_BUTTON_10): SYMBOL1(gamepad_button_10);
307
+ CASE(GAMEPAD_BUTTON_11): SYMBOL1(gamepad_button_11);
308
+ CASE(GAMEPAD_BUTTON_12): SYMBOL1(gamepad_button_12);
309
+ CASE(GAMEPAD_BUTTON_13): SYMBOL1(gamepad_button_13);
310
+ CASE(GAMEPAD_BUTTON_14): SYMBOL1(gamepad_button_14);
311
+ CASE(GAMEPAD_BUTTON_15): SYMBOL1(gamepad_button_15);
282
312
 
283
313
  #undef CASE
284
314
  #undef SYMBOL1
@@ -0,0 +1,87 @@
1
+ #include "reflex/ruby/midi.h"
2
+
3
+
4
+ #include <ranges>
5
+ #include "reflex/ruby/device.h"
6
+ #include "defs.h"
7
+
8
+
9
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::MIDI)
10
+
11
+ #define THIS to<Reflex::MIDI*>(self)
12
+
13
+ #define CHECK RUCY_CHECK_OBJECT(Reflex::MIDI, self)
14
+
15
+ #define CALL(fun) RUCY_CALL_SUPER(THIS, fun)
16
+
17
+
18
+ static
19
+ RUCY_DEF_ALLOC(alloc, klass)
20
+ {
21
+ Reflex::reflex_error(__FILE__, __LINE__, "can not instantiate MIDI class.");
22
+ }
23
+ RUCY_END
24
+
25
+ static
26
+ RUCY_DEF1(on_note, event)
27
+ {
28
+ CHECK;
29
+ CALL(on_note(to<Reflex::NoteEvent*>(event)));
30
+ }
31
+ RUCY_END
32
+
33
+ static
34
+ RUCY_DEF1(on_note_on, event)
35
+ {
36
+ CHECK;
37
+ CALL(on_note_on(to<Reflex::NoteEvent*>(event)));
38
+ }
39
+ RUCY_END
40
+
41
+ static
42
+ RUCY_DEF1(on_note_off, event)
43
+ {
44
+ CHECK;
45
+ CALL(on_note_off(to<Reflex::NoteEvent*>(event)));
46
+ }
47
+ RUCY_END
48
+
49
+ static
50
+ RUCY_DEF0(s_get_all)
51
+ {
52
+ auto list = Reflex::MIDI::all() |
53
+ std::views::transform([](auto& ref) {return value(ref);});
54
+ return array(list.begin(), list.end());
55
+ }
56
+ RUCY_END
57
+
58
+
59
+ static Class cMIDI;
60
+
61
+ void
62
+ Init_reflex_midi ()
63
+ {
64
+ Module mReflex = define_module("Reflex");
65
+
66
+ cMIDI = mReflex.define_class("MIDI", Reflex::device_class());
67
+ cMIDI.define_alloc_func(alloc);
68
+ cMIDI.define_method("on_note", on_note);
69
+ cMIDI.define_method("on_note_on", on_note_on);
70
+ cMIDI.define_method("on_note_off", on_note_off);
71
+
72
+ cMIDI.define_singleton_method("all", s_get_all);
73
+ }
74
+
75
+
76
+ namespace Reflex
77
+ {
78
+
79
+
80
+ Class
81
+ midi_class ()
82
+ {
83
+ return cMIDI;
84
+ }
85
+
86
+
87
+ }// Reflex
@@ -4,6 +4,7 @@
4
4
  void Init_reflex ();
5
5
  void Init_reflex_exception ();
6
6
 
7
+ void Init_reflex_pointer ();
7
8
  void Init_reflex_selector ();
8
9
  void Init_reflex_style ();
9
10
  void Init_reflex_style_length ();
@@ -11,19 +12,20 @@ void Init_reflex_timer ();
11
12
  void Init_reflex_filter ();
12
13
 
13
14
  void Init_reflex_event ();
14
- void Init_reflex_motion_event ();
15
+ void Init_reflex_device_event ();
15
16
  void Init_reflex_update_event ();
16
17
  void Init_reflex_draw_event ();
17
18
  void Init_reflex_frame_event ();
18
19
  void Init_reflex_scroll_event ();
19
20
  void Init_reflex_focus_event ();
20
21
  void Init_reflex_key_event ();
21
- void Init_reflex_pointer ();
22
22
  void Init_reflex_pointer_event ();
23
23
  void Init_reflex_wheel_event ();
24
+ void Init_reflex_note_event ();
24
25
  void Init_reflex_capture_event ();
25
26
  void Init_reflex_timer_event ();
26
27
  void Init_reflex_contact_event ();
28
+ void Init_reflex_motion_event ();
27
29
 
28
30
  void Init_reflex_shape ();
29
31
  void Init_reflex_polygon_shape ();
@@ -37,6 +39,7 @@ void Init_reflex_window ();
37
39
  void Init_reflex_view ();
38
40
 
39
41
  void Init_reflex_device ();
42
+ void Init_reflex_midi ();
40
43
 
41
44
  void Init_reflex_image_view ();
42
45
 
@@ -55,6 +58,7 @@ extern "C" void
55
58
  Init_reflex();
56
59
  Init_reflex_exception();
57
60
 
61
+ Init_reflex_pointer();
58
62
  Init_reflex_selector();
59
63
  Init_reflex_style();
60
64
  Init_reflex_style_length();
@@ -62,19 +66,20 @@ extern "C" void
62
66
  Init_reflex_filter();
63
67
 
64
68
  Init_reflex_event();
65
- Init_reflex_motion_event();
69
+ Init_reflex_device_event();
66
70
  Init_reflex_update_event();
67
71
  Init_reflex_draw_event();
68
72
  Init_reflex_frame_event();
69
73
  Init_reflex_scroll_event();
70
74
  Init_reflex_focus_event();
71
75
  Init_reflex_key_event();
72
- Init_reflex_pointer();
73
76
  Init_reflex_pointer_event();
74
77
  Init_reflex_wheel_event();
78
+ Init_reflex_note_event();
75
79
  Init_reflex_capture_event();
76
80
  Init_reflex_timer_event();
77
81
  Init_reflex_contact_event();
82
+ Init_reflex_motion_event();
78
83
 
79
84
  Init_reflex_shape();
80
85
  Init_reflex_polygon_shape();
@@ -88,6 +93,7 @@ extern "C" void
88
93
  Init_reflex_view();
89
94
 
90
95
  Init_reflex_device();
96
+ Init_reflex_midi();
91
97
 
92
98
  Init_reflex_image_view();
93
99
 
@@ -0,0 +1,130 @@
1
+ #include "reflex/ruby/event.h"
2
+
3
+
4
+ #include "defs.h"
5
+
6
+
7
+ RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::NoteEvent)
8
+
9
+ #define THIS to<Reflex::NoteEvent*>(self)
10
+
11
+ #define CHECK RUCY_CHECK_OBJ(Reflex::NoteEvent, self)
12
+
13
+
14
+ static
15
+ RUCY_DEF_ALLOC(alloc, klass)
16
+ {
17
+ return new_type<Reflex::NoteEvent>(klass);
18
+ }
19
+ RUCY_END
20
+
21
+ static
22
+ RUCY_DEF5(initialize, action, channel, note, velocity, time)
23
+ {
24
+ CHECK;
25
+
26
+ *THIS = Reflex::NoteEvent(
27
+ (Reflex::NoteEvent::Action) to<uint>(action),
28
+ to<int>(channel),
29
+ to<int>(note),
30
+ to<float>(velocity),
31
+ to<double>(time));
32
+
33
+ return rb_call_super(0, NULL);
34
+ }
35
+ RUCY_END
36
+
37
+ static
38
+ RUCY_DEF1(initialize_copy, obj)
39
+ {
40
+ CHECK;
41
+ *THIS = to<Reflex::NoteEvent&>(obj).dup();
42
+ return self;
43
+ }
44
+ RUCY_END
45
+
46
+ static
47
+ RUCY_DEF0(get_action)
48
+ {
49
+ CHECK;
50
+ return value(THIS->action());
51
+ }
52
+ RUCY_END
53
+
54
+ static
55
+ RUCY_DEF0(get_channel)
56
+ {
57
+ CHECK;
58
+ return value(THIS->channel());
59
+ }
60
+ RUCY_END
61
+
62
+ static
63
+ RUCY_DEF0(get_note)
64
+ {
65
+ CHECK;
66
+ return value(THIS->note());
67
+ }
68
+ RUCY_END
69
+
70
+ static
71
+ RUCY_DEF0(get_frequency)
72
+ {
73
+ CHECK;
74
+ return value(THIS->frequency());
75
+ }
76
+ RUCY_END
77
+
78
+ static
79
+ RUCY_DEF0(get_velocity)
80
+ {
81
+ CHECK;
82
+ return value(THIS->velocity());
83
+ }
84
+ RUCY_END
85
+
86
+ static
87
+ RUCY_DEF0(is_captured)
88
+ {
89
+ CHECK;
90
+ return value(THIS->is_captured());
91
+ }
92
+ RUCY_END
93
+
94
+
95
+ static Class cNoteEvent;
96
+
97
+ void
98
+ Init_reflex_note_event ()
99
+ {
100
+ Module mReflex = define_module("Reflex");
101
+
102
+ cNoteEvent = mReflex.define_class("NoteEvent", Reflex::event_class());
103
+ cNoteEvent.define_alloc_func(alloc);
104
+ cNoteEvent.define_private_method("initialize", initialize);
105
+ cNoteEvent.define_private_method("initialize_copy", initialize_copy);
106
+ cNoteEvent.define_method("action", get_action);
107
+ cNoteEvent.define_method("channel", get_channel);
108
+ cNoteEvent.define_method("note", get_note);
109
+ cNoteEvent.define_method("frequency", get_frequency);
110
+ cNoteEvent.define_method("velocity", get_velocity);
111
+ cNoteEvent.define_method("captured?", is_captured);
112
+
113
+ cNoteEvent.define_const("ACTION_NONE", Reflex::NoteEvent::ACTION_NONE);
114
+ cNoteEvent.define_const("ON", Reflex::NoteEvent::ON);
115
+ cNoteEvent.define_const("OFF", Reflex::NoteEvent::OFF);
116
+ }
117
+
118
+
119
+ namespace Reflex
120
+ {
121
+
122
+
123
+ Class
124
+ note_event_class ()
125
+ {
126
+ return cNoteEvent;
127
+ }
128
+
129
+
130
+ }// Reflex