reflexion 0.3.4 → 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 (55) 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 +50 -0
  6. data/.doc/ext/reflex/native.cpp +6 -4
  7. data/.doc/ext/reflex/reflex.cpp +24 -0
  8. data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
  9. data/CONTRIBUTING.md +7 -0
  10. data/ChangeLog.md +20 -0
  11. data/README.md +46 -2
  12. data/VERSION +1 -1
  13. data/ext/reflex/application.cpp +18 -0
  14. data/ext/reflex/device.cpp +48 -3
  15. data/ext/reflex/device_event.cpp +65 -0
  16. data/ext/reflex/extconf.rb +3 -3
  17. data/ext/reflex/key_event.cpp +50 -0
  18. data/ext/reflex/native.cpp +6 -4
  19. data/ext/reflex/reflex.cpp +24 -0
  20. data/include/reflex/application.h +4 -0
  21. data/include/reflex/defs.h +60 -0
  22. data/include/reflex/device.h +22 -0
  23. data/include/reflex/event.h +25 -0
  24. data/include/reflex/gamepad.h +175 -0
  25. data/include/reflex/ruby/application.h +18 -0
  26. data/include/reflex/ruby/device.h +40 -0
  27. data/include/reflex/ruby/event.h +11 -0
  28. data/reflex.gemspec +3 -3
  29. data/src/application.cpp +67 -0
  30. data/src/application.h +9 -0
  31. data/src/device.cpp +24 -0
  32. data/src/event.cpp +38 -0
  33. data/src/gamepad.cpp +176 -0
  34. data/src/gamepad.h +74 -0
  35. data/src/ios/app_delegate.mm +2 -2
  36. data/src/ios/application.mm +0 -25
  37. data/src/ios/event.mm +2 -3
  38. data/src/ios/gamepad.mm +313 -0
  39. data/src/osx/app_delegate.mm +2 -2
  40. data/src/osx/application.mm +0 -25
  41. data/src/osx/event.h +3 -0
  42. data/src/osx/event.mm +11 -3
  43. data/src/osx/gamepad.mm +40 -0
  44. data/src/osx/gamepad_gc.mm +299 -0
  45. data/src/osx/gamepad_hid.mm +567 -0
  46. data/src/view.cpp +52 -18
  47. data/src/win32/application.cpp +5 -26
  48. data/src/win32/event.cpp +8 -7
  49. data/src/win32/event.h +5 -0
  50. data/src/win32/gamepad.cpp +110 -0
  51. data/src/win32/gamepad.h +20 -0
  52. data/src/win32/window.cpp +9 -1
  53. data/src/window.cpp +15 -0
  54. data/src/window.h +9 -0
  55. metadata +30 -14
@@ -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
@@ -3,15 +3,16 @@
3
3
 
4
4
  #include <xot/time.h>
5
5
  #include "reflex/exception.h"
6
- #include "../pointer.h"
6
+ #include "reflex/debug.h"
7
+ #include "window.h"
7
8
 
8
9
 
9
10
  namespace Reflex
10
11
  {
11
12
 
12
13
 
13
- static uint
14
- get_modifiers ()
14
+ uint
15
+ get_key_modifiers ()
15
16
  {
16
17
  return
17
18
  (GetKeyState(VK_SHIFT) & 0x8000 ? MOD_SHIFT : 0) |
@@ -36,7 +37,7 @@ namespace Reflex
36
37
  }
37
38
 
38
39
  NativeKeyEvent::NativeKeyEvent (UINT msg, WPARAM wp, LPARAM lp, const char* chars)
39
- : 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)
40
41
  {
41
42
  }
42
43
 
@@ -134,7 +135,7 @@ namespace Reflex
134
135
  get_mouse_type(msg, wp),
135
136
  get_mouse_action(msg),
136
137
  Point(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)),
137
- get_modifiers(),
138
+ get_key_modifiers(),
138
139
  get_mouse_click_count(msg),
139
140
  is_mouse_dragging(msg, wp),
