reflexion 0.3.5 → 0.3.6

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 (51) 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/native.cpp +6 -4
  7. data/.doc/ext/reflex/reflex.cpp +7 -6
  8. data/ChangeLog.md +8 -0
  9. data/VERSION +1 -1
  10. data/ext/reflex/application.cpp +18 -0
  11. data/ext/reflex/device.cpp +48 -3
  12. data/ext/reflex/device_event.cpp +65 -0
  13. data/ext/reflex/key_event.cpp +49 -19
  14. data/ext/reflex/native.cpp +6 -4
  15. data/ext/reflex/reflex.cpp +7 -6
  16. data/include/reflex/application.h +4 -0
  17. data/include/reflex/defs.h +58 -21
  18. data/include/reflex/device.h +22 -0
  19. data/include/reflex/event.h +25 -0
  20. data/include/reflex/gamepad.h +175 -0
  21. data/include/reflex/ruby/application.h +18 -0
  22. data/include/reflex/ruby/device.h +40 -0
  23. data/include/reflex/ruby/event.h +11 -0
  24. data/reflex.gemspec +3 -3
  25. data/src/application.cpp +67 -0
  26. data/src/application.h +9 -0
  27. data/src/device.cpp +24 -0
  28. data/src/event.cpp +38 -0
  29. data/src/gamepad.cpp +176 -0
  30. data/src/gamepad.h +74 -0
  31. data/src/ios/app_delegate.mm +2 -2
  32. data/src/ios/application.mm +0 -25
  33. data/src/ios/event.h +0 -5
  34. data/src/ios/event.mm +1 -85
  35. data/src/ios/gamepad.mm +313 -0
  36. data/src/ios/reflex.mm +0 -5
  37. data/src/osx/app_delegate.mm +2 -2
  38. data/src/osx/application.mm +0 -25
  39. data/src/osx/event.h +1 -3
  40. data/src/osx/event.mm +9 -86
  41. data/src/osx/gamepad.mm +40 -0
  42. data/src/osx/gamepad_gc.mm +299 -0
  43. data/src/osx/gamepad_hid.mm +567 -0
  44. data/src/osx/reflex.mm +0 -5
  45. data/src/win32/application.cpp +5 -26
  46. data/src/win32/event.cpp +6 -89
  47. data/src/win32/event.h +3 -1
  48. data/src/win32/gamepad.cpp +110 -0
  49. data/src/win32/gamepad.h +20 -0
  50. data/src/win32/window.cpp +2 -1
  51. metadata +28 -14
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
+ get_key_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, get_key_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
+ get_key_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
+ get_key_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
+ get_key_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,9 @@ namespace Reflex
44
44
  };// NativeWheelEvent
45
45
 
46
46
 
47
- void poll_gamepads ();
47
+ uint get_key_modifiers ();
48
+
49
+ void Gamepad_poll ();
48
50
 
49
51
 
50
52
  }// 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, get_key_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
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reflexion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - xordog
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-23 00:00:00.000000000 Z
11
+ date: 2025-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xot
@@ -16,60 +16,60 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.5
19
+ version: 0.3.6
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.3.5
22
+ version: 0.3.6
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 0.3.5
29
+ version: 0.3.6
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.3.5
32
+ version: 0.3.6
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rucy
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.3.5
39
+ version: 0.3.6
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 0.3.5
42
+ version: 0.3.6
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: 0.3.5
49
+ version: 0.3.6
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 0.3.5
52
+ version: 0.3.6
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: rays
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: 0.3.5
59
+ version: 0.3.6
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 0.3.5
62
+ version: 0.3.6
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 0.3.5
69
+ version: 0.3.6
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 0.3.5
72
+ version: 0.3.6
73
73
  description: This library helps you to develop interactive graphical user interface.
74
74
  email: xordog@gmail.com
75
75
  executables: []
@@ -80,6 +80,7 @@ extra_rdoc_files:
80
80
  - ".doc/ext/reflex/capture_event.cpp"
