reflexion 0.5.3 → 0.7.0

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 (309) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/application.cpp +56 -7
  3. data/.doc/ext/reflex/capture_event.cpp +1 -1
  4. data/.doc/ext/reflex/chase_constraint.cpp +84 -0
  5. data/.doc/ext/reflex/clipboard.cpp +65 -0
  6. data/.doc/ext/reflex/color_event.cpp +76 -0
  7. data/.doc/ext/reflex/color_picker.cpp +113 -0
  8. data/.doc/ext/reflex/constraint.cpp +135 -0
  9. data/.doc/ext/reflex/contact_event.cpp +1 -1
  10. data/.doc/ext/reflex/control_change_event.cpp +1 -1
  11. data/.doc/ext/reflex/device.cpp +1 -1
  12. data/.doc/ext/reflex/device_event.cpp +1 -1
  13. data/.doc/ext/reflex/draw_event.cpp +1 -1
  14. data/.doc/ext/reflex/ellipse_shape.cpp +1 -1
  15. data/.doc/ext/reflex/event.cpp +1 -1
  16. data/.doc/ext/reflex/file_dialog.cpp +181 -0
  17. data/.doc/ext/reflex/file_event.cpp +103 -0
  18. data/.doc/ext/reflex/filter.cpp +1 -1
  19. data/.doc/ext/reflex/focus_event.cpp +1 -1
  20. data/.doc/ext/reflex/frame_event.cpp +1 -1
  21. data/.doc/ext/reflex/gamepad.cpp +48 -0
  22. data/.doc/ext/reflex/image_view.cpp +1 -1
  23. data/.doc/ext/reflex/key_event.cpp +1 -274
  24. data/.doc/ext/reflex/line_shape.cpp +1 -1
  25. data/.doc/ext/reflex/link_constraint.cpp +178 -0
  26. data/.doc/ext/reflex/menu.cpp +303 -0
  27. data/.doc/ext/reflex/midi.cpp +9 -2
  28. data/.doc/ext/reflex/midi_event.cpp +1 -1
  29. data/.doc/ext/reflex/motion_event.cpp +1 -1
  30. data/.doc/ext/reflex/native.cpp +40 -10
  31. data/.doc/ext/reflex/note_event.cpp +1 -1
  32. data/.doc/ext/reflex/pin.cpp +156 -0
  33. data/.doc/ext/reflex/pointer.cpp +3 -1
  34. data/.doc/ext/reflex/pointer_event.cpp +3 -3
  35. data/.doc/ext/reflex/polygon_shape.cpp +1 -1
  36. data/.doc/ext/reflex/rect_shape.cpp +1 -1
  37. data/.doc/ext/reflex/reflex.cpp +606 -237
  38. data/.doc/ext/reflex/screen.cpp +27 -1
  39. data/.doc/ext/reflex/scroll_event.cpp +1 -1
  40. data/.doc/ext/reflex/selector.cpp +5 -5
  41. data/.doc/ext/reflex/shape.cpp +1 -1
  42. data/.doc/ext/reflex/snap_constraint.cpp +125 -0
  43. data/.doc/ext/reflex/style.cpp +1 -1
  44. data/.doc/ext/reflex/style_length.cpp +4 -3
  45. data/.doc/ext/reflex/text_event.cpp +104 -0
  46. data/.doc/ext/reflex/timer.cpp +1 -1
  47. data/.doc/ext/reflex/timer_event.cpp +1 -1
  48. data/.doc/ext/reflex/update_event.cpp +1 -1
  49. data/.doc/ext/reflex/view.cpp +206 -79
  50. data/.doc/ext/reflex/wheel_constraint.cpp +142 -0
  51. data/.doc/ext/reflex/wheel_event.cpp +1 -1
  52. data/.doc/ext/reflex/window.cpp +282 -31
  53. data/.github/workflows/release-gem.yml +2 -40
  54. data/.github/workflows/tag.yml +5 -28
  55. data/.github/workflows/test.yml +1 -28
  56. data/ChangeLog.md +79 -0
  57. data/Gemfile.lock +13 -8
  58. data/README.md +1 -0
  59. data/Rakefile +13 -2
  60. data/Reflex.podspec +2 -2
  61. data/VERSION +1 -1
  62. data/ext/reflex/application.cpp +62 -7
  63. data/ext/reflex/capture_event.cpp +1 -1
  64. data/ext/reflex/chase_constraint.cpp +89 -0
  65. data/ext/reflex/clipboard.cpp +69 -0
  66. data/ext/reflex/color_event.cpp +80 -0
  67. data/ext/reflex/color_picker.cpp +121 -0
  68. data/ext/reflex/constraint.cpp +146 -0
  69. data/ext/reflex/contact_event.cpp +1 -1
  70. data/ext/reflex/control_change_event.cpp +1 -1
  71. data/ext/reflex/device.cpp +1 -1
  72. data/ext/reflex/device_event.cpp +1 -1
  73. data/ext/reflex/draw_event.cpp +1 -1
  74. data/ext/reflex/ellipse_shape.cpp +1 -1
  75. data/ext/reflex/event.cpp +1 -1
  76. data/ext/reflex/extconf.rb +4 -2
  77. data/ext/reflex/file_dialog.cpp +194 -0
  78. data/ext/reflex/file_event.cpp +108 -0
  79. data/ext/reflex/filter.cpp +1 -1
  80. data/ext/reflex/focus_event.cpp +1 -1
  81. data/ext/reflex/frame_event.cpp +1 -1
  82. data/ext/reflex/gamepad.cpp +50 -0
  83. data/ext/reflex/image_view.cpp +1 -1
  84. data/ext/reflex/key_event.cpp +1 -275
  85. data/ext/reflex/line_shape.cpp +1 -1
  86. data/ext/reflex/link_constraint.cpp +194 -0
  87. data/ext/reflex/menu.cpp +331 -0
  88. data/ext/reflex/midi.cpp +11 -3
  89. data/ext/reflex/midi_event.cpp +1 -1
  90. data/ext/reflex/motion_event.cpp +1 -1
  91. data/ext/reflex/native.cpp +40 -10
  92. data/ext/reflex/note_event.cpp +1 -1
  93. data/ext/reflex/pin.cpp +165 -0
  94. data/ext/reflex/pointer.cpp +3 -1
  95. data/ext/reflex/pointer_event.cpp +3 -3
  96. data/ext/reflex/polygon_shape.cpp +1 -1
  97. data/ext/reflex/rect_shape.cpp +1 -1
  98. data/ext/reflex/reflex.cpp +608 -237
  99. data/ext/reflex/screen.cpp +31 -2
  100. data/ext/reflex/scroll_event.cpp +1 -1
  101. data/ext/reflex/selector.cpp +5 -5
  102. data/ext/reflex/selector.h +10 -10
  103. data/ext/reflex/shape.cpp +1 -1
  104. data/ext/reflex/snap_constraint.cpp +135 -0
  105. data/ext/reflex/style.cpp +1 -1
  106. data/ext/reflex/style_length.cpp +4 -3
  107. data/ext/reflex/text_event.cpp +111 -0
  108. data/ext/reflex/timer.cpp +1 -1
  109. data/ext/reflex/timer_event.cpp +1 -1
  110. data/ext/reflex/update_event.cpp +1 -1
  111. data/ext/reflex/view.cpp +236 -96
  112. data/ext/reflex/wheel_constraint.cpp +154 -0
  113. data/ext/reflex/wheel_event.cpp +1 -1
  114. data/ext/reflex/window.cpp +318 -40
  115. data/include/reflex/application.h +19 -0
  116. data/include/reflex/clipboard.h +53 -0
  117. data/include/reflex/color_picker.h +65 -0
  118. data/include/reflex/constraint.h +275 -0
  119. data/include/reflex/defs.h +204 -195
  120. data/include/reflex/event.h +180 -88
  121. data/include/reflex/file_dialog.h +73 -0
  122. data/include/reflex/gamepad.h +3 -0
  123. data/include/reflex/menu.h +120 -0
  124. data/include/reflex/midi.h +3 -0
  125. data/include/reflex/pin.h +68 -0
  126. data/include/reflex/pointer.h +4 -0
  127. data/include/reflex/reflex.h +2 -0
  128. data/include/reflex/ruby/application.h +6 -1
  129. data/include/reflex/ruby/clipboard.h +23 -0
  130. data/include/reflex/ruby/color_picker.h +89 -0
  131. data/include/reflex/ruby/constraint.h +94 -0
  132. data/include/reflex/ruby/event.h +62 -29
  133. data/include/reflex/ruby/file_dialog.h +89 -0
  134. data/include/reflex/ruby/gamepad.h +46 -0
  135. data/include/reflex/ruby/menu.h +103 -0
  136. data/include/reflex/ruby/pin.h +40 -0
  137. data/include/reflex/ruby/reflex.h +3 -0
  138. data/include/reflex/ruby/view.h +123 -39
  139. data/include/reflex/ruby/window.h +96 -19
  140. data/include/reflex/ruby.h +3 -0
  141. data/include/reflex/screen.h +11 -2
  142. data/include/reflex/view.h +66 -27
  143. data/include/reflex/window.h +57 -12
  144. data/include/reflex.h +8 -0
  145. data/lib/reflex/application.rb +5 -5
  146. data/lib/reflex/autoinit.rb +3 -1
  147. data/lib/reflex/button.rb +3 -3
  148. data/lib/reflex/chase_constraint.rb +15 -0
  149. data/lib/reflex/clipboard.rb +19 -0
  150. data/lib/reflex/color_event.rb +16 -0
  151. data/lib/reflex/color_picker.rb +45 -0
  152. data/lib/reflex/constraint.rb +29 -0
  153. data/lib/reflex/control_change_event.rb +17 -0
  154. data/lib/reflex/extension.rb +1 -1
  155. data/lib/reflex/file_dialog.rb +70 -0
  156. data/lib/reflex/file_event.rb +37 -0
  157. data/lib/reflex/helper.rb +79 -0
  158. data/lib/reflex/key_event.rb +14 -14
  159. data/lib/reflex/link_constraint.rb +31 -0
  160. data/lib/reflex/menu.rb +92 -0
  161. data/lib/reflex/model.rb +19 -19
  162. data/lib/reflex/note_event.rb +1 -1
  163. data/lib/reflex/pin.rb +39 -0
  164. data/lib/reflex/pointer.rb +30 -1
  165. data/lib/reflex/pointer_event.rb +13 -2
  166. data/lib/reflex/reflex.rb +5 -0
  167. data/lib/reflex/shape.rb +14 -14
  168. data/lib/reflex/snap_constraint.rb +28 -0
  169. data/lib/reflex/style.rb +16 -16
  170. data/lib/reflex/text_event.rb +40 -0
  171. data/lib/reflex/timer.rb +3 -3
  172. data/lib/reflex/view.rb +85 -18
  173. data/lib/reflex/wheel_constraint.rb +28 -0
  174. data/lib/reflex/wheel_event.rb +19 -1
  175. data/lib/reflex/window.rb +25 -13
  176. data/lib/reflex.rb +23 -8
  177. data/pod.rake +1 -1
  178. data/reflex.gemspec +4 -4
  179. data/samples/constraint.rb +152 -0
  180. data/samples/ime.rb +100 -0
  181. data/samples/ios/hello/hello.xcodeproj/project.pbxproj +236 -224
  182. data/samples/menu.rb +32 -0
  183. data/samples/model.rb +3 -3
  184. data/samples/test/alert.rb +93 -0
  185. data/samples/test/always_on.rb +76 -0
  186. data/samples/test/app_background.rb +51 -0
  187. data/samples/test/boundary.rb +75 -0
  188. data/samples/test/callback_exception.rb +101 -0
  189. data/samples/test/cancel.rb +53 -0
  190. data/samples/test/color_picker.rb +63 -0
  191. data/samples/test/file_dialog.rb +102 -0
  192. data/samples/window_style.rb +156 -0
  193. data/src/application.cpp +180 -20
  194. data/src/application.h +95 -5
  195. data/src/clipboard.cpp +81 -0
  196. data/src/color_picker.cpp +113 -0
  197. data/src/color_picker.h +36 -0
  198. data/src/constraint.cpp +1662 -0
  199. data/src/constraint.h +64 -0
  200. data/src/event.cpp +416 -252
  201. data/src/event.h +13 -2
  202. data/src/file_dialog.cpp +163 -0
  203. data/src/file_dialog.h +52 -0
  204. data/src/gamepad.cpp +42 -5
  205. data/src/gamepad.h +4 -0
  206. data/src/ios/app_delegate.mm +5 -3
  207. data/src/ios/application.mm +29 -0
  208. data/src/ios/clipboard.mm +44 -0
  209. data/src/ios/color_picker.mm +19 -0
  210. data/src/ios/event.h +6 -2
  211. data/src/ios/event.mm +31 -12
  212. data/src/ios/file_dialog.mm +21 -0
  213. data/src/ios/gamepad.mm +4 -4
  214. data/src/ios/menu.mm +41 -0
  215. data/src/ios/reflex.mm +8 -0
  216. data/src/ios/screen.mm +26 -0
  217. data/src/ios/view_controller.mm +47 -42
  218. data/src/ios/window.mm +44 -9
  219. data/src/menu.cpp +387 -0
  220. data/src/menu.h +81 -0
  221. data/src/midi.cpp +61 -31
  222. data/src/osx/app_delegate.h +4 -0
  223. data/src/osx/app_delegate.mm +168 -139
  224. data/src/osx/application.mm +103 -5
  225. data/src/osx/clipboard.mm +45 -0
  226. data/src/osx/color_picker.mm +112 -0
  227. data/src/osx/event.h +10 -0
  228. data/src/osx/event.mm +114 -30
  229. data/src/osx/file_dialog.mm +168 -0
  230. data/src/osx/gamepad.mm +2 -2
  231. data/src/osx/gamepad_hid.mm +1 -1
  232. data/src/osx/menu.h +25 -0
  233. data/src/osx/menu.mm +516 -0
  234. data/src/osx/native_window.h +16 -2
  235. data/src/osx/native_window.mm +141 -57
  236. data/src/osx/opengl_view.h +2 -1
  237. data/src/osx/opengl_view.mm +229 -37
  238. data/src/osx/reflex.mm +38 -0
  239. data/src/osx/screen.mm +36 -0
  240. data/src/osx/window.mm +117 -24
  241. data/src/pin.cpp +137 -0
  242. data/src/pointer.cpp +36 -16
  243. data/src/pointer.h +10 -0
  244. data/src/rays.h +46 -0
  245. data/src/sdl/application.cpp +73 -8
  246. data/src/sdl/clipboard.cpp +39 -0
  247. data/src/sdl/color_picker.cpp +18 -0
  248. data/src/sdl/event.cpp +44 -6
  249. data/src/sdl/event.h +18 -3
  250. data/src/sdl/file_dialog.cpp +20 -0
  251. data/src/sdl/gamepad.cpp +3 -7
  252. data/src/sdl/menu.cpp +40 -0
  253. data/src/sdl/reflex.cpp +20 -0
  254. data/src/sdl/screen.cpp +36 -0
  255. data/src/sdl/window.cpp +168 -37
  256. data/src/shape.cpp +15 -10
  257. data/src/view.cpp +583 -233
  258. data/src/view.h +22 -4
  259. data/src/vk.h +416 -0
  260. data/src/win32/application.cpp +167 -12
  261. data/src/win32/application.h +20 -0
  262. data/src/win32/clipboard.cpp +210 -0
  263. data/src/win32/color_picker.cpp +82 -0
  264. data/src/win32/event.cpp +123 -11
  265. data/src/win32/event.h +22 -3
  266. data/src/win32/file_dialog.cpp +226 -0
  267. data/src/win32/gamepad.cpp +9 -2
  268. data/src/win32/menu.cpp +490 -0
  269. data/src/win32/menu.h +35 -0
  270. data/src/win32/opengl.cpp +2 -9
  271. data/src/win32/reflex.cpp +44 -3
  272. data/src/win32/screen.cpp +164 -3
  273. data/src/win32/screen.h +8 -0
  274. data/src/win32/tray.cpp +191 -0
  275. data/src/win32/tray.h +22 -0
  276. data/src/win32/vk.cpp +11 -0
  277. data/src/win32/window.cpp +858 -135
  278. data/src/win32/window.h +9 -0
  279. data/src/window.cpp +929 -183
  280. data/src/window.h +77 -33
  281. data/src/world.cpp +86 -15
  282. data/src/world.h +9 -2
  283. data/test/helper.rb +24 -0
  284. data/test/test_application.rb +101 -1
  285. data/test/test_chase_constraint.rb +122 -0
  286. data/test/test_clipboard.rb +54 -0
  287. data/test/test_color_event.rb +36 -0
  288. data/test/test_color_picker.rb +62 -0
  289. data/test/test_constraint.rb +184 -0
  290. data/test/test_event.rb +1 -1
  291. data/test/test_file_dialog.rb +48 -0
  292. data/test/test_file_event.rb +43 -0
  293. data/test/test_has_text_preedit.rb +54 -0
  294. data/test/test_key_event.rb +23 -2
  295. data/test/test_link_constraint.rb +237 -0
  296. data/test/test_menu.rb +237 -0
  297. data/test/test_pin.rb +65 -0
  298. data/test/test_pointer.rb +50 -26
  299. data/test/test_pointer_event.rb +25 -10
  300. data/test/test_reflex.rb +36 -0
  301. data/test/test_screen.rb +24 -2
  302. data/test/test_snap_constraint.rb +140 -0
  303. data/test/test_text_event.rb +54 -0
  304. data/test/test_view.rb +152 -25
  305. data/test/test_wheel_constraint.rb +125 -0
  306. data/test/test_wheel_event.rb +24 -10
  307. data/test/test_window.rb +205 -43
  308. metadata +154 -10
  309. data/.github/workflows/utils.rb +0 -127
