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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d6d1b028ab65bd561deb01b032b0fc7ddb1d633f493fecf9c9407bc8321f568
4
- data.tar.gz: 32f3da5338572a0ce044d64e7c8474f73dbb3d99d0813f86aa1ca0194a18e4c3
3
+ metadata.gz: 3520640328cfb50b658b9010aa67ea46133947fe974e2a53652f5279a387629d
4
+ data.tar.gz: 241019eb81187280e520610adbc0626eb3336e2201ed3c6be71026e828e412c7
5
5
  SHA512:
6
- metadata.gz: 6f44899a6ae5eaadd962a62c18c1d1dc1d70c5bdf5f09a71fa68ac829c318853a492e390188e7100391255a53b9f84276028d7038b31a5cd5b4b7b57a38bb715
7
- data.tar.gz: 3dec2aa1ec50884e538b19b46066737cf6cdd3943fba0c4918e388d7be64d75dd4bab0dbd4c7a27989c197428ebcc0e6c093f76697dc1d83ef8ff4385c9b9d9d
6
+ metadata.gz: 5eabad841c91594992c6bd852e53a18aaa53c5d5f0f46e4df2cfcf921f31cf2a82a8509ed9431e148b4e209f25eaf30f3ccc75dd5bedaa12db03ab3cb9d98bf9
7
+ data.tar.gz: a927541d68a6df779112af64db8e5da871ce814638e40a9d9b392f2379e8610fbcae2d54857599d603f119971558d2a3ccf71ede3974bff968477d3d092b819d
@@ -81,6 +81,20 @@ VALUE on_quit(VALUE self, VALUE event)
81
81
  CALL(on_quit(to<Reflex::Event*>(event)));
82
82
  }
83
83
 
84
+ static
85
+ VALUE on_device_connect(VALUE self, VALUE event)
86
+ {
87
+ CHECK;
88
+ CALL(on_device_connect(to<Reflex::DeviceEvent*>(event)));
89
+ }
90
+
91
+ static
92
+ VALUE on_device_disconnect(VALUE self, VALUE event)
93
+ {
94
+ CHECK;
95
+ CALL(on_device_disconnect(to<Reflex::DeviceEvent*>(event)));
96
+ }
97
+
84
98
  static
85
99
  VALUE on_motion(VALUE self, VALUE event)
