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
@@ -0,0 +1,181 @@
1
+ #include "reflex/ruby/file_dialog.h"
2
+
3
+
4
+ #include "reflex/ruby/window.h"
5
+ #include "defs.h"
6
+
7
+
8
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::FileDialog)
9
+
10
+ #define THIS to<Reflex::FileDialog*>(self)
11
+
12
+ #define CHECK RUCY_CHECK_OBJ(Reflex::FileDialog, self)
13
+
14
+ #define CALL(fun) RUCY_CALL_SUPER(THIS, fun)
15
+
16
+
17
+ static
18
+ VALUE alloc(VALUE klass)
19
+ {
20
+ return value(new Reflex::RubyFileDialog<Reflex::FileDialog>, klass);
21
+ }
22
+
23
+ static
24
+ VALUE open_file(VALUE self, VALUE dir)
25
+ {
26
+ CHECK;
27
+ THIS->open_file(dir.is_nil() ? NULL : dir.c_str());
28
+ return self;
29
+ }
30
+
31
+ static
32
+ VALUE open_files(VALUE self, VALUE dir)
33
+ {
34
+ CHECK;
35
+ THIS->open_files(dir.is_nil() ? NULL : dir.c_str());
36
+ return self;
37
+ }
38
+
39
+ static
40
+ VALUE open_directory(VALUE self, VALUE dir)
41
+ {
42
+ CHECK;
43
+ THIS->open_directory(dir.is_nil() ? NULL : dir.c_str());
44
+ return self;
45
+ }
46
+
47
+ static
48
+ VALUE save_file(VALUE self, VALUE dir, VALUE name)
49
+ {
50
+ CHECK;
51
+ THIS->save_file(
52
+ dir.is_nil() ? NULL : dir.c_str(),
53
+ name.is_nil() ? NULL : name.c_str());
54
+ return self;
55
+ }
56
+
57
+ static
58
+ VALUE set_owner(VALUE self, VALUE owner)
59
+ {
60
+ CHECK;
61
+ THIS->set_owner(owner.is_nil() ? NULL : to<Reflex::Window*>(owner));
62
+ return owner;
63
+ }
64
+
65
+ static
66
+ VALUE get_owner(VALUE self)
67
+ {
68
+ CHECK;
69
+ return value(THIS->owner());
70
+ }
71
+
72
+ static
73
+ VALUE set_title(VALUE self, VALUE title)
74
+ {
75
+ CHECK;
76
+ THIS->set_title(title.c_str());
77
+ return title;
78
+ }
79
+
80
+ static
81
+ VALUE get_title(VALUE self)
82
+ {
83
+ CHECK;
84
+ return value(THIS->title());
85
+ }
86
+
87
+ static
88
+ VALUE set_extensions(VALUE self, VALUE extensions)
89
+ {
90
+ CHECK;
91
+
92
+ Reflex::StringList list;
93
+ if (extensions.is_nil())
94
+ ;// emplace nothing
95
+ else if (extensions.is_s() || extensions.is_sym())
96
+ list.emplace_back(extensions.c_str());
97
+ else if (extensions.is_array())
98
+ {
99
+ size_t size = extensions.size();
100
+ for (size_t i = 0; i < size; ++i)
101
+ {
102
+ if (!extensions[i].is_s() && !extensions[i].is_sym())
103
+ argument_error(__FILE__, __LINE__);
104
+
105
+ list.emplace_back(extensions[i].c_str());
106
+ }
107
+ }
108
+ else
109
+ argument_error(__FILE__, __LINE__);
110
+
111
+ THIS->set_extensions(list);
112
+ return extensions;
113
+ }
114
+
115
+ static
116
+ VALUE get_extensions(VALUE self)
117
+ {
118
+ CHECK;
119
+
120
+ const auto& extensions = THIS->extensions();
121
+
122
+ Value values = array(NULL, extensions.size());
123
+ for (const auto& extension : extensions)
124
+ values.push(extension.c_str());
125
+
126
+ return values;
127
+ }
128
+
129
+ static
130
+ VALUE on_file(VALUE self, VALUE event)
131
+ {
132
+ CHECK;
133
+
134
+ CALL(on_file(to<Reflex::FileEvent*>(event)));
135
+ }
136
+
137
+ static
138
+ VALUE on_cancel(VALUE self, VALUE event)
139
+ {
140
+ CHECK;
141
+
142
+ CALL(on_cancel(to<Reflex::Event*>(event)));
143
+ }
144
+
145
+
146
+ static Class cFileDialog;
147
+
148
+ void
149
+ Init_reflex_file_dialog ()
150
+ {
151
+ Module mReflex = rb_define_module("Reflex");
152
+
153
+ cFileDialog = rb_define_class_under(mReflex, "FileDialog", rb_cObject);
154
+ rb_define_alloc_func(cFileDialog, alloc);
155
+ cFileDialog.define_method("open_file!", open_file);
156
+ cFileDialog.define_method("open_files!", open_files);
157
+ cFileDialog.define_method("open_directory!", open_directory);
158
+ cFileDialog.define_method("save_file!", save_file);
159
+ rb_define_method(cFileDialog, "owner=", RUBY_METHOD_FUNC(set_owner), 1);
160
+ rb_define_method(cFileDialog, "owner", RUBY_METHOD_FUNC(get_owner), 0);
161
+ rb_define_method(cFileDialog, "title=", RUBY_METHOD_FUNC(set_title), 1);
162
+ rb_define_method(cFileDialog, "title", RUBY_METHOD_FUNC(get_title), 0);
163
+ rb_define_method(cFileDialog, "extensions=", RUBY_METHOD_FUNC(set_extensions), 1);
164
+ rb_define_method(cFileDialog, "extensions", RUBY_METHOD_FUNC(get_extensions), 0);
165
+ rb_define_method(cFileDialog, "on_file", RUBY_METHOD_FUNC(on_file), 1);
166
+ rb_define_method(cFileDialog, "on_cancel", RUBY_METHOD_FUNC(on_cancel), 1);
167
+ }
168
+
169
+
170
+ namespace Reflex
171
+ {
172
+
173
+
174
+ Class
175
+ file_dialog_class ()
176
+ {
177
+ return cFileDialog;
178
+ }
179
+
180
+
181
+ }// Reflex
@@ -0,0 +1,103 @@
1
+ #include "reflex/ruby/event.h"
2
+
3
+
4
+ #include "defs.h"
5
+
6
+
7
+ RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::FileEvent)
8
+
9
+ #define THIS to<Reflex::FileEvent*>(self)
10
+
11
+ #define CHECK RUCY_CHECK_PTR(Reflex::FileEvent, self)
12
+
13
+
14
+ static
15
+ VALUE alloc(VALUE klass)
16
+ {
17
+ return new_type<Reflex::FileEvent>(klass);
18
+ }
19
+
20
+ static
21
+ VALUE initialize(VALUE self, VALUE action, VALUE paths)
22
+ {
23
+ CHECK;
24
+
25
+ if (!paths.is_array())
26
+ argument_error(__FILE__, __LINE__);
27
+
28
+ Reflex::StringList list;
29
+ int size = paths.size();
30
+ for (int i = 0; i < size; ++i)
31
+ {
32
+ if (paths[i].is_nil())
33
+ argument_error(__FILE__, __LINE__);
34
+
35
+ list.emplace_back(paths[i].c_str());
36
+ }
37
+ *THIS = Reflex::FileEvent((Reflex::FileEvent::Action) to<uint>(action), list);
38
+
39
+ return rb_call_super(0, NULL);
40
+ }
41
+
42
+ static
43
+ VALUE initialize_copy(VALUE self, VALUE obj)
44
+ {
45
+ CHECK;
46
+ *THIS = to<Reflex::FileEvent&>(obj).dup();
47
+ return self;
48
+ }
49
+
50
+ static
51
+ VALUE get_action(VALUE self)
52
+ {
53
+ CHECK;
54
+ return value(THIS->action());
55
+ }
56
+
57
+ static
58
+ VALUE get_paths(VALUE self)
59
+ {
60
+ CHECK;
61
+
62
+ const Reflex::StringList& paths = THIS->paths();
63
+
64
+ Value values = array(NULL, paths.size());
65
+ for (const auto& path : paths)
66
+ values.push(path.c_str());
67
+
68
+ return values;
69
+ }
70
+
71
+
72
+ static Class cFileEvent;
73
+
74
+ void
75
+ Init_reflex_file_event ()
76
+ {
77
+ Module mReflex = rb_define_module("Reflex");
78
+
79
+ cFileEvent = mReflex.define_class("FileEvent", Reflex::event_class());
80
+ rb_define_alloc_func(cFileEvent, alloc);
81
+ rb_define_private_method(cFileEvent, "initialize", RUBY_METHOD_FUNC(initialize), 2);
82
+ rb_define_private_method(cFileEvent, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
83
+ rb_define_method(cFileEvent, "action", RUBY_METHOD_FUNC(get_action), 0);
84
+ rb_define_method(cFileEvent, "paths", RUBY_METHOD_FUNC(get_paths), 0);
85
+
86
+ cFileEvent.define_const("ACTION_NONE", Reflex::FileEvent::ACTION_NONE);
87
+ cFileEvent.define_const("OPEN", Reflex::FileEvent::OPEN);
88
+ cFileEvent.define_const("SAVE", Reflex::FileEvent::SAVE);
89
+ }
90
+
91
+
92
+ namespace Reflex
93
+ {
94
+
95
+
96
+ Class
97
+ file_event_class ()
98
+ {
99
+ return cFileEvent;
100
+ }
101
+
102
+
103
+ }// Reflex
@@ -10,7 +10,7 @@ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::Filter)
10
10
 