@@ -7,31 +7,4 @@ on:
7
7
 
8
8
  jobs:
9
9
  test:
10
- runs-on: macos-latest
11
-
12
- steps:
13
- - name: ruby 3.2
14
- uses: ruby/setup-ruby@v1
15
- with:
16
- ruby-version: 3.2
17
-
18
- - name: checkout
19
- uses: actions/checkout@v4
20
-
21
- - name: setup gems
22
- run: bundle install
23
-
24
- - name: setup dependencies
25
- run: "ruby -I.github/workflows -rutils -e 'setup_dependencies'"
26
-
27
- - name: packages
28
- run: bundle exec rake verbose packages
29
-
30
- - name: lib
31
- run: bundle exec rake verbose lib
32
-
33
- - name: ext
34
- run: bundle exec rake verbose ext
35
-
36
- - name: test
37
- run: bundle exec rake verbose test
10
+ uses: xord/xot/.github/workflows/test.yml@master
data/ChangeLog.md CHANGED
@@ -1,6 +1,85 @@
1
1
  # reflex ChangeLog
2
2
 
3
3
 
4
+ ## [v0.7.0] - 2026-11-04
5
+
6
+ - [BREAKING] Rename View#cache to View#draw_cache
7
+ - [BREAKING] Rename Window#hidden to Window#hidden?
8
+ - [BREAKING] Make Menu#shortcut_key a key symbol, not a string
9
+ - [BREAKING] Return only the shortcut modifiers from #modifiers by default
10
+ - [BREAKING] Report wheel deltas in pixels, in the same direction, on every platform
11
+ - [BREAKING] Make the window frame the client rect on Windows, as it is the content rect on macOS
12
+ - [BREAKING] Open gamepads and MIDI only when Gamepad.enable / MIDI.enable is called
13
+ - [BREAKING] Return from Reflex.start on quit on macOS too, and raise the exception of a callback from it
14
+ - [BREAKING] Raise the deployment targets to macOS 11.0 and iOS 14.0
15
+ - Add TextEvent, on_text_preedit and on_text_commit to take text from an input method
16
+ - Add HasTextPreedit for views taking text input
17
+ - Add FileDialog to open the file dialog of the platform
18
+ - Add ColorPicker to open the color picker of the platform
19
+ - Add Reflex.alert to show a message and wait for it to be closed
20
+ - Add Application#background for an app with no dock icon, with its menu in the menu bar or the tray
21
+ - Add Window#transparent= and #shadow=
22
+ - Add the :buttons and :background flags to Window#titlebar to hide the parts of the titlebar
23
+ - Add Window#always_on_top and #always_on_bottom
24
+ - Add Window::FLAG_POINTER_THROUGH and Window#pointer_through_alpha to let pointers go through a window
25
+ - Add Window#unlisted= to keep a window out of Mission Control, the taskbar and alt-tab
26
+ - Add Screen.all, Screen#name and #pixel_density
27
+ - Add Reflex::KEYS and Reflex.get_key_symbol!
28
+ - Add ControlChangeEvent#inspect
29
+ - Handle non-ASCII text on Windows
30
+ - Support High DPI on Windows
31
+ - Deliver MIDI events to every window, also while the app is in the background
32
+ - End every pointer press with an up or a cancel, also when a menu pops up or the pointer leaves the window
33
+ - Decide the enter and leave of a window from where the pointer is
34
+ - Stop hover moves at the edge of a window on macOS, as on the other platforms
35
+ - Let handlers add and remove views while events are dispatched
36
+ - Name an application by the name the system has for it by default
37
+ - Give windows the icon of the executable on Windows
38
+ - Keep the caption on screen when placing a window on Windows
39
+ - Leave the time a popup menu is open on Windows out of the next dt
40
+ - Make Window#close do nothing on a window already closed
41
+ - Let Window#titlebar and #orientations be called as universal accessors
42
+
43
+ - Fix menu shortcuts never firing on macOS and Windows
44
+ - Fix closable, minimizable and resizable doing nothing on Windows
45
+ - Fix the window flags taking effect one change late on macOS
46
+ - Fix a block given to Window.new or Reflex.start being lost when on(:show) or on(:start) is hooked
47
+ - Fix views added to a window already shown never being drawn
48
+ - Fix a drag not working on Windows right after a popup menu
49
+ - Fix MIDI.all returning true for each device
50
+ - Fix the MIDI input thread corrupting the heap
51
+ - Fix a crash when removing two or more gamepads
52
+ - Fix RtMidi running the event loop of the app on macOS
53
+ - Fix the extension failing to load on Windows without the DirectX redistributable
54
+ - Fix linking the extension statically on macOS
55
+ - Fix the build for iOS
56
+
57
+
58
+ ## [v0.6.0] - 2026-08-04
59
+
60
+ - [BREAKING] Read modifiers as symbols from every event that carries them
61
+ - [BREAKING] Rename KEY_APPS to KEY_CONTEXT_MENU and fix its macOS keycode
62
+ - [BREAKING] Sync view frames on View#update_world, drop its duration argument
63
+ - Add Menu class and Application#menu
64
+ - Add Constraint classes backed by Box2D joints
65
+ - Add Clipboard class
66
+ - Add on_pointer_enter/leave event handlers to View and Window
67
+ - Add on_activate/deactivate event handlers to View
68
+ - Add index argument to View#add_child and #add_shape
69
+ - Add locks: option to modifiers for excluding caps/num/scroll lock
70
+ - Add midi and gamepad to the umbrella header
71
+ - Add menu and constraint samples
72
+ - Give View#each_* an enumerator form and array-returning plural accessors
73
+ - Make View#each_* safe against removals during iteration
74
+ - Fill in the Windows virtual-key codes for punctuation and numpad operators
75
+ - Report fn+return as the keypad enter on macOS
76
+
77
+ - Fix crash when an empty array is passed where a Pin or Selector is expected
78
+ - Fix get_modifiers reporting only the first modifier held
79
+ - Fix reversed selector match in find_shapes and find_styles
80
+ - Fix view clipping to track ancestor zoom and position in screen space
81
+
82
+
4
83
  ## [v0.5.3] - 2026-06-23