86
100
  {
@@ -125,6 +139,8 @@ Init_reflex_application ()
125
139
  rb_define_method(cApplication, "each_window", RUBY_METHOD_FUNC(each_window), 0);
126
140
  rb_define_method(cApplication, "on_start", RUBY_METHOD_FUNC(on_start), 1);
127
141
  rb_define_method(cApplication, "on_quit", RUBY_METHOD_FUNC(on_quit), 1);
142
+ rb_define_method(cApplication, "on_device_connect", RUBY_METHOD_FUNC(on_device_connect), 1);
143
+ rb_define_method(cApplication, "on_device_disconnect", RUBY_METHOD_FUNC(on_device_disconnect), 1);
128
144
  rb_define_method(cApplication, "on_motion", RUBY_METHOD_FUNC(on_motion), 1);
129
145
  rb_define_method(cApplication, "on_preference", RUBY_METHOD_FUNC(on_preference), 1);
130
146
  rb_define_method(cApplication, "on_about", RUBY_METHOD_FUNC(on_about), 1);
@@ -1,19 +1,62 @@
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
+ VALUE alloc(VALUE klass)
16
+ {
17
+ Reflex::reflex_error(__FILE__, __LINE__, "can not instantiate Device class.");
18
+ }
19
+
20
+ static
21
+ VALUE name(VALUE self)
22
+ {
23
+ CHECK;
24
+ return value(THIS->name());
25
+ }
26
+
27
+
5
28
  static
6
- VALUE vibrate(VALUE self)
29
+ VALUE s_vibrate(VALUE self)
7
30
  {
8
31
  Reflex::vibrate();
9
32
  return self;
10
33
  }
11
34
 
12
35
 
36
+ static Class cDevice;
37
+
13
38
  void
14
39
  Init_reflex_device ()
15
40
  {
16
41
  Module mReflex = rb_define_module("Reflex");
17
42
 
18
- rb_define_singleton_method(mReflex, "vibrate", RUBY_METHOD_FUNC(vibrate), 0);
43
+ cDevice = mReflex.define_class("Device", Reflex::device_class());
44
+ rb_define_alloc_func(cDevice, alloc);
45
+ rb_define_method(cDevice, "name", RUBY_METHOD_FUNC(name), 0);
46
+
47
+ rb_define_singleton_method(mReflex, "vibrate", RUBY_METHOD_FUNC(s_vibrate), 0);
19
48
  }
49
+
50
+
51
+ namespace Reflex
52
+ {
53
+
54
+
55
+ Class
56
+ device_class ()
57
+ {
58
+ return cDevice;
59
+ }
60
+
61
+
62
+ }// Reflex
@@ -0,0 +1,62 @@
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
+ VALUE alloc(VALUE klass)
17
+ {
18
+ return new_type<Reflex::DeviceEvent>(klass);
19
+ }
20
+
21
+ static
22
+ VALUE initialize_copy(VALUE self, VALUE obj)
23
+ {
24
+ CHECK;
25
+ *THIS = to<Reflex::DeviceEvent&>(obj).dup();
26
+ return self;
27
+ }
28
+
29
+ static
30
+ VALUE get_device(VALUE self)
31
+ {
32
+ CHECK;
33
+ return value(THIS->device());
34
+ }
35
+
36
+
37
+ static Class cDeviceEvent;
38
+
39
+ void
40
+ Init_reflex_device_event ()
41
+ {
42
+ Module mReflex = rb_define_module("Reflex");
43
+
44
+ cDeviceEvent = mReflex.define_class("DeviceEvent", Reflex::event_class());
45
+ rb_define_alloc_func(cDeviceEvent, alloc);
46
+ rb_define_private_method(cDeviceEvent, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
47
+ rb_define_method(cDeviceEvent, "device", RUBY_METHOD_FUNC(get_device), 0);
48
+ }
49
+
50
+
51
+ namespace Reflex
52
+ {
53
+
54
+
55
+ Class
56
+ device_event_class ()
57
+ {
58
+ return cDeviceEvent;
59
+ }
60
+
61
+
62
+ }// Reflex
@@ -256,25 +256,55 @@ VALUE get_key(VALUE self)
256
256
  CASE(LAUNCH_APP1): SYMBOL1(launch_app1);
257
257
  CASE(LAUNCH_APP2): SYMBOL1(launch_app2);
258
258
 
259
- CASE(GAMEPAD_LEFT): SYMBOL1(gamepad_left);
260
- CASE(GAMEPAD_RIGHT): SYMBOL1(gamepad_right);
261
- CASE(GAMEPAD_UP): SYMBOL1(gamepad_up);
262
- CASE(GAMEPAD_DOWN): SYMBOL1(gamepad_down);
263
- CASE(GAMEPAD_A): SYMBOL1(gamepad_a);
264
- CASE(GAMEPAD_B): SYMBOL1(gamepad_b);
265
- CASE(GAMEPAD_X): SYMBOL1(gamepad_x);
266
- CASE(GAMEPAD_Y): SYMBOL1(gamepad_y);
267
- CASE(GAMEPAD_TRIGGER_LEFT): SYMBOL1(gamepad_trigger_left);
268
- CASE(GAMEPAD_TRIGGER_RIGHT): SYMBOL1(gamepad_trigger_right);
269
- CASE(GAMEPAD_SHOULDER_LEFT): SYMBOL1(gamepad_shoulder_left);
270
- CASE(GAMEPAD_SHOULDER_RIGHT): SYMBOL1(gamepad_shoulder_right);
271
- CASE(GAMEPAD_THUMB_LEFT): SYMBOL1(gamepad_thumb_left);
272
- CASE(GAMEPAD_THUMB_RIGHT): SYMBOL1(gamepad_thumb_right);
273
- CASE(GAMEPAD_HOME): SYMBOL1(gamepad_home);
274
- CASE(GAMEPAD_MENU): SYMBOL1(gamepad_menu);
275
- CASE(GAMEPAD_OPTION): SYMBOL1(gamepad_option);
276
- CASE(GAMEPAD_START): SYMBOL1(gamepad_start);
277
- CASE(GAMEPAD_SELECT): SYMBOL1(gamepad_select);
259
+ CASE(GAMEPAD_LEFT): SYMBOL1(gamepad_left);
260
+ CASE(GAMEPAD_RIGHT): SYMBOL1(gamepad_right);
261
+ CASE(GAMEPAD_UP): SYMBOL1(gamepad_up);
262
+ CASE(GAMEPAD_DOWN): SYMBOL1(gamepad_down);
263
+ CASE(GAMEPAD_LSTICK_LEFT): SYMBOL1(gamepad_lstick_left);
264
+ CASE(GAMEPAD_LSTICK_RIGHT): SYMBOL1(gamepad_lstick_right);
265
+ CASE(GAMEPAD_LSTICK_UP): SYMBOL1(gamepad_lstick_up);
266
+ CASE(GAMEPAD_LSTICK_DOWN): SYMBOL1(gamepad_lstick_down);
267
+ CASE(GAMEPAD_RSTICK_LEFT): SYMBOL1(gamepad_rstick_left);
268
+ CASE(GAMEPAD_RSTICK_RIGHT): SYMBOL1(gamepad_rstick_right);
269
+ CASE(GAMEPAD_RSTICK_UP): SYMBOL1(gamepad_rstick_up);
270
+ CASE(GAMEPAD_RSTICK_DOWN): SYMBOL1(gamepad_rstick_down);
271
+ CASE(GAMEPAD_A): SYMBOL1(gamepad_a);
272
+ CASE(GAMEPAD_B): SYMBOL1(gamepad_b);
273
+ CASE(GAMEPAD_X): SYMBOL1(gamepad_x);
274
+ CASE(GAMEPAD_Y): SYMBOL1(gamepad_y);
275
+ CASE(GAMEPAD_LTRIGGER): SYMBOL1(gamepad_ltrigger);
276
+ CASE(GAMEPAD_RTRIGGER): SYMBOL1(gamepad_rtrigger);
277
+ CASE(GAMEPAD_LSHOULDER): SYMBOL1(gamepad_lshoulder);
278
+ CASE(GAMEPAD_RSHOULDER): SYMBOL1(gamepad_rshoulder);
279
+ CASE(GAMEPAD_LTHUMB): SYMBOL1(gamepad_lthumb);
280
+ CASE(GAMEPAD_RTHUMB): SYMBOL1(gamepad_rthumb);
281
+ CASE(GAMEPAD_LPADDLE_0): SYMBOL1(gamepad_lpaddle_0);
282
+ CASE(GAMEPAD_LPADDLE_1): SYMBOL1(gamepad_lpaddle_1);
283
+ CASE(GAMEPAD_RPADDLE_0): SYMBOL1(gamepad_rpaddle_0);
284
+ CASE(GAMEPAD_RPADDLE_1): SYMBOL1(gamepad_rpaddle_1);
285
+ CASE(GAMEPAD_HOME): SYMBOL1(gamepad_home);
286
+ CASE(GAMEPAD_MENU): SYMBOL1(gamepad_menu);
287
+ CASE(GAMEPAD_OPTION): SYMBOL1(gamepad_option);
288
+ CASE(GAMEPAD_SHARE): SYMBOL1(gamepad_share);
289
+ CASE(GAMEPAD_START): SYMBOL1(gamepad_start);
290
+ CASE(GAMEPAD_SELECT): SYMBOL1(gamepad_select);
291
+ CASE(GAMEPAD_BUTTON_TOUCH): SYMBOL1(gamepad_button_touch);
292
+ CASE(GAMEPAD_BUTTON_0): SYMBOL1(gamepad_button_0);
293
+ CASE(GAMEPAD_BUTTON_1): SYMBOL1(gamepad_button_1);
294
+ CASE(GAMEPAD_BUTTON_2): SYMBOL1(gamepad_button_2);
295
+ CASE(GAMEPAD_BUTTON_3): SYMBOL1(gamepad_button_3);
296
+ CASE(GAMEPAD_BUTTON_4): SYMBOL1(gamepad_button_4);
297
+ CASE(GAMEPAD_BUTTON_5): SYMBOL1(gamepad_button_5);
298
+ CASE(GAMEPAD_BUTTON_6): SYMBOL1(gamepad_button_6);
299
+ CASE(GAMEPAD_BUTTON_7): SYMBOL1(gamepad_button_7);
300
+ CASE(GAMEPAD_BUTTON_8): SYMBOL1(gamepad_button_8);
301
+ CASE(GAMEPAD_BUTTON_9): SYMBOL1(gamepad_button_9);
302
+ CASE(GAMEPAD_BUTTON_10): SYMBOL1(gamepad_button_10);
303
+ CASE(GAMEPAD_BUTTON_11): SYMBOL1(gamepad_button_11);
304
+ CASE(GAMEPAD_BUTTON_12): SYMBOL1(gamepad_button_12);
305
+ CASE(GAMEPAD_BUTTON_13): SYMBOL1(gamepad_button_13);
306
+ CASE(GAMEPAD_BUTTON_14): SYMBOL1(gamepad_button_14);
307
+ CASE(GAMEPAD_BUTTON_15): SYMBOL1(gamepad_button_15);
278
308
 
279
309
  #undef CASE
280
310
  #undef SYMBOL1
@@ -0,0 +1,82 @@
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
+ VALUE alloc(VALUE klass)
20
+ {
21
+ Reflex::reflex_error(__FILE__, __LINE__, "can not instantiate MIDI class.");
22
+ }
23
+
24
+ static
25
+ VALUE on_note(VALUE self, VALUE event)
26
+ {
27
+ CHECK;
28
+ CALL(on_note(to<Reflex::NoteEvent*>(event)));
29
+ }
30
+
31
+ static
32
+ VALUE on_note_on(VALUE self, VALUE event)
33
+ {
34
+ CHECK;
35
+ CALL(on_note_on(to<Reflex::NoteEvent*>(event)));
36
+ }
37
+
38
+ static
39
+ VALUE on_note_off(VALUE self, VALUE event)
40
+ {
41
+ CHECK;
42
+ CALL(on_note_off(to<Reflex::NoteEvent*>(event)));
43
+ }
44
+
45
+ static
46
+ VALUE s_get_all(VALUE self)
47
+ {
48
+ auto list = Reflex::MIDI::all() |
49
+ std::views::transform([](auto& ref) {return value(ref);});
50
+ return array(list.begin(), list.end());
51
+ }
52
+
53
+
54
+ static Class cMIDI;
55
+
56
+ void
57
+ Init_reflex_midi ()
58
+ {
59
+ Module mReflex = rb_define_module("Reflex");
60
+
61
+ cMIDI = mReflex.define_class("MIDI", Reflex::device_class());
62
+ rb_define_alloc_func(cMIDI, alloc);
63
+ rb_define_method(cMIDI, "on_note", RUBY_METHOD_FUNC(on_note), 1);
64
+ rb_define_method(cMIDI, "on_note_on", RUBY_METHOD_FUNC(on_note_on), 1);
65
+ rb_define_method(cMIDI, "on_note_off", RUBY_METHOD_FUNC(on_note_off), 1);
66
+
67
+ rb_define_singleton_method(cMIDI, "all", RUBY_METHOD_FUNC(s_get_all), 0);
68
+ }
69
+
70
+
71
+ namespace Reflex
72
+ {
73
+
74
+
75
+ Class
76
+ midi_class ()
77
+ {
78
+ return cMIDI;
79
+ }
80
+
81
+
82
+ }// 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,121 @@
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
+ VALUE alloc(VALUE klass)
16
+ {
17
+ return new_type<Reflex::NoteEvent>(klass);
18
+ }
19
+
20
+ static
21
+ VALUE initialize(VALUE self, VALUE action, VALUE channel, VALUE note, VALUE velocity, VALUE time)
22
+ {
23
+ CHECK;
24
+
25
+ *THIS = Reflex::NoteEvent(
26
+ (Reflex::NoteEvent::Action) to<uint>(action),
27
+ to<int>(channel),
28
+ to<int>(note),
29
+ to<float>(velocity),
30
+ to<double>(time));
31
+
32
+ return rb_call_super(0, NULL);
33
+ }
34
+
35
+ static
36
+ VALUE initialize_copy(VALUE self, VALUE obj)
37
+ {
38
+ CHECK;
39
+ *THIS = to<Reflex::NoteEvent&>(obj).dup();
40
+ return self;
41
+ }
42
+
43
+ static
44
+ VALUE get_action(VALUE self)
45
+ {
46
+ CHECK;
47
+ return value(THIS->action());
48
+ }
49
+
50
+ static
51
+ VALUE get_channel(VALUE self)
52
+ {
53
+ CHECK;
54
+ return value(THIS->channel());
55
+ }
56
+
57
+ static
58
+ VALUE get_note(VALUE self)
59
+ {
60
+ CHECK;
61
+ return value(THIS->note());
62
+ }
63
+
64
+ static
65
+ VALUE get_frequency(VALUE self)
66
+ {
67
+ CHECK;
68
+ return value(THIS->frequency());
69
+ }
70
+
71
+ static
72
+ VALUE get_velocity(VALUE self)
73
+ {
74
+ CHECK;
75
+ return value(THIS->velocity());
76
+ }
77
+
78
+ static
79
+ VALUE is_captured(VALUE self)
80
+ {
81
+ CHECK;
82
+ return value(THIS->is_captured());
83
+ }
84
+
85
+
86
+ static Class cNoteEvent;
87
+
88
+ void
89
+ Init_reflex_note_event ()
90
+ {
91
+ Module mReflex = rb_define_module("Reflex");
92
+
93
+ cNoteEvent = mReflex.define_class("NoteEvent", Reflex::event_class());
94
+ rb_define_alloc_func(cNoteEvent, alloc);
95
+ rb_define_private_method(cNoteEvent, "initialize", RUBY_METHOD_FUNC(initialize), 5);
96
+ rb_define_private_method(cNoteEvent, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
97
+ rb_define_method(cNoteEvent, "action", RUBY_METHOD_FUNC(get_action), 0);
98
+ rb_define_method(cNoteEvent, "channel", RUBY_METHOD_FUNC(get_channel), 0);
99
+ rb_define_method(cNoteEvent, "note", RUBY_METHOD_FUNC(get_note), 0);
100
+ rb_define_method(cNoteEvent, "frequency", RUBY_METHOD_FUNC(get_frequency), 0);
101
+ rb_define_method(cNoteEvent, "velocity", RUBY_METHOD_FUNC(get_velocity), 0);
102
+ cNoteEvent.define_method("captured?", is_captured);
103
+
104
+ cNoteEvent.define_const("ACTION_NONE", Reflex::NoteEvent::ACTION_NONE);
105
+ cNoteEvent.define_const("ON", Reflex::NoteEvent::ON);
106
+ cNoteEvent.define_const("OFF", Reflex::NoteEvent::OFF);
107
+ }
108
+
109
+
110
+ namespace Reflex
111
+ {
112
+
113
+
114
+ Class
115
+ note_event_class ()
116
+ {
117
+ return cNoteEvent;
118
+ }
119
+
120
+
121
+ }// Reflex
@@ -3,21 +3,31 @@
3
3
 
4
4
  #include "reflex/ruby/view.h"
5
5
  #include "reflex/ruby/timer.h"
6
+ #include "reflex/ruby/midi.h"
6
7
  #include "../../src/window.h"
7
8
  #include "../../src/timer.h"
9
+ #include "../../src/midi.h"
8
10
  #include "defs.h"
9
11
 
10
12
 
11
13
  static Reflex::View*
12
14
  create_root_view ()
13
15
  {
14
- return new Reflex::RubyView<Reflex::View>;
16
+ return new Reflex::RubyView<Reflex::View>();
15
17
  }
16
18
 
17
19
  static Reflex::Timer*
18
20
  create_timer ()
19
21
  {
20
- return new Reflex::RubyTimer<Reflex::Timer>;
22
+ return new Reflex::RubyTimer<Reflex::Timer>();
23
+ }
24
+
25
+ static Reflex::MIDI*
26
+ create_midi ()
27
+ {
28
+ Reflex::MIDI* midi = new Reflex::RubyMIDI<Reflex::MIDI>();
29
+ value(midi);// apply MIDI class to ClassWrapper's value
30
+ return midi;
21
31
  }
22
32
 
23
33
 
@@ -27,6 +37,7 @@ VALUE init(VALUE self)
27
37
  Reflex::init();
28
38
  Reflex::Window_set_create_root_view_fun(create_root_view);
29
39
  Reflex::Timer_set_create_fun(create_timer);
40
+ Reflex::MIDI_set_create_fun(create_midi);
30
41
 
31
42
  return self;
32
43
  }
@@ -36,11 +47,20 @@ VALUE fin(VALUE self)
36
47
  {
37
48
  Reflex::Window_set_create_root_view_fun(NULL);
38
49
  Reflex::Timer_set_create_fun(NULL);
50
+ Reflex::MIDI_set_create_fun(NULL);
39
51
  Reflex::fin();
40
52
 
41
53
  return self;
42
54
  }
43
55
 
56
+ static
57
+ VALUE process_events(VALUE self)
58
+ {
59
+ Reflex::process_events();
60
+
61
+ return self;
62
+ }
63
+
44
64
 
45
65
  static Module mReflex;
46
66
 
@@ -50,6 +70,7 @@ Init_reflex ()
50
70
  mReflex = rb_define_module("Reflex");
51
71
  mReflex.define_singleton_method("init!", init);
52
72
  mReflex.define_singleton_method("fin!", fin);
73
+ mReflex.define_singleton_method("process_events!", process_events);
53
74
 
54
75
  using namespace Reflex;
55
76
 
@@ -259,16 +280,17 @@ Init_reflex ()
259
280
  DEFINE_CONST(KEY_GAMEPAD_X);
260
281
  DEFINE_CONST(KEY_GAMEPAD_Y);
261
282
 
262
- DEFINE_CONST(KEY_GAMEPAD_SHOULDER_LEFT);
263
- DEFINE_CONST(KEY_GAMEPAD_SHOULDER_RIGHT);
264
- DEFINE_CONST(KEY_GAMEPAD_TRIGGER_LEFT);
265
- DEFINE_CONST(KEY_GAMEPAD_TRIGGER_RIGHT);
266
- DEFINE_CONST(KEY_GAMEPAD_THUMB_LEFT);
267
- DEFINE_CONST(KEY_GAMEPAD_THUMB_RIGHT);
283
+ DEFINE_CONST(KEY_GAMEPAD_LSHOULDER);
284
+ DEFINE_CONST(KEY_GAMEPAD_RSHOULDER);
285
+ DEFINE_CONST(KEY_GAMEPAD_LTRIGGER);
286
+ DEFINE_CONST(KEY_GAMEPAD_RTRIGGER);
287
+ DEFINE_CONST(KEY_GAMEPAD_LTHUMB);
288
+ DEFINE_CONST(KEY_GAMEPAD_RTHUMB);
268
289
 
269
290
  DEFINE_CONST(KEY_GAMEPAD_HOME);
270
291
  DEFINE_CONST(KEY_GAMEPAD_MENU);
271
292
  DEFINE_CONST(KEY_GAMEPAD_OPTION);
293
+ DEFINE_CONST(KEY_GAMEPAD_SHARE);
272
294
  DEFINE_CONST(KEY_GAMEPAD_START);
273
295
  DEFINE_CONST(KEY_GAMEPAD_SELECT);
274
296
 
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  #include <vector>
5
+ #include <ranges>
5
6
  #include <rays/ruby/point.h>
6
7
  #include <rays/ruby/bounds.h>
7
8
  #include <rays/ruby/polygon.h>
@@ -25,16 +26,6 @@ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::View)
25
26
  #define CALL(fun) RUCY_CALL_SUPER(THIS, fun)
26
27
 
27
28
 
28
- template <typename T>
29
- static inline Value
30
- array (T begin, T end)
31
- {
32
- std::vector<Value> v;
33
- for (T it = begin; it != end; ++it) v.push_back(value(*it));
34
- return array(&v[0], v.size());
35
- }
36
-
37
-
38
29
  static
39
30
  VALUE alloc(VALUE klass)
40
31
  {
@@ -194,8 +185,9 @@ VALUE find_children(VALUE self)
194
185
 
195
186
  bool recursive = (argc >= 2) ? to<bool>(argv[1]) : true;
196
187
 
197
- Reflex::View::ChildList children =
198
- THIS->find_children(to<Reflex::Selector>(argv[0]), recursive);
188
+ auto children =
189
+ THIS->find_children(to<Reflex::Selector>(argv[0]), recursive) |
190
+ std::views::transform([](auto& ref) {return value(ref);});
199
191
  return array(children.begin(), children.end());
200
192
  }
201
193
 
@@ -249,8 +241,9 @@ VALUE find_styles(VALUE self)
249
241
 
250
242
  bool recursive = (argc >= 2) ? to<bool>(argv[1]) : false;
251
243
 
252
- Reflex::View::StyleList styles =
253
- THIS->find_styles(to<Reflex::Selector>(argv[0]), recursive);
244
+ auto styles =
245
+ THIS->find_styles(to<Reflex::Selector>(argv[0]), recursive) |
246
+ std::views::transform([](auto& ref) {return value(ref);});
254
247
  return array(styles.begin(), styles.end());
255
248
  }