140
141
  Xot::time()));
@@ -195,7 +196,7 @@ namespace Reflex
195
196
  get_touch_type(touch),
196
197
  action,
197
198
  get_touch_position(hwnd, touch),
198
- get_modifiers(),
199
+ get_key_modifiers(),
199
200
  action == Pointer::DOWN ? 1 : 0,
200
201
  action == Pointer::MOVE,
201
202
  get_touch_time(touch));
@@ -211,7 +212,7 @@ namespace Reflex
211
212
  : WheelEvent(
212
213
  GET_X_LPARAM(lp), GET_Y_LPARAM(lp), 0,
213
214
  GET_WHEEL_DELTA_WPARAM(wp_x), -GET_WHEEL_DELTA_WPARAM(wp_y), 0,
214
- get_modifiers())
215
+ get_key_modifiers())
215
216
  {
216
217
  }
217
218
 
data/src/win32/event.h CHANGED
@@ -44,6 +44,11 @@ namespace Reflex
44
44
  };// NativeWheelEvent
45
45
 
46
46
 
47
+ uint get_key_modifiers ();
48
+
49
+ void Gamepad_poll ();
50
+
51
+
47
52
  }// Reflex
48
53
 
49
54
 
@@ -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,6 +155,8 @@ namespace Reflex
154
155
  {
155
156
  WindowData* self = get_data(win);
156
157
 
158
+ Gamepad_poll();
159
+
157
160
  Window_call_update_event(win);
158
161
 
159
162
  if (self->redraw)
@@ -341,8 +344,13 @@ namespace Reflex
341
344
  {
342
345
  case WM_ACTIVATE:
343
346
  {
344
- if ((wp & 0xFFFF) == WA_INACTIVE)
347
+ if (LOWORD(wp) == WA_INACTIVE)
348
+ {
349
+ Window_call_deactivate_event(win);
345
350
  self->pressing_keys.clear();
351
+ }
352
+ else
353
+ Window_call_activate_event(win);
346
354
  break;
347
355
  }
348
356
 
data/src/window.cpp CHANGED
@@ -52,6 +52,17 @@ namespace Reflex
52
52
  return windows;
53
53
  }
54
54
 
55
+ Window*
56
+ Window_get_active ()
57
+ {
58
+ for (auto& w : Window_all())
59
+ {
60
+ if (Xot::has_flag(w->self->flags, Window::Data::ACTIVE))
61
+ return w;
62
+ }
63
+ return NULL;
64
+ }
65
+
55
66
 
56
67
  Window::Data::Data ()
57
68
  : flags(Window_default_flags())
@@ -167,6 +178,8 @@ namespace Reflex
167
178
  {
168
179
  if (!window) return;
169
180
 
181
+ Xot::add_flag(&window->self->flags, Window::Data::ACTIVE);
182
+
170
183
  Event e;
171
184
  window->on_activate(&e);
172
185
  }
@@ -178,6 +191,8 @@ namespace Reflex
178
191
 
179
192
  Event e;
180
193
  window->on_deactivate(&e);
194
+
195
+ Xot::remove_flag(&window->self->flags, Window::Data::ACTIVE);
181
196
  }
182
197
 
183
198
  void
data/src/window.h CHANGED
@@ -33,6 +33,13 @@ namespace Reflex
33
33
 
34
34
  typedef std::map<View::Ref, CaptureTargetIDList> CaptureMap;
35
35
 
36
+ enum Flag
37
+ {
38
+
39
+ ACTIVE = Xot::bit(1, FLAG_LAST),
40
+
41
+ };// Flag
42
+
36
43
  int hide_count = 1;
37
44
 
38
45
  bool redraw = true;
@@ -82,6 +89,8 @@ namespace Reflex
82
89
 
83
90
  Application::WindowList& Window_all ();
84
91
 
92
+ Window* Window_get_active ();
93
+
85
94
 
86
95
  uint Window_default_flags ();