5
84
 
6
85
  - Run vendor and erb for reflex itself in pod.rake setup
data/Gemfile.lock CHANGED
@@ -1,21 +1,26 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- power_assert (3.0.1)
5
- rake (13.3.1)
6
- test-unit (3.7.7)
4
+ power_assert (3.1.0)
5
+ rake (13.4.2)
6
+ test-unit (3.7.8)
7
7
  power_assert
8
- yard (0.9.39)
8
+ yard (0.9.45)
9
9
 
10
10
  PLATFORMS
11
- arm64-darwin-21
12
- arm64-darwin-23
13
- arm64-darwin-24
11
+ ruby
14
12
 
15
13
  DEPENDENCIES
16
14
  rake
17
15
  test-unit
18
16
  yard
19
17
 
18
+ CHECKSUMS
19
+ bundler (4.0.20) sha256=7978a8ac648767f5e635bc522445b79e80a52b907a39a36c2d8085ed6bc762ae
20
+ power_assert (3.1.0) sha256=fefe98ed5d3140628138f3f9f9194d6ece01f1320e69700d3c928adca7518251
21
+ rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
22
+ test-unit (3.7.8) sha256=689d1ca53f4d46f678b4e5d68d8e4294f87fc5e8b9238cc4de7c5727e8d65943
23
+ yard (0.9.45) sha256=52e211493f7cb8a3ebf7e104a25a1e73937a3103092545d34cb88fafebb3dc51
24
+
20
25
  BUNDLED WITH
