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
data/src/view.cpp CHANGED
@@ -1373,6 +1373,7 @@ namespace Reflex
1373
1373
 
1374
1374
  KeyEvent e = event->dup();
1375
1375
  view->on_key(&e);
1376
+ if (e.is_blocked()) return;
1376
1377
 
1377
1378
  switch (e.action())
1378
1379
  {
@@ -1413,6 +1414,7 @@ namespace Reflex
1413
1414
  view->self->pbody->awake();
1414
1415
 
1415
1416
  view->on_pointer(event);
1417
+ if (event->is_blocked()) return;
1416
1418
 
1417
1419
  switch ((*event)[0].action())
1418
1420
  {
@@ -1506,6 +1508,28 @@ namespace Reflex
1506
1508
  view->on_wheel(&e);
1507
1509
  }
1508
1510
 
1511
+ void
1512
+ View_call_note_event (View* view, NoteEvent* event)
1513
+ {
1514
+ if (!view)
1515
+ argument_error(__FILE__, __LINE__);
1516
+ if (!event)
1517
+ argument_error(__FILE__, __LINE__);
1518
+
1519
+ if (view->hidden()) return;
1520
+
1521
+ NoteEvent e = event->dup();
1522
+ view->on_note(&e);
1523
+ if (e.is_blocked()) return;
1524
+
1525
+ switch (e.action())
1526
+ {
1527
+ case NoteEvent::ON: view->on_note_on(&e); break;
1528
+ case NoteEvent::OFF: view->on_note_off(&e); break;
1529
+ default: break;
1530
+ }
1531
+ }
1532
+
1509
1533
  void
1510
1534
  View_call_contact_event (View* view, ContactEvent* event)
1511
1535
  {
@@ -2781,6 +2805,21 @@ namespace Reflex
2781
2805
  //scroll_by(e->dx, e->dy, e->dz);
2782
2806
  }
2783
2807
 
2808
+ void
2809
+ View::on_note (NoteEvent* e)
2810
+ {
2811
+ }
2812
+
2813
+ void
2814
+ View::on_note_on (NoteEvent* e)
2815
+ {
2816
+ }
2817
+
2818
+ void
2819
+ View::on_note_off (NoteEvent* e)
2820
+ {
2821
+ }
2822
+
2784
2823
  void
2785
2824
  View::on_capture (CaptureEvent* e)
2786
2825
  {
data/src/view.h CHANGED
@@ -42,6 +42,8 @@ namespace Reflex
42
42
 
43
43
  void View_call_wheel_event (View* view, WheelEvent* event);
44
44
 
45
+ void View_call_note_event (View* view, NoteEvent* event);
46
+
45
47
  void View_call_contact_event (View* view, ContactEvent* event);
46
48
 
47
49
 
@@ -42,7 +42,7 @@ namespace Reflex
42
42
  Application::start ()
43
43
  {
44
44
  Event e;
45
- on_start(&e);
45
+ Application_call_start(this, &e);
46
46
 
47
47
  timeBeginPeriod(1);
48
48
 
@@ -84,27 +84,11 @@ namespace Reflex
84
84
  void
85
85
  Application::quit ()
86
86
  {
87
- PostQuitMessage(0);
88
- }
89
-
90
- void
91
- Application::on_start (Event* e)
92
- {
93
- }
94
-
95
- void
96
- Application::on_quit (Event* e)
97
- {
98
- }
99
-
100
- void
101
- Application::on_motion (MotionEvent* e)
102
- {
103
- }
87
+ Event e;
88
+ Application_call_quit(this, &e);
89
+ if (e.is_blocked()) return;
104
90
 
105
- void
106
- Application::on_preference (Event* e)
107
- {
91
+ PostQuitMessage(0);
108
92
  }
109
93
 
110
94
  void
@@ -112,10 +96,5 @@ namespace Reflex
112
96
  {
113
97
  }
114
98
 
115
- Application::operator bool () const
116
- {
117
- return true;
118
- }
119
-
120
99
 
121
100
  }// Reflex
data/src/win32/event.cpp CHANGED
@@ -1,7 +1,6 @@
1
1
  #include "event.h"
2
2
 
3
3
 
4
- #include <xinput.h>
5
4
  #include <xot/time.h>
6
5
  #include "reflex/exception.h"
7
6
  #include "reflex/debug.h"
@@ -12,8 +11,8 @@ namespace Reflex
12
11
  {
13
12
 
14
13
 
15
- static uint
16
- get_modifiers ()
14
+ uint
15
+ KeyEvent_get_modifiers ()
17
16
  {
18
17
  return
19
18
  (GetKeyState(VK_SHIFT) & 0x8000 ? MOD_SHIFT : 0) |
@@ -38,7 +37,7 @@ namespace Reflex
38
37
  }
39
38
 
40
39
  NativeKeyEvent::NativeKeyEvent (UINT msg, WPARAM wp, LPARAM lp, const char* chars)
41
- : KeyEvent(get_key_action(msg), chars, (int) wp, get_modifiers(), lp & 0xFF)
40
+ : KeyEvent(get_key_action(msg), chars, (int) wp, KeyEvent_get_modifiers(), lp & 0xFF)
42
41
  {
43
42
  }
44
43
 
@@ -136,7 +135,7 @@ namespace Reflex
136
135
  get_mouse_type(msg, wp),
137
136
  get_mouse_action(msg),
138
137
  Point(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)),
139
- get_modifiers(),
138
+ KeyEvent_get_modifiers(),
140
139
  get_mouse_click_count(msg),
141
140
  is_mouse_dragging(msg, wp),
142
141
  Xot::time()));