11
11
  #define THIS to<Reflex::Filter*>(self)
12
12
 
13
- #define CHECK RUCY_CHECK_OBJ(Reflex::Filter, self)
13
+ #define CHECK RUCY_CHECK_PTR(Reflex::Filter, self)
14
14
 
15
15
  #define CALL(fun) RUCY_CALL_SUPER(THIS, fun)
16
16
 
@@ -9,7 +9,7 @@ RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::FocusEvent)
9
9
 
10
10
  #define THIS to<Reflex::FocusEvent*>(self)
11
11
 
12
- #define CHECK RUCY_CHECK_OBJ(Reflex::FocusEvent, self)
12
+ #define CHECK RUCY_CHECK_PTR(Reflex::FocusEvent, self)
13
13
 
14
14
 
15
15
  static
@@ -10,7 +10,7 @@ RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::FrameEvent)
10
10
 
11
11
  #define THIS to<Reflex::FrameEvent*>(self)
12
12
 
13
- #define CHECK RUCY_CHECK_OBJ(Reflex::FrameEvent, self)
13
+ #define CHECK RUCY_CHECK_PTR(Reflex::FrameEvent, self)
14
14
 
15
15
 
16
16
  static
@@ -0,0 +1,48 @@
1
+ #include "reflex/ruby/gamepad.h"
2
+
3
+
4
+ #include "reflex/ruby/device.h"
5
+ #include "defs.h"
6
+
7
+
8
+ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::Gamepad)
9
+
10
+
11
+ static
12
+ VALUE alloc(VALUE klass)
13
+ {
14
+ Reflex::reflex_error(__FILE__, __LINE__, "can not instantiate Gamepad class.");
15
+ }
16
+
17
+ static
18
+ VALUE s_enable(VALUE self)
19
+ {
20
+ Reflex::enable_gamepad();
21
+ }
22
+
23
+
24
+ static Class cGamepad;
25
+
26
+ void
27
+ Init_reflex_gamepad ()
28
+ {
29
+ Module mReflex = rb_define_module("Reflex");
30
+
31
+ cGamepad = mReflex.define_class("Gamepad", Reflex::device_class());
32
+ rb_define_alloc_func(cGamepad, alloc);
33
+ rb_define_singleton_method(cGamepad, "enable", RUBY_METHOD_FUNC(s_enable), 0);
34
+ }
35
+
36
+
37
+ namespace Reflex
38
+ {
39
+
40
+
41
+ Class
42
+ gamepad_class ()
43
+ {
44
+ return cGamepad;
45
+ }
46
+
47
+
48
+ }// Reflex
@@ -10,7 +10,7 @@ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::ImageView)
10
10
 