21
- 2.4.19
26
+ 4.0.20
data/README.md CHANGED
@@ -74,6 +74,7 @@ $ gem install reflexion
74
74
  | `Reflex::Window` | OS-level window with title, frame, flags (closable / resizable / fullscreen / portrait / landscape) |
75
75
  | `Reflex::View` | Recursive UI node: position, size, transform, styles, child views, optional clipping / caching |
76
76
  | `Reflex::Screen` | Information about a display monitor |
77
+ | `Reflex::Clipboard` | Read and write the system clipboard |
77
78
  | `Reflex::Timer` | One-shot or interval timer that delivers `TimerEvent` |
78
79
 
79
80
  ### Shapes (drawing + physics body)
data/Rakefile CHANGED
@@ -35,12 +35,23 @@ use_external_library 'https://github.com/thestk/rtmidi',
35
35
  when linux? then '__LINUX_ALSA__'
36
36
  end
37
37
  }.call,
38
- &proc {sh %( mkdir rtmidi && cp RtMidi.* rtmidi )}
38
+ &proc {
39
+ sh %( mkdir rtmidi && cp RtMidi.* rtmidi )
40
+
41
+ # the event loop of the app already takes in the port changes, and running
42
+ # it from inside RtMidi calls the timers and events of the app too early
43
+ spin = /^[ \t]*CFRunLoopRunInMode\([^)]*\);\n/
44
+ filter_file 'rtmidi/RtMidi.cpp' do |src|
45
+ count = src.scan(spin).size
46
+ raise "expected 6 run loop calls in RtMidi.cpp, found #{count}" if count != 6
47
+ src.gsub spin, ''
48
+ end
49
+ }
39
50
 