@@ -197,7 +196,7 @@ namespace Reflex
197
196
  get_touch_type(touch),
198
197
  action,
199
198
  get_touch_position(hwnd, touch),
200
- get_modifiers(),
199
+ KeyEvent_get_modifiers(),
201
200
  action == Pointer::DOWN ? 1 : 0,
202
201
  action == Pointer::MOVE,
203
202
  get_touch_time(touch));
@@ -213,90 +212,8 @@ namespace Reflex
213
212
  : WheelEvent(
214
213
  GET_X_LPARAM(lp), GET_Y_LPARAM(lp), 0,
215
214
  GET_WHEEL_DELTA_WPARAM(wp_x), -GET_WHEEL_DELTA_WPARAM(wp_y), 0,
216
- get_modifiers())
217
- {
218
- }
219
-
220
-
221
- static void
222
- call_gamepad_event (Window* win, int code, bool pressed)
223
- {
224
- auto action = pressed ? KeyEvent::DOWN : KeyEvent::UP;
225
- KeyEvent e(action, NULL, code, get_modifiers(), 0);
226
- Window_call_key_event(win, &e);
227
- }
228
-
229
- static void
230
- handle_gamepad_button_event (
231
- Window* win, const XINPUT_STATE& state, const XINPUT_STATE& prev_state,
232
- WORD mask, int code)
233
- {
234
- WORD pressed = state.Gamepad.wButtons & mask;
235
- WORD prev = prev_state.Gamepad.wButtons & mask;
236
- if (pressed == prev) return;
237
-
238
- call_gamepad_event(win, code, pressed);
239
- }
240
-
241
- static void
242
- handle_gamepad_trigger_event (Window* win, BYTE value, BYTE prev_value, int code)
243
- {
244
- WORD pressed = value > XINPUT_GAMEPAD_TRIGGER_THRESHOLD;
245
- WORD prev = prev_value > XINPUT_GAMEPAD_TRIGGER_THRESHOLD;
246
- if (pressed == prev) return;
247
-
248
- call_gamepad_event(win, code, pressed);
249
- }
250
-
251
- static void
252
- handle_gamepad_events (const XINPUT_STATE& state, const XINPUT_STATE& prev_state)
215
+ KeyEvent_get_modifiers())
253
216
  {
254
- Window* win = Window_get_active();
255
- if (!win) return;
256
-
257
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_DPAD_LEFT, KEY_GAMEPAD_LEFT);
258
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_DPAD_RIGHT, KEY_GAMEPAD_RIGHT);
259
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_DPAD_UP, KEY_GAMEPAD_UP);
260
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_DPAD_DOWN, KEY_GAMEPAD_DOWN);
261
-
262
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_A, KEY_GAMEPAD_A);
263
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_B, KEY_GAMEPAD_B);
264
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_X, KEY_GAMEPAD_X);
265
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_Y, KEY_GAMEPAD_Y);
266
-
267
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_LEFT_SHOULDER, KEY_GAMEPAD_SHOULDER_LEFT);
268
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_RIGHT_SHOULDER, KEY_GAMEPAD_SHOULDER_RIGHT);
269
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_LEFT_THUMB, KEY_GAMEPAD_THUMB_LEFT);
270
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_RIGHT_THUMB, KEY_GAMEPAD_THUMB_RIGHT);
271
-
272
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_START, KEY_GAMEPAD_START);
273
- handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_BACK, KEY_GAMEPAD_SELECT);
274
-
275
- handle_gamepad_trigger_event(win, state.Gamepad.bLeftTrigger, prev_state.Gamepad.bLeftTrigger, KEY_GAMEPAD_TRIGGER_LEFT);
276
- handle_gamepad_trigger_event(win, state.Gamepad.bRightTrigger, prev_state.Gamepad.bRightTrigger, KEY_GAMEPAD_TRIGGER_RIGHT);
277
- }
278
-
279
- void
280
- poll_gamepads ()
281
- {
282
- static XINPUT_STATE prev_state;
283
- static bool prev_detected = false;
284
-
285
- XINPUT_STATE state = {0};
286
- bool detected = XInputGetState(0, &state) == ERROR_SUCCESS;
287
-
288
- if (detected != prev_detected)
289
- {
290
- prev_detected = detected;
291
- if (detected) prev_state = {0};
292
- }
293
-
294
- if (!detected) return;
295
-
296
- if (state.dwPacketNumber != prev_state.dwPacketNumber)
297
- handle_gamepad_events(state, prev_state);
298
-
299
- prev_state = state;
300
217
  }