81
81
  - ".doc/ext/reflex/contact_event.cpp"
82
82
  - ".doc/ext/reflex/device.cpp"
83
+ - ".doc/ext/reflex/device_event.cpp"
83
84
  - ".doc/ext/reflex/draw_event.cpp"
84
85
  - ".doc/ext/reflex/ellipse_shape.cpp"
85
86
  - ".doc/ext/reflex/event.cpp"
@@ -114,6 +115,7 @@ files:
114
115
  - ".doc/ext/reflex/capture_event.cpp"
115
116
  - ".doc/ext/reflex/contact_event.cpp"
116
117
  - ".doc/ext/reflex/device.cpp"
118
+ - ".doc/ext/reflex/device_event.cpp"
117
119
  - ".doc/ext/reflex/draw_event.cpp"
118
120
  - ".doc/ext/reflex/ellipse_shape.cpp"
119
121
  - ".doc/ext/reflex/event.cpp"
@@ -161,6 +163,7 @@ files:
161
163
  - ext/reflex/contact_event.cpp
162
164
  - ext/reflex/defs.h
163
165
  - ext/reflex/device.cpp
166
+ - ext/reflex/device_event.cpp
164
167
  - ext/reflex/draw_event.cpp
165
168
  - ext/reflex/ellipse_shape.cpp
166
169
  - ext/reflex/event.cpp
@@ -200,12 +203,14 @@ files:
200
203
  - include/reflex/event.h
201
204
  - include/reflex/exception.h
202
205
  - include/reflex/filter.h
206
+ - include/reflex/gamepad.h
203
207
  - include/reflex/image_view.h
204
208
  - include/reflex/pointer.h
205
209
  - include/reflex/reflex.h
206
210
  - include/reflex/ruby.h
207
211
  - include/reflex/ruby/application.h
208
212
  - include/reflex/ruby/defs.h
213
+ - include/reflex/ruby/device.h
209
214
  - include/reflex/ruby/event.h
210
215
  - include/reflex/ruby/exception.h
211
216
  - include/reflex/ruby/filter.h
@@ -327,12 +332,15 @@ files:
327
332
  - src/application.h
328
333
  - src/body.cpp
329
334
  - src/body.h
335
+ - src/device.cpp
330
336
  - src/event.cpp
331
337
  - src/event.h
332
338
  - src/exception.cpp
333
339
  - src/filter.cpp
334
340
  - src/fixture.cpp
335
341
  - src/fixture.h
342
+ - src/gamepad.cpp
343
+ - src/gamepad.h
336
344
  - src/image_view.cpp
337
345
  - src/ios/app_delegate.h
338
346
  - src/ios/app_delegate.mm
@@ -341,6 +349,7 @@ files:
341
349
  - src/ios/device.mm
342
350
  - src/ios/event.h
343
351
  - src/ios/event.mm
352
+ - src/ios/gamepad.mm
344
353
  - src/ios/reflex.mm
345
354
  - src/ios/screen.h
346
355
  - src/ios/screen.mm
@@ -355,6 +364,9 @@ files:
355
364
  - src/osx/device.mm
356
365
  - src/osx/event.h
357
366
  - src/osx/event.mm
367
+ - src/osx/gamepad.mm
368
+ - src/osx/gamepad_gc.mm
369
+ - src/osx/gamepad_hid.mm
358
370
  - src/osx/native_window.h
359
371
  - src/osx/native_window.mm
360
372
  - src/osx/opengl_view.h
@@ -380,6 +392,8 @@ files:
380
392
  - src/win32/device.cpp
381
393
  - src/win32/event.cpp
382
394
  - src/win32/event.h
395
+ - src/win32/gamepad.cpp
396
+ - src/win32/gamepad.h
383
397
  - src/win32/opengl.cpp
384
398
  - src/win32/opengl.h
385
399
  - src/win32/reflex.cpp