40
51
  default_tasks :ext
41
52
  use_bundler
42
53
  build_native_library
43
54
  build_ruby_extension
44
- test_ruby_extension unless github_actions? && win32?
55
+ test_ruby_extension
45
56
  generate_documents
46
57
  build_ruby_gem
data/Reflex.podspec CHANGED
@@ -11,8 +11,8 @@ Pod::Spec.new do |s|
11
11
  s.author = {"xordog" => "xordog@gmail.com"}
12
12
  s.homepage = "https://github.com/xord/reflex"
13
13
 
14
- s.osx.deployment_target = "10.10"
15
- s.ios.deployment_target = "12.0"
14
+ s.osx.deployment_target = "11.0"
15
+ s.ios.deployment_target = "14.0"
16
16
 
17
17
  root = "${PODS_ROOT}/#{s.name}"
18
18
  exts = File.read(File.expand_path 'Rakefile', __dir__)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.3
1
+ 0.7.0
@@ -1,6 +1,7 @@
1
1
  #include "reflex/ruby/application.h"
2
2
 
3
3
 
4
+ #include "reflex/ruby/menu.h"
4
5
  #include "reflex/ruby/window.h"
5
6
  #include "defs.h"
6
7
 
@@ -9,8 +10,8 @@ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::Application)
9
10
 