11
11
  #define THIS to<Reflex::ImageView*>(self)
12
12
 
13
- #define CHECK RUCY_CHECK_OBJECT(Reflex::ImageView, self)
13
+ #define CHECK RUCY_CHECK_OBJ(Reflex::ImageView, self)
14
14
 
15
15
  #define CALL(fun) RUCY_WRAPPER_CALL(Reflex::ImageView, THIS, fun)
16
16
 
@@ -8,7 +8,7 @@ RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::KeyEvent)
8
8
 
9
9
  #define THIS to<Reflex::KeyEvent*>(self)
10
10
 
11
- #define CHECK RUCY_CHECK_OBJ(Reflex::KeyEvent, self)
11
+ #define CHECK RUCY_CHECK_PTR(Reflex::KeyEvent, self)
12
12
 
13
13
 
14
14
  static
@@ -47,278 +47,6 @@ VALUE get_action(VALUE self)
47
47
  return value(THIS->action());
48
48
  }
49
49
 
50
- static
51
- VALUE get_key(VALUE self)
52
- {
53
- CHECK;
54
- switch (THIS->code())
55
- {
56
- #define CASE(key) case Reflex::KEY_##key
57
- #define SYMBOL1(name) SYMBOL2(_##name, #name)
58
- #define SYMBOL2(var, sym) {RUCY_SYMBOL(var, sym); return var.value();}
59
-
60
- CASE(A): SYMBOL1(a);
61
- CASE(B): SYMBOL1(b);
62
- CASE(C): SYMBOL1(c);
63
- CASE(D): SYMBOL1(d);
64
- CASE(E): SYMBOL1(e);
65
- CASE(F): SYMBOL1(f);
66
- CASE(G): SYMBOL1(g);
67
- CASE(H): SYMBOL1(h);
68
- CASE(I): SYMBOL1(i);
69
- CASE(J): SYMBOL1(j);
70
- CASE(K): SYMBOL1(k);
71
- CASE(L): SYMBOL1(l);
72
- CASE(M): SYMBOL1(m);
73
- CASE(N): SYMBOL1(n);
74
- CASE(O): SYMBOL1(o);
75
- CASE(P): SYMBOL1(p);
76
- CASE(Q): SYMBOL1(q);
77
- CASE(R): SYMBOL1(r);
78
- CASE(S): SYMBOL1(s);
79
- CASE(T): SYMBOL1(t);
80
- CASE(U): SYMBOL1(u);
81
- CASE(V): SYMBOL1(v);
82
- CASE(W): SYMBOL1(w);
83
- CASE(X): SYMBOL1(x);
84
- CASE(Y): SYMBOL1(y);
85
- CASE(Z): SYMBOL1(z);
86
-
87
- CASE(0):
88
- CASE(NUM_0): SYMBOL1(0);
89
- CASE(1):
90
- CASE(NUM_1): SYMBOL1(1);
91
- CASE(2):
92
- CASE(NUM_2): SYMBOL1(2);
93
- CASE(3):
94
- CASE(NUM_3): SYMBOL1(3);
95
- CASE(4):
96
- CASE(NUM_4): SYMBOL1(4);
97
- CASE(5):
98
- CASE(NUM_5): SYMBOL1(5);
99
- CASE(6):
100
- CASE(NUM_6): SYMBOL1(6);
101
- CASE(7):
102
- CASE(NUM_7): SYMBOL1(7);
103
- CASE(8):
104
- CASE(NUM_8): SYMBOL1(8);
105
- CASE(9):
106
- CASE(NUM_9): SYMBOL1(9);
107
-
108
- CASE(MINUS): SYMBOL1(minus);
109
- CASE(EQUAL): SYMBOL1(equal);
110
- CASE(COMMA): SYMBOL1(comma);
111
- CASE(PERIOD): SYMBOL1(period);
112
- CASE(SEMICOLON): SYMBOL1(semicolon);
113
- CASE(QUOTE): SYMBOL1(quote);
114
- CASE(SLASH): SYMBOL1(slash);
115
- CASE(BACKSLASH): SYMBOL1(backslash);
116
- CASE(UNDERSCORE): SYMBOL1(underscore);
117
- CASE(GRAVE): SYMBOL1(grave);
118
- CASE(YEN): SYMBOL1(yen);
119
- CASE(LBRACKET): SYMBOL1(lbracket);
120
- CASE(RBRACKET): SYMBOL1(rbracket);
121
-
122
- #if defined(OSX) || defined(IOS) || defined(WIN32) || defined(LINUX) || defined(WASM)
123
- CASE(ENTER): SYMBOL1(enter);
124
- #else
125
- CASE(ENTER): SYMBOL1(enter);
126
- CASE(RETURN): SYMBOL2(_return, "return");
127
- #endif
128
- CASE(SPACE): SYMBOL1(space);
129
- CASE(TAB): SYMBOL1(tab);
130
- CASE(DELETE): SYMBOL2(_delete, "delete");
131
- CASE(BACKSPACE): SYMBOL1(backspace);
132
- CASE(INSERT): SYMBOL1(insert);
133
- CASE(ESCAPE): SYMBOL1(escape);
134
-
135
- CASE(LEFT): SYMBOL1(left);
136
- CASE(RIGHT): SYMBOL1(right);
137
- CASE(UP): SYMBOL1(up);
138
- CASE(DOWN): SYMBOL1(down);
139
- CASE(HOME): SYMBOL1(home);
140
- CASE(END): SYMBOL1(end);
141
- CASE(PAGEUP): SYMBOL1(pageup);
142
- CASE(PAGEDOWN): SYMBOL1(pagedown);
143
-
144
- #if !defined(OSX) && !defined(IOS) && !defined(LINUX) && !defined(WASM)
145
- CASE(SHIFT):
146
- #endif
147
- CASE(LSHIFT):
148
- CASE(RSHIFT): SYMBOL1(shift);
149
- #if !defined(OSX) && !defined(IOS) && !defined(LINUX) && !defined(WASM)
150
- CASE(CONTROL):
151
- #endif
152
- CASE(LCONTROL):
153
- CASE(RCONTROL): SYMBOL1(control);
154
- CASE(ALT):
155
- #if !defined(IOS) && !defined(LINUX) && !defined(WASM)
156
- CASE(LALT):
157
- #endif
158
- CASE(RALT): SYMBOL1(alt);
159
- CASE(LWIN):
160
- CASE(RWIN): SYMBOL1(win);
161
- #if !defined(IOS) && !defined(LINUX) && !defined(WASM)
162
- CASE(LCOMMAND):
163
- CASE(RCOMMAND): SYMBOL1(command);
164
- CASE(LOPTION):
165
- CASE(ROPTION): SYMBOL1(option);
166
- #endif
167
- CASE(FUNCTION): SYMBOL1(function);
168
-
169
- CASE(F1): SYMBOL1(f1);
170
- CASE(F2): SYMBOL1(f2);
171
- CASE(F3): SYMBOL1(f3);
172
- CASE(F4): SYMBOL1(f4);
173
- CASE(F5): SYMBOL1(f5);
174
- CASE(F6): SYMBOL1(f6);
175
- CASE(F7): SYMBOL1(f7);
176
- CASE(F8): SYMBOL1(f8);
177
- CASE(F9): SYMBOL1(f9);
178
- CASE(F10): SYMBOL1(f10);
179
- CASE(F11): SYMBOL1(f11);
180
- CASE(F12): SYMBOL1(f12);
181
- CASE(F13): SYMBOL1(f13);
182
- CASE(F14): SYMBOL1(f14);
183
- CASE(F15): SYMBOL1(f15);
184
- CASE(F16): SYMBOL1(f16);
185
- CASE(F17): SYMBOL1(f17);
186
- CASE(F18): SYMBOL1(f18);
187
- CASE(F19): SYMBOL1(f19);
188
- CASE(F20): SYMBOL1(f20);
189
- CASE(F21): SYMBOL1(f21);
190
- CASE(F22): SYMBOL1(f22);
191
- CASE(F23): SYMBOL1(f23);
192
- CASE(F24): SYMBOL1(f24);
193
-
194
- CASE(NUM_PLUS): SYMBOL1(plus);
195
- CASE(NUM_MINUS): SYMBOL1(minus);
196
- CASE(NUM_MULTIPLY): SYMBOL1(multiply);
197
- CASE(NUM_DIVIDE): SYMBOL1(divide);
198
- CASE(NUM_EQUAL): SYMBOL1(equal);
199
- CASE(NUM_COMMA): SYMBOL1(comma);
200
- CASE(NUM_DECIMAL): SYMBOL1(decimal);
201
- #if !defined(IOS) && !defined(LINUX) && !defined(WASM)
202
- CASE(NUM_CLEAR): SYMBOL1(clear);
203
- #endif
204
- CASE(NUM_ENTER): SYMBOL1(enter);
205
-
206
- CASE(CAPSLOCK): SYMBOL1(capslock);
207
- CASE(NUMLOCK): SYMBOL1(numlock);
208
- CASE(SCROLLLOCK): SYMBOL1(scrolllock);
209
-
210
- CASE(PRINTSCREEN): SYMBOL1(printscreen);
211
- CASE(PAUSE): SYMBOL1(pause);
212
- CASE(BREAK): SYMBOL2(_break, "break");
213
- CASE(SECTION): SYMBOL1(section);
214
- CASE(HELP): SYMBOL1(help);
215
-
216
- CASE(EISU): SYMBOL1(eisu);
217
- CASE(KANA): SYMBOL1(kana);
218
- CASE(KANJI): SYMBOL1(kanji);
219
- CASE(IME_ON): SYMBOL1(ime_on);
220
- CASE(IME_OFF): SYMBOL1(ime_off);
221
- CASE(IME_MODECHANGE): SYMBOL1(ime_mode_change);
222
- CASE(CONVERT): SYMBOL1(convert);
223
- CASE(NONCONVERT): SYMBOL1(nonconvert);
224
- CASE(ACCEPT): SYMBOL1(accept);
225
- CASE(PROCESS): SYMBOL1(process);
226
-
227
- CASE(VOLUME_UP): SYMBOL1(volume_up);
228
- CASE(VOLUME_DOWN): SYMBOL1(volume_down);
229
- CASE(MUTE): SYMBOL1(mute);
230
-
231
- CASE(SLEEP): SYMBOL1(sleep);
232
- CASE(EXEC): SYMBOL1(exec);
233
- CASE(PRINT): SYMBOL1(print);
234
- CASE(APPS): SYMBOL1(apps);
235
- CASE(SELECT): SYMBOL1(select);
236
- CASE(CLEAR): SYMBOL1(clear);
237
-
238
- CASE(NAVIGATION_VIEW): SYMBOL1(navigation_view);
239
- CASE(NAVIGATION_MENU): SYMBOL1(navigation_menu);
240
- CASE(NAVIGATION_UP): SYMBOL1(navigation_up);
241
- CASE(NAVIGATION_DOWN): SYMBOL1(navigation_down);
242
- CASE(NAVIGATION_LEFT): SYMBOL1(navigation_left);
243
- CASE(NAVIGATION_RIGHT): SYMBOL1(navigation_right);
244
- CASE(NAVIGATION_ACCEPT): SYMBOL1(navigation_accept);
245
- CASE(NAVIGATION_CANCEL): SYMBOL1(navigation_cancel);
246
-
247
- CASE(BROWSER_BACK): SYMBOL1(browser_back);
248
- CASE(BROWSER_FORWARD): SYMBOL1(browser_forward);
249
- CASE(BROWSER_REFRESH): SYMBOL1(browser_refresh);
250
- CASE(BROWSER_STOP): SYMBOL1(browser_stop);
251
- CASE(BROWSER_SEARCH): SYMBOL1(browser_search);
252
- CASE(BROWSER_FAVORITES): SYMBOL1(browser_favorites);
253
- CASE(BROWSER_HOME): SYMBOL1(browser_home);
254
-
255
- CASE(MEDIA_PREV_TRACK): SYMBOL1(media_prev);
256
- CASE(MEDIA_NEXT_TRACK): SYMBOL1(media_next);
257
- CASE(MEDIA_PLAY_PAUSE): SYMBOL1(media_play_pause);
258
- CASE(MEDIA_STOP): SYMBOL1(media_stop);
259
-
260
- CASE(LAUNCH_MAIL): SYMBOL1(launch_mail);
261
- CASE(LAUNCH_MEDIA_SELECT): SYMBOL1(launch_media_select);
262
- CASE(LAUNCH_APP1): SYMBOL1(launch_app1);
263
- CASE(LAUNCH_APP2): SYMBOL1(launch_app2);
264
-
265
- CASE(GAMEPAD_LEFT): SYMBOL1(gamepad_left);
266
- CASE(GAMEPAD_RIGHT): SYMBOL1(gamepad_right);
267
- CASE(GAMEPAD_UP): SYMBOL1(gamepad_up);
268
- CASE(GAMEPAD_DOWN): SYMBOL1(gamepad_down);
269
- CASE(GAMEPAD_LSTICK_LEFT): SYMBOL1(gamepad_lstick_left);
270
- CASE(GAMEPAD_LSTICK_RIGHT): SYMBOL1(gamepad_lstick_right);
271
- CASE(GAMEPAD_LSTICK_UP): SYMBOL1(gamepad_lstick_up);
272
- CASE(GAMEPAD_LSTICK_DOWN): SYMBOL1(gamepad_lstick_down);
273
- CASE(GAMEPAD_RSTICK_LEFT): SYMBOL1(gamepad_rstick_left);
274
- CASE(GAMEPAD_RSTICK_RIGHT): SYMBOL1(gamepad_rstick_right);
275
- CASE(GAMEPAD_RSTICK_UP): SYMBOL1(gamepad_rstick_up);
276
- CASE(GAMEPAD_RSTICK_DOWN): SYMBOL1(gamepad_rstick_down);
277
- CASE(GAMEPAD_A): SYMBOL1(gamepad_a);
278
- CASE(GAMEPAD_B): SYMBOL1(gamepad_b);
279
- CASE(GAMEPAD_X): SYMBOL1(gamepad_x);
280
- CASE(GAMEPAD_Y): SYMBOL1(gamepad_y);
281
- CASE(GAMEPAD_LTRIGGER): SYMBOL1(gamepad_ltrigger);
282
- CASE(GAMEPAD_RTRIGGER): SYMBOL1(gamepad_rtrigger);
283
- CASE(GAMEPAD_LSHOULDER): SYMBOL1(gamepad_lshoulder);
284
- CASE(GAMEPAD_RSHOULDER): SYMBOL1(gamepad_rshoulder);
285
- CASE(GAMEPAD_LTHUMB): SYMBOL1(gamepad_lthumb);
286
- CASE(GAMEPAD_RTHUMB): SYMBOL1(gamepad_rthumb);
287
- CASE(GAMEPAD_LPADDLE_0): SYMBOL1(gamepad_lpaddle_0);
288
- CASE(GAMEPAD_LPADDLE_1): SYMBOL1(gamepad_lpaddle_1);
289
- CASE(GAMEPAD_RPADDLE_0): SYMBOL1(gamepad_rpaddle_0);
290
- CASE(GAMEPAD_RPADDLE_1): SYMBOL1(gamepad_rpaddle_1);
291
- CASE(GAMEPAD_HOME): SYMBOL1(gamepad_home);
292
- CASE(GAMEPAD_MENU): SYMBOL1(gamepad_menu);
293
- CASE(GAMEPAD_OPTION): SYMBOL1(gamepad_option);
294
- CASE(GAMEPAD_SHARE): SYMBOL1(gamepad_share);
295
- CASE(GAMEPAD_START): SYMBOL1(gamepad_start);
296
- CASE(GAMEPAD_SELECT): SYMBOL1(gamepad_select);
297
- CASE(GAMEPAD_BUTTON_TOUCH): SYMBOL1(gamepad_button_touch);
298
- CASE(GAMEPAD_BUTTON_0): SYMBOL1(gamepad_button_0);
299
- CASE(GAMEPAD_BUTTON_1): SYMBOL1(gamepad_button_1);
300
- CASE(GAMEPAD_BUTTON_2): SYMBOL1(gamepad_button_2);
301
- CASE(GAMEPAD_BUTTON_3): SYMBOL1(gamepad_button_3);
302
- CASE(GAMEPAD_BUTTON_4): SYMBOL1(gamepad_button_4);
303
- CASE(GAMEPAD_BUTTON_5): SYMBOL1(gamepad_button_5);
304
- CASE(GAMEPAD_BUTTON_6): SYMBOL1(gamepad_button_6);
305
- CASE(GAMEPAD_BUTTON_7): SYMBOL1(gamepad_button_7);
306
- CASE(GAMEPAD_BUTTON_8): SYMBOL1(gamepad_button_8);
307
- CASE(GAMEPAD_BUTTON_9): SYMBOL1(gamepad_button_9);
308
- CASE(GAMEPAD_BUTTON_10): SYMBOL1(gamepad_button_10);
309
- CASE(GAMEPAD_BUTTON_11): SYMBOL1(gamepad_button_11);
310
- CASE(GAMEPAD_BUTTON_12): SYMBOL1(gamepad_button_12);
311
- CASE(GAMEPAD_BUTTON_13): SYMBOL1(gamepad_button_13);
312
- CASE(GAMEPAD_BUTTON_14): SYMBOL1(gamepad_button_14);
313
- CASE(GAMEPAD_BUTTON_15): SYMBOL1(gamepad_button_15);
314
-
315
- #undef CASE
316
- #undef SYMBOL1
317
- #undef SYMBOL2
318
- }
319
- return nil();
320
- }
321
-
322
50
  static