301
218
 
302
219
 
data/src/win32/event.h CHANGED
@@ -44,7 +44,7 @@ namespace Reflex
44
44
  };// NativeWheelEvent
45
45
 
46
46
 
47
- void poll_gamepads ();
47
+ void Gamepad_poll ();
48
48
 
49
49
 
50
50
  }// Reflex
@@ -0,0 +1,110 @@
1
+ #include "gamepad.h"
2
+
3
+
4
+ #include <xot/windows.h>
5
+ #include <xinput.h>
6
+
7
+ #include "reflex/exception.h"
8
+ #include "reflex/debug.h"
9
+ #include "window.h"
10
+ #include "event.h"
11
+
12
+
13
+ namespace Reflex
14
+ {
15
+
16
+
17
+ static void
18
+ call_gamepad_event (Window* win, int code, bool pressed)
19
+ {
20
+ auto action = pressed ? KeyEvent::DOWN : KeyEvent::UP;
21
+ KeyEvent e(action, NULL, code, KeyEvent_get_modifiers(), 0);
22
+ Window_call_key_event(win, &e);
23
+ }
24
+
25
+ static void
26
+ handle_gamepad_button_event (
27
+ Window* win, const XINPUT_STATE& state, const XINPUT_STATE& prev_state,
28
+ WORD mask, int code)
29
+ {
30
+ WORD pressed = state.Gamepad.wButtons & mask;
31
+ WORD prev = prev_state.Gamepad.wButtons & mask;
32
+ if (pressed == prev) return;
33
+
34
+ call_gamepad_event(win, code, pressed);
35
+ }
36
+
37
+ static void
38
+ handle_gamepad_trigger_event (Window* win, BYTE value, BYTE prev_value, int code)
39
+ {
40
+ WORD pressed = value > XINPUT_GAMEPAD_TRIGGER_THRESHOLD;
41
+ WORD prev = prev_value > XINPUT_GAMEPAD_TRIGGER_THRESHOLD;
42
+ if (pressed == prev) return;
43
+
44
+ call_gamepad_event(win, code, pressed);
45
+ }
46
+
47
+ static void
48
+ handle_gamepad_events (const XINPUT_STATE& state, const XINPUT_STATE& prev_state)
49
+ {
50
+ Window* win = Window_get_active();
51
+ if (!win) return;
52
+
53
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_DPAD_LEFT, KEY_GAMEPAD_LEFT);
54
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_DPAD_RIGHT, KEY_GAMEPAD_RIGHT);
55
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_DPAD_UP, KEY_GAMEPAD_UP);
56
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_DPAD_DOWN, KEY_GAMEPAD_DOWN);
57
+
58
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_A, KEY_GAMEPAD_A);
59
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_B, KEY_GAMEPAD_B);
60
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_X, KEY_GAMEPAD_X);
61
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_Y, KEY_GAMEPAD_Y);
62
+
63
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_LEFT_SHOULDER, KEY_GAMEPAD_LSHOULDER);
64
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_RIGHT_SHOULDER, KEY_GAMEPAD_RSHOULDER);
65
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_LEFT_THUMB, KEY_GAMEPAD_LTHUMB);
66
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_RIGHT_THUMB, KEY_GAMEPAD_RTHUMB);
67
+
68
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_START, KEY_GAMEPAD_START);
69
+ handle_gamepad_button_event(win, state, prev_state, XINPUT_GAMEPAD_BACK, KEY_GAMEPAD_SELECT);
70
+
71
+ handle_gamepad_trigger_event(win, state.Gamepad.bLeftTrigger, prev_state.Gamepad.bLeftTrigger, KEY_GAMEPAD_LTRIGGER);
72
+ handle_gamepad_trigger_event(win, state.Gamepad.bRightTrigger, prev_state.Gamepad.bRightTrigger, KEY_GAMEPAD_RTRIGGER);
73
+ }
74
+
75
+ void
76
+ Gamepad_init (Application* app)
77
+ {
78
+ }
79
+
80
+ void
81
+ Gamepad_fin (Application* app)
82
+ {
83
+ Gamepad_remove_all(app);
84
+ }
85
+
86
+ void
87
+ Gamepad_poll ()
88
+ {
89
+ static XINPUT_STATE prev_state;
90
+ static bool prev_detected = false;
91
+
92
+ XINPUT_STATE state = {0};
93
+ bool detected = XInputGetState(0, &state) == ERROR_SUCCESS;
94
+
95
+ if (detected != prev_detected)
96
+ {
97
+ prev_detected = detected;
98
+ if (detected) prev_state = {0};
99
+ }
100
+
101
+ if (!detected) return;
102
+
103
+ if (state.dwPacketNumber != prev_state.dwPacketNumber)
104
+ handle_gamepad_events(state, prev_state);
105
+
106
+ prev_state = state;
107
+ }
108
+
109
+
110
+ }// Reflex
@@ -0,0 +1,20 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __REFLEX_SRC_WIN32_GAMEPAD_H__
4
+ #define __REFLEX_SRC_WIN32_GAMEPAD_H__
5
+
6
+
7
+ #include "../gamepad.h"
8
+
9
+
10
+ namespace Reflex
11
+ {
12
+
13
+
14
+ void Gamepad_poll ();
15
+
16
+
17
+ }// Reflex
18
+
19
+
20
+ #endif//EOH
data/src/win32/window.cpp CHANGED
@@ -12,6 +12,7 @@
12
12
  #include "reflex/debug.h"