10
11
  #define THIS to<Reflex::Application*>(self)
11
12
 
12
- #define CHECK_OBJ RUCY_CHECK_OBJ( Reflex::Application, self)
13
- #define CHECK RUCY_CHECK_OBJECT(Reflex::Application, self)
13
+ #define CHECK_PTR RUCY_CHECK_PTR(Reflex::Application, self)
14
+ #define CHECK RUCY_CHECK_OBJ(Reflex::Application, self)
14
15
 
15
16
  #define CALL(fun) RUCY_CALL_SUPER(THIS, fun)
16
17
 
@@ -25,7 +26,7 @@ RUCY_END
25
26
  static
26
27
  RUCY_DEF0(start)
27
28
  {
28
- CHECK_OBJ;
29
+ CHECK_PTR;
29
30
  CALL(start());
30
31
  return self;
31
32
  }
@@ -57,6 +58,57 @@ RUCY_DEF0(get_name)
57
58
  }
58
59
  RUCY_END
59
60
 
61
+ static
62
+ RUCY_DEF1(set_menu, menu)
63
+ {
64
+ CHECK;
65
+ THIS->set_menu(menu ? to<Reflex::Menu*>(menu) : NULL);
66
+ return menu;
67
+ }
68
+ RUCY_END
69
+
70
+ static
71
+ RUCY_DEF0(get_menu)
72
+ {
73
+ CHECK;
74
+ return value(THIS->menu());
75
+ }
76
+ RUCY_END
77
+
78
+ static
79
+ RUCY_DEF1(set_background, state)
80
+ {
81
+ CHECK;
82
+ THIS->set_background(to<bool>(state));
83
+ return state;
84
+ }
85
+ RUCY_END
86
+
87
+ static
88
+ RUCY_DEF0(is_background)
89
+ {
90
+ CHECK;
91
+ return value(THIS->background());
92
+ }
93
+ RUCY_END
94
+
95
+ static
96
+ RUCY_DEF1(set_background_menu, menu)
97
+ {
98
+ CHECK;
99
+ THIS->set_background_menu(menu ? to<Reflex::Menu*>(menu) : NULL);
100
+ return menu;
101
+ }
102
+ RUCY_END
103
+
104
+ static
105
+ RUCY_DEF0(get_background_menu)
106
+ {
107
+ CHECK;
108
+ return value(THIS->background_menu());
109
+ }
110
+ RUCY_END
111
+
60
112
  static
61
113
  RUCY_DEF0(each_window)
62
114
  {
@@ -64,7 +116,7 @@ RUCY_DEF0(each_window)
64
116
 
65
117
  Value ret;
66
118
  for (auto it = THIS->window_begin(), end = THIS->window_end(); it != end; ++it)
67
- ret = rb_yield(value(it->get()));
119
+ ret = yield(value(it->get()));
68
120
  return ret;
69
121
  }
70
122
  RUCY_END
@@ -74,9 +126,6 @@ RUCY_DEF1(on_start, event)
74
126
  {
75
127
  CHECK;
76
128
 
77
- RUCY_SYM(call_start_block);
78
- self.call(call_start_block);
79
-
80
129
  CALL(on_start(to<Reflex::Event*>(event)));
81
130
  }
82
131
  RUCY_END
@@ -150,6 +199,12 @@ Init_reflex_application ()
150
199
  cApplication.define_method("quit", quit);
151
200
  cApplication.define_method("name=", set_name);
152
201
  cApplication.define_method("name", get_name);
202
+ cApplication.define_method("menu=", set_menu);
203
+ cApplication.define_method("menu", get_menu);
204
+ cApplication.define_method("background=", set_background);
205
+ cApplication.define_method("background?", is_background);
206
+ cApplication.define_method("background_menu=", set_background_menu);
207
+ cApplication.define_method("background_menu", get_background_menu);
153
208
  cApplication.define_method("each_window", each_window);
154
209
  cApplication.define_method("on_start", on_start);
155
210
  cApplication.define_method("on_quit", on_quit);
@@ -9,7 +9,7 @@ RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::CaptureEvent)
9
9
 
10
10
  #define THIS to<Reflex::CaptureEvent*>(self)
11
11
 
