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
@@ -18,6 +18,7 @@ namespace Reflex
18
18
  {
19
19
 
20
20
 
21
+ class Menu;
21
22
  class View;
22
23
 
23
24
 
@@ -33,19 +34,35 @@ namespace Reflex
33
34
  enum Flag
34
35
  {
35
36
 
36
- FLAG_CLOSABLE = Xot::bit(0),
37
+ FLAG_CLOSABLE = Xot::bit(0),
37
38
 
38
- FLAG_MINIMIZABLE = Xot::bit(1),
39
+ FLAG_MINIMIZABLE = Xot::bit(1),
39
40
 
40
- FLAG_RESIZABLE = Xot::bit(2),
41
+ FLAG_RESIZABLE = Xot::bit(2),
41
42
 
42
- FLAG_FULLSCREEN = Xot::bit(3),
43
+ FLAG_TITLEBAR_BUTTONS = Xot::bit(3),
43
44
 
44
- FLAG_PORTRAIT = Xot::bit(4),
45
+ FLAG_TITLEBAR_BACKGROUND = Xot::bit(4),
45
46
 
46
- FLAG_LANDSCAPE = Xot::bit(5),
47
+ FLAG_UNLISTED = Xot::bit(5),
47
48
 
48
- FLAG_LAST = FLAG_LANDSCAPE
49
+ FLAG_SHADOW = Xot::bit(6),
50
+
51
+ FLAG_TRANSPARENT = Xot::bit(7),
52
+
53
+ FLAG_FULLSCREEN = Xot::bit(8),
54
+
55
+ FLAG_ALWAYS_ON_TOP = Xot::bit(9),
56
+
57
+ FLAG_ALWAYS_ON_BOTTOM = Xot::bit(10),
58
+
59
+ FLAG_POINTER_THROUGH = Xot::bit(11),
60
+
61
+ FLAG_PORTRAIT = Xot::bit(12),
62
+
63
+ FLAG_LANDSCAPE = Xot::bit(13),
64
+
65
+ FLAG_LAST = FLAG_LANDSCAPE
49
66
 
50
67
  };// Flag
51
68
 
@@ -65,6 +82,8 @@ namespace Reflex
65
82
 
66
83
  virtual Point to_screen (const Point& point) const;
67
84
 
85
+ virtual bool active () const;
86
+
68
87
  virtual void set_title (const char* title);
69
88
 
70
89
  virtual const char* title () const;
@@ -75,7 +94,17 @@ namespace Reflex
75
94
 
76
95
  virtual Bounds frame () const;
77
96
 
78
- virtual void set_flag (uint flags);
97
+ virtual void set_menu (Menu* menu);
98
+
99
+ virtual Menu* menu ();
100
+
101
+ virtual const Menu* menu () const;
102
+
103
+ virtual void set_pointer_through_alpha (float alpha);
104
+
105
+ virtual float pointer_through_alpha () const;
106
+
107
+ virtual void set_flags (uint flags);
79
108
 
80
109
  virtual uint flags () const;
81
110
 
@@ -99,16 +128,16 @@ namespace Reflex
99
128
 
100
129
  virtual const Painter* painter () const;
101
130
 
102
- virtual void on_activate (Event* e);
103
-
104
- virtual void on_deactivate (Event* e);
105
-
106
131
  virtual void on_show (Event* e);
107
132
 
108
133
  virtual void on_hide (Event* e);
109
134
 
110
135
  virtual void on_close (Event* e);
111
136
 
137
+ virtual void on_activate (Event* e);
138
+
139
+ virtual void on_deactivate (Event* e);
140
+
112
141
  virtual void on_update (UpdateEvent* e);
113
142
 
114
143
  virtual void on_draw (DrawEvent* e);
@@ -123,6 +152,12 @@ namespace Reflex
123
152
 
124
153
  virtual void on_key_up (KeyEvent* e);
125
154
 
155
+ virtual void on_text (TextEvent* e);
156
+
157
+ virtual void on_text_preedit (TextEvent* e);
158
+
159
+ virtual void on_text_commit (TextEvent* e);
160
+
126
161
  virtual void on_pointer (PointerEvent* e);
127
162
 
128
163
  virtual void on_pointer_down (PointerEvent* e);
@@ -133,8 +168,18 @@ namespace Reflex
133
168
 
134
169
  virtual void on_pointer_cancel (PointerEvent* e);
135
170
 
171
+ virtual void on_pointer_enter (PointerEvent* e);
172
+
173
+ virtual void on_pointer_leave (PointerEvent* e);
174
+
136
175
  virtual void on_wheel (WheelEvent* e);
137
176
 
177
+ virtual void on_file (FileEvent* e);
178
+
179
+ virtual void on_file_open (FileEvent* e);
180
+
181
+ virtual void on_file_save (FileEvent* e);
182
+
138
183
  virtual void on_midi (MIDIEvent* e);
139
184
 
140
185
  virtual void on_note (NoteEvent* e);
data/include/reflex.h CHANGED
@@ -15,14 +15,22 @@
15
15
  #include <reflex/style.h>
16
16
  #include <reflex/timer.h>
17
17
  #include <reflex/shape.h>
18
+ #include <reflex/pin.h>
19
+ #include <reflex/constraint.h>
18
20
  #include <reflex/filter.h>
19
21
 
20
22
  #include <reflex/application.h>
21
23
  #include <reflex/window.h>
22
24
  #include <reflex/view.h>
25
+ #include <reflex/menu.h>
23
26
  #include <reflex/screen.h>
27
+ #include <reflex/clipboard.h>
28
+ #include <reflex/file_dialog.h>
29
+ #include <reflex/color_picker.h>
24
30
 
25
31
  #include <reflex/device.h>
32
+ #include <reflex/midi.h>
33
+ #include <reflex/gamepad.h>
26
34
 
27
35
  #include <reflex/image_view.h>
28
36
 
@@ -33,11 +33,11 @@ module Reflex
33
33
 
34
34
  private
35
35
 
36
- def call_start_block()
37
- return unless @start_block
38
- Xot::BlockUtil.instance_eval_or_block_call self, &@start_block
39
- @start_block = nil
40
- end
36
+ def call_start_block()
37
+ return unless @start_block
38
+ Xot::BlockUtil.instance_eval_or_block_call self, &@start_block
39
+ @start_block = nil
40
+ end
41
41
 
42
42
  end# Application
43
43
 
@@ -1,6 +1,8 @@
1
- require 'rays/autoinit'
1
+ # load reflex_ext before Rays.init! to set pre_init_fun
2
2
  require 'reflex/ext'
3
3
 
4
+ require 'rays/autoinit'
5
+
4
6
 
5
7
  unless defined?($REFLEX_NOAUTOINIT) && $REFLEX_NOAUTOINIT
6
8
  Reflex.init!
data/lib/reflex/button.rb CHANGED
@@ -63,9 +63,9 @@ module Reflex
63
63
 
64
64
  private
65
65
 
66
- def pressing?()
67
- capturing? :pointer
68
- end
66
+ def pressing?()
67
+ capturing? :pointer
68
+ end
69
69
 
70
70
  end# Button
71
71
 
@@ -0,0 +1,15 @@
1
+ require 'reflex/ext'
2
+ require 'reflex/constraint'
3
+
4
+
5
+ module Reflex
6
+
7
+
8
+ class ChaseConstraint < Constraint
9
+
10
+ universal_accessor :target, :force
11
+
12
+ end# ChaseConstraint
13
+
14
+
15
+ end# Reflex
@@ -0,0 +1,19 @@
1
+ require 'xot/universal_accessor'
2
+ require 'reflex/ext'
3
+
4
+
5
+ module Reflex
6
+
7
+
8
+ class Clipboard
9
+
10
+ class << self
11
+
12
+ universal_accessor :text
13
+
14
+ end
15
+
16
+ end# Clipboard
17
+
18
+
19
+ end# Reflex
@@ -0,0 +1,16 @@
1
+ require 'reflex/ext'
2
+
3
+
4
+ module Reflex
5
+
6
+
7
+ class ColorEvent < Event
8
+
9
+ def inspect()
10
+ "#<Reflex::ColorEvent color:#{color}>"
11
+ end
12
+
13
+ end# ColorEvent
14
+
15
+
16
+ end# Reflex
@@ -0,0 +1,45 @@
1
+ require 'xot/setter'
2
+ require 'xot/hookable'
3
+ require 'xot/block_util'
4
+ require 'xot/universal_accessor'
5
+ require 'xot/inspectable'
6
+ require 'reflex/ext'
7
+
8
+
9
+ module Reflex
10
+
11
+
12
+ class ColorPicker
13
+
14
+ include Xot::Setter
15
+ include Xot::Hookable
16
+ include Xot::Inspectable
17
+
18
+ def initialize(options = nil, &block)
19
+ super()
20
+ set options if options
21
+ Xot::BlockUtil.instance_eval_or_block_call self, &block if block
22
+ end
23
+
24
+ universal_accessor :owner, alpha: {reader: :alpha?}
25
+
26
+ def pick_color(initial = nil, &block)
27
+ @color_block = block ? -> e {block.call e.color, e} : nil
28
+ pick_color! initial
29
+ self
30
+ end
31
+
32
+ private
33
+
34
+ def call_color_block(e)
35
+ @color_block&.call e
36
+ end
37
+
38
+ def clear_color_block()
39
+ @color_block = nil
40
+ end
41
+
42
+ end# ColorPicker
43
+
44
+
45
+ end# Reflex
@@ -0,0 +1,29 @@
1
+ require 'xot/setter'
2
+ require 'xot/universal_accessor'
3
+ require 'reflex/ext'
4
+ require 'reflex/helper'
5
+
6
+
7
+ module Reflex
8
+
9
+
10
+ class Constraint
11
+
12
+ include Xot::Setter
13
+ include HasTags
14
+
15
+ def pins()
16
+ [get_pin(0), get_pin(1)]
17
+ end
18
+
19
+ def views()
20
+ pins.map(&:view)
21
+ end
22
+
23
+ universal_accessor :name, :selector,
24
+ :spring, :damping, collide: {reader: :collide?}
25
+
26
+ end# Constraint
27
+
28
+
29
+ end# Reflex
@@ -0,0 +1,17 @@
1
+ require 'reflex/ext'
2
+
3
+
4
+ module Reflex
5
+
6
+
7
+ class ControlChangeEvent < Event
8
+
9
+ def inspect()
10
+ "#<Reflex::ControlChangeEvent channel:%d controller:%d value:%f time:%f captured?:%s>" %
11
+ [channel, controller, value, time, captured?]
12
+ end
13
+
14
+ end# ControlChangeEvent
15
+
16
+
17
+ end# Reflex
@@ -6,7 +6,7 @@ module Reflex
6
6
  module_function
7
7
 
8
8
  def name(downcase = false)
9
- super().split('::')[-2].then {|s|
9
+ super().split('::')[..-2].join.then {|s|
10
10
  downcase ? s.gsub(/([a-z])([A-Z])/) {"#{$1}-#{$2}"}.downcase : s
11
11
  }
12
12
  end
@@ -0,0 +1,70 @@
1
+ require 'xot/setter'
2
+ require 'xot/hookable'
3
+ require 'xot/block_util'
4
+ require 'xot/universal_accessor'
5
+ require 'xot/inspectable'
6
+ require 'reflex/ext'
7
+
8
+
9
+ module Reflex
10
+
11
+
12
+ class FileDialog
13
+
14
+ include Xot::Setter
15
+ include Xot::Hookable
16
+ include Xot::Inspectable
17
+
18
+ def initialize(options = nil, &block)
19
+ super()
20
+ set options if options
21
+ Xot::BlockUtil.instance_eval_or_block_call self, &block if block
22
+ end
23
+
24
+ universal_accessor :owner, :title, :extensions
25
+
26
+ def open_file(dir = nil, &block)
27
+ @file_block = block ? -> e {block.call e.paths.first, e} : nil
28
+ open_file! expand(dir)
29
+ self
30
+ end
31
+
32
+ def open_files(dir = nil, &block)
33
+ @file_block = block ? -> e {block.call e.paths, e} : nil
34
+ open_files! expand(dir)
35
+ self
36
+ end
37
+
38
+ def open_directory(dir = nil, &block)
39
+ @file_block = block ? -> e {block.call e.paths.first, e} : nil
40
+ open_directory! expand(dir)
41
+ self
42
+ end
43
+
44
+ def save_file(dir = nil, name: nil, &block)
45
+ @file_block = block ? -> e {block.call e.paths.first, e} : nil
46
+ save_file! expand(dir), name
47
+ self
48
+ end
49
+
50
+ alias open_dir open_directory
51
+
52
+ private
53
+
54
+ def expand(dir)
55
+ dir ? File.expand_path(dir.to_s) : nil
56
+ end
57
+
58
+ def call_file_block(e)
59
+ block, @file_block = @file_block, nil
60
+ block&.call e
61
+ end
62
+
63
+ def call_cancel_block()
64
+ @file_block = nil
65
+ end
66
+
67
+ end# FileDialog
68
+
69
+
70
+ end# Reflex
@@ -0,0 +1,37 @@
1
+ require 'xot/const_symbol_accessor'
2
+ require 'reflex/ext'
3
+
4
+
5
+ module Reflex
6
+
7
+
8
+ class FileEvent < Event
9
+
10
+ alias get_action action
11
+
12
+ const_symbol_reader :action, **{
13
+ none: ACTION_NONE,
14
+ open: FileEvent::OPEN,
15
+ save: FileEvent::SAVE
16
+ }
17
+
18
+ def path()
19
+ paths.first
20
+ end
21
+
22
+ def open?()
23
+ get_action == FileEvent::OPEN
24
+ end
25
+
26
+ def save?()
27
+ get_action == FileEvent::SAVE
28
+ end
29
+
30
+ def inspect()
31
+ "#<Reflex::FileEvent #{action} paths:#{paths}>"
32
+ end
33
+
34
+ end# FileEvent
35
+
36
+
37
+ end# Reflex
data/lib/reflex/helper.rb CHANGED
@@ -1,11 +1,37 @@
1
1
  require 'xot/universal_accessor'
2
+ require 'reflex/ext'
2
3
  require 'reflex/point'
3
4
  require 'reflex/bounds'
5
+ require 'reflex/text_event'
4
6
 
5
7
 
6
8
  module Reflex
7
9
 
8
10
 
11
+ MODIFIER_SYMBOLS = {
12
+ shift: MOD_SHIFT,
13
+ control: MOD_CONTROL,
14
+ alt: MOD_ALT,
15
+ win: MOD_WIN,
16
+ option: MOD_OPTION,
17
+ command: MOD_COMMAND,
18
+ help: MOD_HELP,
19
+ function: MOD_FUNCTION,
20
+ numpad: MOD_NUMPAD,
21
+ caps: MOD_CAPS,
22
+ scroll: MOD_SCROLL
23
+ }.freeze
24
+
25
+ SHORTCUT_MODIFIER_SYMBOLS = MODIFIER_SYMBOLS.slice(
26
+ :shift,
27
+ :control,
28
+ :alt,
29
+ :win,
30
+ :option,
31
+ :command
32
+ ).freeze
33
+
34
+
9
35
  module HasFrame
10
36
 
11
37
  def move_to(*args)
@@ -84,4 +110,57 @@ module Reflex
84
110
  end# HasTags
85
111
 
86
112
 
113
+ # keeps the text being composed by the input method. defining the hooks
114
+ # below is also what lets the view accept text input.
115
+ module HasTextPreedit
116
+
117
+ def preedit()
118
+ @preedit ||= ''
119
+ end
120
+
121
+ def preedit_selection()
122
+ @preedit_selection
123
+ end
124
+
125
+ def preedit?()
126
+ !preedit.empty?
127
+ end
128
+
129
+ def on_text_preedit(e)
130
+ @preedit, @preedit_selection = e.text, e.selection
131
+ redraw
132
+ end
133
+
134
+ def on_text_commit(e)
135
+ return unless preedit?
136
+
137
+ @preedit, @preedit_selection = '', nil
138
+ redraw
139
+ end
140
+
141
+ # draws the composing text underlined, with a double underline under the
142
+ # clause being converted, in the painter's current font and fill color.
143
+ def draw_preedit(painter, x, y, height: nil)
144
+ return unless preedit?
145
+
146
+ font = painter.font
147
+ height ||= font.height
148
+ width = font.width preedit
149
+ uy = y + height - 1
150
+
151
+ painter.push stroke: painter.fill do |p|
152
+ p.text preedit, x, y
153
+ p.line x, uy, x + width, uy
154
+
155
+ if preedit_selection
156
+ sx = x + font.width(preedit[0...preedit_selection.begin] || '')
157
+ sw = font.width(preedit[preedit_selection] || '')
158
+ p.line sx, uy - 2, sx + sw, uy - 2
159
+ end
160
+ end
161
+ end
162
+
163
+ end# HasTextPreedit
164
+
165
+
87
166
  end# Reflex
@@ -1,6 +1,7 @@
1
1
  require 'xot/bit_flag_accessor'
2
2
  require 'xot/const_symbol_accessor'
3
3
  require 'reflex/ext'
4
+ require 'reflex/helper'
4
5
 
5
6
 
6
7
  module Reflex
@@ -16,18 +17,16 @@ module Reflex
16
17
  up: UP
17
18
  }
18
19
 
19
- bit_flag_reader :modifiers, **{
20
- shift: MOD_SHIFT,
21
- control: MOD_CONTROL,
22
- alt: MOD_ALT,
23
- win: MOD_WIN,
24
- option: MOD_OPTION,
25
- command: MOD_COMMAND,
26
- help: MOD_HELP,
27
- function: MOD_FUNCTION,
28
- numpad: MOD_NUMPAD,
29
- caps: MOD_CAPS,
30
- }
20
+ bit_flag_reader :modifiers, **MODIFIER_SYMBOLS
21
+ private alias_method :get_modifiers!, :modifiers
22
+
23
+ def modifiers(all: false)
24
+ all ? get_modifiers! : (get_modifiers!.select {SHORTCUT_MODIFIER_SYMBOLS.key? _1})
25
+ end
26
+
27
+ def key()
28
+ Reflex.get_key_symbol! code
29
+ end
31
30
 
32
31
  def down?()
33
32
  get_action == DOWN
@@ -42,12 +41,13 @@ module Reflex
42
41
  end
43
42
 
44
43
  def inspect()
45
- "#<Reflex::KeyEvent action:%s chars:%s key:%s code:0x%X mod:%s repeat:%d captured?:%s>" % [
44
+ "#<Reflex::KeyEvent %p chars:%s key:%s code:0x%X mod:%p repeat:%d captured?:%p>" %
45
+ [
46
46
  action,
47
47
  chars ? "'#{chars}'" : :nil,
48
48
  key ? key : :nil,
49
49
  code,
50
- modifiers.join(','),
50
+ modifiers(all: true),
51
51
  repeat,
52
52
  captured?
53
53
  ]
@@ -0,0 +1,31 @@
1
+ require 'reflex/ext'
2
+ require 'reflex/constraint'
3
+
4
+
5
+ module Reflex
6
+
7
+
8
+ class LinkConstraint < Constraint
9
+
10
+ def range=(range)
11
+ case range
12
+ when nil then clear_range!
13
+ when Range then set_range! range.begin, range.end
14
+ when Numeric then set_range! range, range
15
+ else raise ArgumentError, "invalid range: #{range.inspect}"
16
+ end
17
+ end
18
+
19
+ def range()
20
+ has_range! ? Range.new(range_min!, range_max!) : nil
21
+ end
22
+
23
+ universal_accessor :axis, :distance, :range, :motor, :force
24
+
25
+ alias dist= distance=
26
+ alias dist distance
27
+
28
+ end# LinkConstraint
29
+
30
+
31
+ end# Reflex