87
96
 
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.4
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-06 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.4
19
+ version: 0.3.6
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.3.4
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.4
29
+ version: 0.3.6
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.3.4
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.4
39
+ version: 0.3.6
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 0.3.4
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.4
49
+ version: 0.3.6
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 0.3.4
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.4
59
+ version: 0.3.6
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 0.3.4
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.4
69
+ version: 0.3.6
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 0.3.4
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"
@@ -143,10 +145,12 @@ files:
143
145
  - ".doc/ext/reflex/view.cpp"
144
146
  - ".doc/ext/reflex/wheel_event.cpp"
145
147
  - ".doc/ext/reflex/window.cpp"
148
+ - ".github/PULL_REQUEST_TEMPLATE.md"
146
149
  - ".github/workflows/release-gem.yml"
147
150
  - ".github/workflows/tag.yml"
148
151
  - ".github/workflows/test.yml"
149
152
  - ".github/workflows/utils.rb"
153
+ - CONTRIBUTING.md
150
154
  - ChangeLog.md
151
155
  - Gemfile
152
156
  - Gemfile.lock
@@ -159,6 +163,7 @@ files:
159
163
  - ext/reflex/contact_event.cpp
160
164
  - ext/reflex/defs.h
161
165
  - ext/reflex/device.cpp
166
+ - ext/reflex/device_event.cpp
162
167
  - ext/reflex/draw_event.cpp
163
168
  - ext/reflex/ellipse_shape.cpp
164
169
  - ext/reflex/event.cpp
@@ -198,12 +203,14 @@ files:
198
203
  - include/reflex/event.h
199
204
  - include/reflex/exception.h
200
205
  - include/reflex/filter.h
206
+ - include/reflex/gamepad.h
201
207
  - include/reflex/image_view.h
202
208
  - include/reflex/pointer.h
203
209
  - include/reflex/reflex.h
204
210
  - include/reflex/ruby.h
205
211
  - include/reflex/ruby/application.h
206
212
  - include/reflex/ruby/defs.h
213
+ - include/reflex/ruby/device.h
207
214
  - include/reflex/ruby/event.h
208
215
  - include/reflex/ruby/exception.h
209
216
  - include/reflex/ruby/filter.h
@@ -325,12 +332,15 @@ files:
325
332
  - src/application.h
326
333
  - src/body.cpp
327
334
  - src/body.h
335
+ - src/device.cpp
328
336
  - src/event.cpp
329
337
  - src/event.h
330
338
  - src/exception.cpp
331
339
  - src/filter.cpp
332
340
  - src/fixture.cpp
333
341
  - src/fixture.h
342
+ - src/gamepad.cpp
343
+ - src/gamepad.h
334
344
  - src/image_view.cpp
335
345
  - src/ios/app_delegate.h
336
346
  - src/ios/app_delegate.mm
@@ -339,6 +349,7 @@ files:
339
349
  - src/ios/device.mm
340
350
  - src/ios/event.h
341
351
  - src/ios/event.mm
352
+ - src/ios/gamepad.mm
342
353
  - src/ios/reflex.mm
343
354
  - src/ios/screen.h
344
355
  - src/ios/screen.mm
@@ -353,6 +364,9 @@ files:
353
364
  - src/osx/device.mm
354
365
  - src/osx/event.h
355
366
  - src/osx/event.mm
367
+ - src/osx/gamepad.mm
368
+ - src/osx/gamepad_gc.mm
369
+ - src/osx/gamepad_hid.mm
356
370
  - src/osx/native_window.h
357
371
  - src/osx/native_window.mm
358
372
  - src/osx/opengl_view.h
@@ -378,6 +392,8 @@ files:
378
392
  - src/win32/device.cpp
379
393
  - src/win32/event.cpp
380
394
  - src/win32/event.h
395
+ - src/win32/gamepad.cpp
396
+ - src/win32/gamepad.h
381
397
  - src/win32/opengl.cpp
382
398
  - src/win32/opengl.h
383
399
  - src/win32/reflex.cpp