12
- #define CHECK RUCY_CHECK_OBJ(Reflex::CaptureEvent, self)
12
+ #define CHECK RUCY_CHECK_PTR(Reflex::CaptureEvent, self)
13
13
 
14
14
 
15
15
  static
@@ -0,0 +1,89 @@
1
+ #include "reflex/ruby/constraint.h"
2
+
3
+
4
+ #include <rays/ruby/point.h>
5
+ #include "reflex/exception.h"
6
+ #include "reflex/ruby/pin.h"
7
+ #include "reflex/ruby/view.h"
8
+ #include "defs.h"
9
+
10
+
11
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::ChaseConstraint)
12
+
13
+ #define THIS to<Reflex::ChaseConstraint*>(self)
14
+
15
+ #define CHECK RUCY_CHECK_PTR(Reflex::ChaseConstraint, self)
16
+
17
+
18
+ static
19
+ RUCY_DEF_ALLOC(alloc, klass)
20
+ {
21
+ Reflex::reflex_error(
22
+ __FILE__, __LINE__, "can not instantiate ChaseConstraint class");
23
+ }
24
+ RUCY_END
25
+
26
+ static
27
+ RUCY_DEFN(set_target)
28
+ {
29
+ CHECK;
30
+ THIS->set_target(to<Reflex::Pin>(argc, argv));
31
+ }
32
+ RUCY_END
33
+
34
+ static
35
+ RUCY_DEF0(get_target)
36
+ {
37
+ CHECK;
38
+ return value(THIS->target());
39
+ }
40
+ RUCY_END
41
+
42
+ static
43
+ RUCY_DEF1(set_force, max_force)
44
+ {
45
+ CHECK;
46
+ if (max_force.is_nil())
47
+ THIS->clear_force();
48
+ else
49
+ THIS->set_force(to<float>(max_force));
50
+ }
51
+ RUCY_END
52
+
53
+ static
54
+ RUCY_DEF0(get_force)
55
+ {
56
+ CHECK;
57
+ return THIS->has_force() ? value(THIS->force()) : nil();
58
+ }
59
+ RUCY_END
60
+
61
+
62
+ static Class cChaseConstraint;
63
+
64
+ void
65
+ Init_reflex_chase_constraint ()
66
+ {
67
+ Module mReflex = define_module("Reflex");
68
+
69
+ cChaseConstraint = mReflex.define_class("ChaseConstraint", Reflex::constraint_class());
70
+ cChaseConstraint.define_alloc_func(alloc);
71
+ cChaseConstraint.define_method("target=", set_target);
72
+ cChaseConstraint.define_method("target", get_target);
73
+ cChaseConstraint.define_method("force=", set_force);
74
+ cChaseConstraint.define_method("force", get_force);
75
+ }
76
+
77
+
78
+ namespace Reflex
79
+ {
80
+
81
+
82
+ Class
83
+ chase_constraint_class ()
84
+ {
85
+ return cChaseConstraint;
86
+ }
87
+
88
+
89
+ }// Reflex
@@ -0,0 +1,69 @@
1
+ #include "reflex/ruby/clipboard.h"
2
+
3
+
4
+ #include "reflex/exception.h"
5
+ #include "defs.h"
6
+
7
+
8
+ static
9
+ RUCY_DEF_ALLOC(alloc, klass)
10
+ {
11
+ Reflex::reflex_error(__FILE__, __LINE__, "can not instantiate Clipboard class.");
12
+ }
13
+ RUCY_END
14
+
15
+ static
16
+ RUCY_DEF1(set_text, text)
17
+ {
18
+ Reflex::Clipboard clipboard;
19
+ if (!text.is_nil()) clipboard.set_text(text.c_str());
20
+ Reflex::set_clipboard(clipboard);
21
+ return text;
22
+ }
23
+ RUCY_END
24
+
25
+ static
26
+ RUCY_DEF0(get_text)
27
+ {
28
+ Reflex::Clipboard clipboard = Reflex::get_clipboard();
29
+ const char* text = clipboard.text();
30
+ return text ? value(text) : nil();
31
+ }
32
+ RUCY_END
33
+
34
+ static
35
+ RUCY_DEF0(clear)
36
+ {
37
+ Reflex::set_clipboard(Reflex::Clipboard());
38
+ return self;
39
+ }
40
+ RUCY_END
41
+
42
+
43
+ static Class cClipboard;
44
+
45
+ void
46
+ Init_reflex_clipboard ()
47
+ {
48
+ Module mReflex = define_module("Reflex");
49
+
50
+ cClipboard = mReflex.define_class("Clipboard");
51
+ cClipboard.define_alloc_func(alloc);
52
+ cClipboard.define_singleton_method("text=", set_text);
53
+ cClipboard.define_singleton_method("text", get_text);
54
+ cClipboard.define_singleton_method("clear", clear);
55
+ }
56
+
57
+
58
+ namespace Reflex
59
+ {
60
+
61
+
62
+ Class
63
+ clipboard_class ()
64
+ {
65
+ return cClipboard;
66
+ }
67
+
68
+
69
+ }// Reflex
@@ -0,0 +1,80 @@
1
+ #include "reflex/ruby/event.h"
2
+
3
+
4
+ #include <rays/ruby/color.h>
5
+ #include "defs.h"
6
+
7
+
8
+ RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::ColorEvent)
9
+
10
+ #define THIS to<Reflex::ColorEvent*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_PTR(Reflex::ColorEvent, self)
13
+
14
+
15
+ static
16
+ RUCY_DEF_ALLOC(alloc, klass)
17
+ {
18
+ return new_type<Reflex::ColorEvent>(klass);
19
+ }
20
+ RUCY_END
21
+
22
+ static
23
+ RUCY_DEF1(initialize, color)
24
+ {
25
+ CHECK;
26
+
27
+ if (color.is_nil())
28
+ argument_error(__FILE__, __LINE__);
29
+
30
+ *THIS = Reflex::ColorEvent(to<Rays::Color>(color));
31
+
32
+ return rb_call_super(0, NULL);
33
+ }
34
+ RUCY_END
35
+
36
+ static
37
+ RUCY_DEF1(initialize_copy, obj)
38
+ {
39
+ CHECK;
40
+ *THIS = to<Reflex::ColorEvent&>(obj).dup();
41
+ return self;
42
+ }
43
+ RUCY_END
44
+
45
+ static
46
+ RUCY_DEF0(get_color)
47
+ {
48
+ CHECK;
49
+ return value(THIS->color());
50
+ }
51
+ RUCY_END
52
+
53
+
54
+ static Class cColorEvent;
55
+
56
+ void
57
+ Init_reflex_color_event ()
58
+ {
59
+ Module mReflex = define_module("Reflex");
60
+
61
+ cColorEvent = mReflex.define_class("ColorEvent", Reflex::event_class());
62
+ cColorEvent.define_alloc_func(alloc);
63
+ cColorEvent.define_private_method("initialize", initialize);
64
+ cColorEvent.define_private_method("initialize_copy", initialize_copy);
65
+ cColorEvent.define_method("color", get_color);
66
+ }
67
+
68
+
69
+ namespace Reflex
70
+ {
71
+
72
+
73
+ Class
74
+ color_event_class ()
75
+ {
76
+ return cColorEvent;
77
+ }
78
+
79
+
80
+ }// Reflex
@@ -0,0 +1,121 @@
1
+ #include "reflex/ruby/color_picker.h"
2
+
3
+
4
+ #include <rays/ruby/color.h>
5
+ #include "reflex/ruby/window.h"
6
+ #include "defs.h"
7
+
8
+
9
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::ColorPicker)
10
+
11
+ #define THIS to<Reflex::ColorPicker*>(self)
12
+
13
+ #define CHECK RUCY_CHECK_OBJ(Reflex::ColorPicker, self)
14
+
15
+ #define CALL(fun) RUCY_CALL_SUPER(THIS, fun)
16
+
17
+
18
+ static
19
+ RUCY_DEF_ALLOC(alloc, klass)
20
+ {
21
+ return value(new Reflex::RubyColorPicker<Reflex::ColorPicker>, klass);
22
+ }
23
+ RUCY_END
24
+
25
+ static
26
+ RUCY_DEF1(pick_color, initial)
27
+ {
28
+ CHECK;
29
+
30
+ if (initial.is_nil())
31
+ THIS->pick_color();
32
+ else
33
+ THIS->pick_color(to<Rays::Color>(initial));
34
+ return self;
35
+ }
36
+ RUCY_END
37
+
38
+ static
39
+ RUCY_DEF1(set_owner, owner)
40
+ {
41
+ CHECK;
42
+ THIS->set_owner(owner.is_nil() ? NULL : to<Reflex::Window*>(owner));
43
+ return owner;
44
+ }
45
+ RUCY_END
46
+
47
+ static
48
+ RUCY_DEF0(get_owner)
49
+ {
50
+ CHECK;
51
+ return value(THIS->owner());
52
+ }
53
+ RUCY_END
54
+
55
+ static
56
+ RUCY_DEF1(set_alpha, state)
57
+ {
58
+ CHECK;
59
+ THIS->set_alpha(to<bool>(state));
60
+ return state;
61
+ }
62
+ RUCY_END
63
+
64
+ static
65
+ RUCY_DEF0(is_alpha)
66
+ {
67
+ CHECK;
68
+ return value(THIS->alpha());
69
+ }
70
+ RUCY_END
71
+
72
+ static
73
+ RUCY_DEF1(on_color, event)
74
+ {
75
+ CHECK;
76
+
77
+ CALL(on_color(to<Reflex::ColorEvent*>(event)));
78
+ }
79
+ RUCY_END
80
+
81
+ static
82
+ RUCY_DEF1(on_close, event)
83
+ {
84
+ CHECK;
85
+
86
+ CALL(on_close(to<Reflex::Event*>(event)));
87
+ }
88
+ RUCY_END
89
+
90
+
91
+ static Class cColorPicker;
92
+
93
+ void
94
+ Init_reflex_color_picker ()
95
+ {
96
+ Module mReflex = define_module("Reflex");
97
+
98
+ cColorPicker = mReflex.define_class("ColorPicker");
99
+ cColorPicker.define_alloc_func(alloc);
100
+ cColorPicker.define_method("pick_color!", pick_color);
101
+ cColorPicker.define_method("owner=", set_owner);
102
+ cColorPicker.define_method("owner", get_owner);
103
+ cColorPicker.define_method("alpha=", set_alpha);
104
+ cColorPicker.define_method("alpha?", is_alpha);
105
+ cColorPicker.define_method("on_color", on_color);
106
+ cColorPicker.define_method("on_close", on_close);
107
+ }
108
+
109
+
110
+ namespace Reflex
111
+ {
112
+
113
+
114
+ Class
115
+ color_picker_class ()
116
+ {
117
+ return cColorPicker;
118
+ }
119
+
120
+
121
+ }// Reflex