323
51
  VALUE get_chars(VALUE self)
324
52
  {
@@ -368,7 +96,6 @@ Init_reflex_key_event ()
368
96
  rb_define_private_method(cKeyEvent, "initialize", RUBY_METHOD_FUNC(initialize), 5);
369
97
  rb_define_private_method(cKeyEvent, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
370
98
  rb_define_method(cKeyEvent, "action", RUBY_METHOD_FUNC(get_action), 0);
371
- rb_define_method(cKeyEvent, "key", RUBY_METHOD_FUNC(get_key), 0);
372
99
  rb_define_method(cKeyEvent, "chars", RUBY_METHOD_FUNC(get_chars), 0);
373
100
  rb_define_method(cKeyEvent, "code", RUBY_METHOD_FUNC(get_code), 0);
374
101
  rb_define_method(cKeyEvent, "modifiers", RUBY_METHOD_FUNC(get_modifiers), 0);
@@ -9,7 +9,7 @@ RUCY_DEFINE_WRAPPER_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::LineShape)
9
9
 
10
10
  #define THIS to<Reflex::LineShape*>(self)
11
11
 
12
- #define CHECK RUCY_CHECK_OBJ(Reflex::LineShape, self)
12
+ #define CHECK RUCY_CHECK_PTR(Reflex::LineShape, self)
13
13
 
14
14
  #define CALL(fun) RUCY_CALL_SUPER(THIS, fun)
15
15