256
249
 
@@ -327,8 +320,9 @@ VALUE find_shapes(VALUE self)
327
320
  CHECK;
328
321
  check_arg_count(__FILE__, __LINE__, "View#find_shapes", argc, 1);
329
322
 
330
- Reflex::View::ShapeList shapes =
331
- THIS->find_shapes(to<Reflex::Selector>(argv[0]));
323
+ auto shapes =
324
+ THIS->find_shapes(to<Reflex::Selector>(argv[0])) |
325
+ std::views::transform([](auto& ref) {return value(ref);});
332
326
  return array(shapes.begin(), shapes.end());
333
327
  }
334
328
 
@@ -1231,6 +1225,7 @@ Init_reflex_view ()
1231
1225
  cView.define_const("CAPTURE_NONE", Reflex::View::CAPTURE_NONE);
1232
1226
  cView.define_const("CAPTURE_KEY", Reflex::View::CAPTURE_KEY);
1233
1227
  cView.define_const("CAPTURE_POINTER", Reflex::View::CAPTURE_POINTER);
1228
+ cView.define_const("CAPTURE_NOTE", Reflex::View::CAPTURE_NOTE);
1234
1229
  cView.define_const("CAPTURE_ALL", Reflex::View::CAPTURE_ALL);
1235
1230
 
1236
1231
  define_selector_methods<Reflex::View>(cView);