13
13
  #include "../view.h"
14
14
  #include "event.h"
15
+ #include "gamepad.h"
15
16
  #include "screen.h"
16
17
  #include "opengl.h"
17
18
 
@@ -154,7 +155,7 @@ namespace Reflex
154
155
  {
155
156
  WindowData* self = get_data(win);
156
157
 
157
- poll_gamepads();
158
+ Gamepad_poll();
158
159
 
159
160
  Window_call_update_event(win);
160
161
 
data/src/window.cpp CHANGED
@@ -103,25 +103,18 @@ namespace Reflex
103
103
  }
104
104
  }
105
105
 
106
- namespace global
107
- {
108
-
109
- static Window_CreateRootViewFun create_root_view_fun = NULL;
110
-
111
- }// global
106
+ static Window_CreateRootViewFun create_root_view_fun = NULL;
112
107
 
113
108
  void
114
109
  Window_set_create_root_view_fun (Window_CreateRootViewFun fun)
115
110
  {
116
- global::create_root_view_fun = fun;
111
+ create_root_view_fun = fun;
117
112
  }
118
113
 
119
114
  static View*
120
115
  create_root_view ()
121
116
  {
122
- return global::create_root_view_fun
123
- ? global::create_root_view_fun()
124
- : new View();
117
+ return create_root_view_fun ? create_root_view_fun() : new View();
125
118
  }
126
119
 
127
120
  void
@@ -614,6 +607,49 @@ namespace Reflex
614
607
  View_call_wheel_event(window->root(), event);
615
608
  }
616
609
 
610
+ void
611
+ Window_call_note_event (Window* window, NoteEvent* event)
612
+ {
613
+ assert(window);
614
+
615
+ if (!event)
616
+ argument_error(__FILE__, __LINE__);
617
+
618
+ for (auto& [view, targets] : window->self->captures)
619
+ {
620
+ if (
621
+ !view->window() ||
622
+ !is_capturing(view.get(), targets, View::CAPTURE_NOTE))
623
+ {
624
+ continue;
625
+ }
626
+
627
+ NoteEvent e = event->dup();
628
+ NoteEvent_set_captured(&e, true);
629
+ View_call_note_event(const_cast<View*>(view.get()), &e);
630
+
631
+ if (e.is_blocked()) event->block();
632
+ }
633
+
634
+ if (!event->is_blocked())
635
+ window->on_note(event);
636
+
637
+ if (!event->is_blocked())
638
+ {
639
+ switch (event->action())
640
+ {
641
+ case NoteEvent::ON: window->on_note_on(event); break;
642
+ case NoteEvent::OFF: window->on_note_off(event); break;
643
+ default: break;
644
+ }
645
+ }
646
+
647
+ if (!event->is_blocked() && window->self->focus)
648
+ View_call_note_event(window->self->focus.get(), event);
649
+
650
+ cleanup_captures(window);
651
+ }
652
+
617
653
 
618
654
  Window::Window ()
619
655
  : self(Window_create_data())
@@ -905,6 +941,21 @@ namespace Reflex
905
941
  {
906
942
  }
907
943
 
944
+ void
945
+ Window::on_note (NoteEvent* e)
946
+ {
947
+ }
948
+
949
+ void
950
+ Window::on_note_on (NoteEvent* e)
951
+ {
952
+ }
953
+
954
+ void
955
+ Window::on_note_off (NoteEvent* e)
956
+ {
957
+ }
958
+
908
959
  Window::operator bool () const
909
960
  {
910
961
  return self && *self;
data/src/window.h CHANGED
@@ -139,6 +139,8 @@ namespace Reflex
139
139
 
140
140
  void Window_call_wheel_event (Window* window, WheelEvent* event);
141
141
 
142
+ void Window_call_note_event (Window* window, NoteEvent* event);
143
+
142
144
 
143
145
  typedef View* (*Window_CreateRootViewFun) ();
144
146
 
@@ -26,31 +26,35 @@ class TestCaptureEvent < Test::Unit::TestCase
26
26
  end
27
27
 
28
28
  def test_begin()
29
- c = event [:key, :pointer], []
30
- assert_equal [:key, :pointer], c.begin
31
- assert_equal true, c.begin?(:key)
32
- assert_equal true, c.begin?(:pointer)
33
- assert_equal true, c.begin?(:all)
29
+ c = event [:key, :pointer, :note], []
30
+ assert_equal [:key, :pointer, :note], c.begin
31
+ assert_equal true, c.begin?(:key)
32
+ assert_equal true, c.begin?(:pointer)
33
+ assert_equal true, c.begin?(:note)
34
+ assert_equal true, c.begin?(:all)
34
35
 
35
36
  c = event [:key], []
36
37
  assert_equal [:key], c.begin
37
- assert_equal true, c.begin?(:key)
38
- assert_equal false, c.begin?(:pointer)
39
- assert_equal false, c.begin?(:all)
38
+ assert_equal true, c.begin?(:key)
39
+ assert_equal false, c.begin?(:pointer)
40
+ assert_equal false, c.begin?(:note)
41
+ assert_equal false, c.begin?(:all)
40
42
  end
41
43
 
42
44
  def test_end()
43
- c = event [], [:key, :pointer]
44
- assert_equal [:key, :pointer], c.end
45
- assert_equal true, c.end?(:key)
46
- assert_equal true, c.end?(:pointer)
47
- assert_equal true, c.end?(:all)
45
+ c = event [], [:key, :pointer, :note]
46
+ assert_equal [:key, :pointer, :note], c.end
47
+ assert_equal true, c.end?(:key)
48
+ assert_equal true, c.end?(:pointer)
49
+ assert_equal true, c.end?(:note)
50
+ assert_equal true, c.end?(:all)
48
51
 
49
52
  c = event [], [:key]
50
53
  assert_equal [:key], c.end
51
- assert_equal true, c.end?(:key)
52
- assert_equal false, c.end?(:pointer)
53
- assert_equal false, c.end?(:all)
54
+ assert_equal true, c.end?(:key)
55
+ assert_equal false, c.end?(:pointer)
56
+ assert_equal false, c.end?(:note)
57
+ assert_equal false, c.end?(:all)
54
58
  end
55
59
 
56
60
  end# TestCaptureEvent
@@ -3,7 +3,7 @@ require_relative 'helper'
3
3
 
4
4
  class TestKeyEvent < Test::Unit::TestCase
5
5
 
6
- DOWN = Reflex::KeyEvent::DOWN
6
+ DOWN, UP = Reflex::KeyEvent::DOWN, Reflex::KeyEvent::UP
7
7
 
8
8
  def event(*args)
9
9
  Reflex::KeyEvent.new(*args)
@@ -29,6 +29,13 @@ class TestKeyEvent < Test::Unit::TestCase
29
29
  assert_true e3.blocked?
30
30
  end
31
31
 
32
+ def test_down_up()
33
+ assert_true event(DOWN, 'a', 1, 2, 3).down?
34
+ assert_false event(DOWN, 'a', 1, 2, 3).up?
35
+ assert_false event(UP, 'a', 1, 2, 3).down?
36
+ assert_true event(UP, 'a', 1, 2, 3).up?
37
+ end
38
+
32
39
  def test_chars()
33
40
  assert_equal 'foo', event(DOWN, 'foo', 1, 2, 3).chars
34
41
 
@@ -0,0 +1,43 @@
1
+ require_relative 'helper'
2
+
3
+
4
+ class TestNoteEvent < Test::Unit::TestCase
5
+
6
+ ON, OFF = Reflex::NoteEvent::ON, Reflex::NoteEvent::OFF
7
+
8
+ def event(*args)
9
+ Reflex::NoteEvent.new(*args)
10
+ end
11
+
12
+ def test_initialize()
13
+ e = event ON, 1, 2, 0.5, 3
14
+ assert_equal :on, e.action
15
+ assert_equal 1, e.channel
16
+ assert_equal 2, e.note
17
+ assert_equal 0.5, e.velocity
18
+ assert_equal 3, e.time
19
+ assert_false e.captured?
20
+ end
21
+
22
+ def test_dup()
23
+ e1 = event ON, 1, 2, 0.5, 3
24
+ e2 = e1.dup
25
+ e1.block
26
+ e3 = e1.dup
27
+ assert_true e1.blocked?
28
+ assert_false e2.blocked?
29
+ assert_true e3.blocked?
30
+ end
31
+
32
+ def test_on_off()
33
+ assert_true event(ON, 1, 2, 0.5, 3).on?
34
+ assert_false event(ON, 1, 2, 0.5, 3).off?
35
+ assert_false event(OFF, 1, 2, 0.5, 3).on?
36
+ assert_true event(OFF, 1, 2, 0.5, 3).off?
37
+ end
38
+
39
+ def test_frequency()
40
+ assert_equal 440, event(ON, 1, 69, 0.5, 3).frequency
41
+ end
42
+
43
+ end# TestNoteEvent