reflexion 0.6.0 → 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 (275) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/application.cpp +37 -6
  3. data/.doc/ext/reflex/capture_event.cpp +1 -1
  4. data/.doc/ext/reflex/chase_constraint.cpp +1 -1
  5. data/.doc/ext/reflex/clipboard.cpp +1 -1
  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 +1 -1
  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 +1 -1
  26. data/.doc/ext/reflex/menu.cpp +6 -5
  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 +18 -6
  31. data/.doc/ext/reflex/note_event.cpp +1 -1
  32. data/.doc/ext/reflex/pin.cpp +1 -1
  33. data/.doc/ext/reflex/pointer.cpp +1 -1
  34. data/.doc/ext/reflex/pointer_event.cpp +2 -2
  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 +566 -232
  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 +1 -1
  41. data/.doc/ext/reflex/shape.cpp +1 -1
  42. data/.doc/ext/reflex/snap_constraint.cpp +1 -1
  43. data/.doc/ext/reflex/style.cpp +1 -1
  44. data/.doc/ext/reflex/style_length.cpp +1 -1
  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 +110 -56
  50. data/.doc/ext/reflex/wheel_constraint.cpp +1 -1
  51. data/.doc/ext/reflex/wheel_event.cpp +1 -1
  52. data/.doc/ext/reflex/window.cpp +226 -17
  53. data/.github/workflows/release-gem.yml +2 -49
  54. data/.github/workflows/tag.yml +5 -28
  55. data/.github/workflows/test.yml +1 -37
  56. data/ChangeLog.md +54 -0
  57. data/Gemfile.lock +13 -8
  58. data/Rakefile +13 -2
  59. data/Reflex.podspec +2 -2
  60. data/VERSION +1 -1
  61. data/ext/reflex/application.cpp +41 -6
  62. data/ext/reflex/capture_event.cpp +1 -1
  63. data/ext/reflex/chase_constraint.cpp +1 -1
  64. data/ext/reflex/clipboard.cpp +1 -1
  65. data/ext/reflex/color_event.cpp +80 -0
  66. data/ext/reflex/color_picker.cpp +121 -0
  67. data/ext/reflex/constraint.cpp +1 -1
  68. data/ext/reflex/contact_event.cpp +1 -1
  69. data/ext/reflex/control_change_event.cpp +1 -1
  70. data/ext/reflex/device.cpp +1 -1
  71. data/ext/reflex/device_event.cpp +1 -1
  72. data/ext/reflex/draw_event.cpp +1 -1
  73. data/ext/reflex/ellipse_shape.cpp +1 -1
  74. data/ext/reflex/event.cpp +1 -1
  75. data/ext/reflex/extconf.rb +4 -2
  76. data/ext/reflex/file_dialog.cpp +194 -0
  77. data/ext/reflex/file_event.cpp +108 -0
  78. data/ext/reflex/filter.cpp +1 -1
  79. data/ext/reflex/focus_event.cpp +1 -1
  80. data/ext/reflex/frame_event.cpp +1 -1
  81. data/ext/reflex/gamepad.cpp +50 -0
  82. data/ext/reflex/image_view.cpp +1 -1
  83. data/ext/reflex/key_event.cpp +1 -275
  84. data/ext/reflex/line_shape.cpp +1 -1
  85. data/ext/reflex/link_constraint.cpp +1 -1
  86. data/ext/reflex/menu.cpp +8 -7
  87. data/ext/reflex/midi.cpp +11 -3
  88. data/ext/reflex/midi_event.cpp +1 -1
  89. data/ext/reflex/motion_event.cpp +1 -1
  90. data/ext/reflex/native.cpp +18 -6
  91. data/ext/reflex/note_event.cpp +1 -1
  92. data/ext/reflex/pin.cpp +1 -1
  93. data/ext/reflex/pointer.cpp +1 -1
  94. data/ext/reflex/pointer_event.cpp +2 -2
  95. data/ext/reflex/polygon_shape.cpp +1 -1
  96. data/ext/reflex/rect_shape.cpp +1 -1
  97. data/ext/reflex/reflex.cpp +568 -232
  98. data/ext/reflex/screen.cpp +31 -2
  99. data/ext/reflex/scroll_event.cpp +1 -1
  100. data/ext/reflex/selector.cpp +1 -1
  101. data/ext/reflex/selector.h +9 -9
  102. data/ext/reflex/shape.cpp +1 -1
  103. data/ext/reflex/snap_constraint.cpp +1 -1
  104. data/ext/reflex/style.cpp +1 -1
  105. data/ext/reflex/style_length.cpp +1 -1
  106. data/ext/reflex/text_event.cpp +111 -0
  107. data/ext/reflex/timer.cpp +1 -1
  108. data/ext/reflex/timer_event.cpp +1 -1
  109. data/ext/reflex/update_event.cpp +1 -1
  110. data/ext/reflex/view.cpp +121 -61
  111. data/ext/reflex/wheel_constraint.cpp +1 -1
  112. data/ext/reflex/wheel_event.cpp +1 -1
  113. data/ext/reflex/window.cpp +256 -25
  114. data/include/reflex/application.h +10 -0
  115. data/include/reflex/color_picker.h +65 -0
  116. data/include/reflex/event.h +178 -88
  117. data/include/reflex/file_dialog.h +73 -0
  118. data/include/reflex/gamepad.h +3 -0
  119. data/include/reflex/menu.h +3 -3
  120. data/include/reflex/midi.h +3 -0
  121. data/include/reflex/reflex.h +2 -0
  122. data/include/reflex/ruby/application.h +6 -1
  123. data/include/reflex/ruby/color_picker.h +89 -0
  124. data/include/reflex/ruby/event.h +62 -29
  125. data/include/reflex/ruby/file_dialog.h +89 -0
  126. data/include/reflex/ruby/gamepad.h +46 -0
  127. data/include/reflex/ruby/reflex.h +3 -0
  128. data/include/reflex/ruby/view.h +92 -44
  129. data/include/reflex/ruby/window.h +60 -1
  130. data/include/reflex/ruby.h +3 -0
  131. data/include/reflex/screen.h +11 -2
  132. data/include/reflex/view.h +28 -16
  133. data/include/reflex/window.h +40 -8
  134. data/include/reflex.h +3 -0
  135. data/lib/reflex/application.rb +5 -5
  136. data/lib/reflex/autoinit.rb +3 -1
  137. data/lib/reflex/button.rb +3 -3
  138. data/lib/reflex/color_event.rb +16 -0
  139. data/lib/reflex/color_picker.rb +45 -0
  140. data/lib/reflex/control_change_event.rb +17 -0
  141. data/lib/reflex/file_dialog.rb +70 -0
  142. data/lib/reflex/file_event.rb +37 -0
  143. data/lib/reflex/helper.rb +58 -7
  144. data/lib/reflex/key_event.rb +9 -4
  145. data/lib/reflex/menu.rb +17 -1
  146. data/lib/reflex/model.rb +19 -19
  147. data/lib/reflex/note_event.rb +1 -1
  148. data/lib/reflex/pointer.rb +14 -3
  149. data/lib/reflex/pointer_event.rb +12 -1
  150. data/lib/reflex/reflex.rb +5 -0
  151. data/lib/reflex/shape.rb +14 -14
  152. data/lib/reflex/style.rb +16 -16
  153. data/lib/reflex/text_event.rb +40 -0
  154. data/lib/reflex/timer.rb +3 -3
  155. data/lib/reflex/view.rb +29 -14
  156. data/lib/reflex/wheel_event.rb +12 -3
  157. data/lib/reflex/window.rb +25 -13
  158. data/lib/reflex.rb +8 -2
  159. data/reflex.gemspec +4 -4
  160. data/samples/ime.rb +100 -0
  161. data/samples/ios/hello/hello.xcodeproj/project.pbxproj +236 -224
  162. data/samples/menu.rb +4 -1
  163. data/samples/model.rb +3 -3
  164. data/samples/test/alert.rb +93 -0
  165. data/samples/test/always_on.rb +76 -0
  166. data/samples/test/app_background.rb +51 -0
  167. data/samples/test/boundary.rb +75 -0
  168. data/samples/test/callback_exception.rb +101 -0
  169. data/samples/test/cancel.rb +53 -0
  170. data/samples/test/color_picker.rb +63 -0
  171. data/samples/test/file_dialog.rb +102 -0
  172. data/samples/window_style.rb +156 -0
  173. data/src/application.cpp +159 -18
  174. data/src/application.h +92 -7
  175. data/src/color_picker.cpp +113 -0
  176. data/src/color_picker.h +36 -0
  177. data/src/event.cpp +410 -252
  178. data/src/event.h +12 -0
  179. data/src/file_dialog.cpp +163 -0
  180. data/src/file_dialog.h +52 -0
  181. data/src/gamepad.cpp +42 -5
  182. data/src/gamepad.h +4 -0
  183. data/src/ios/app_delegate.mm +5 -3
  184. data/src/ios/application.mm +24 -0
  185. data/src/ios/color_picker.mm +19 -0
  186. data/src/ios/file_dialog.mm +21 -0
  187. data/src/ios/gamepad.mm +4 -4
  188. data/src/ios/menu.mm +5 -0
  189. data/src/ios/reflex.mm +8 -0
  190. data/src/ios/screen.mm +26 -0
  191. data/src/ios/view_controller.mm +2 -30
  192. data/src/ios/window.mm +38 -9
  193. data/src/menu.cpp +66 -4
  194. data/src/menu.h +17 -1
  195. data/src/midi.cpp +61 -31
  196. data/src/osx/app_delegate.h +4 -0
  197. data/src/osx/app_delegate.mm +102 -22
  198. data/src/osx/application.mm +88 -6
  199. data/src/osx/color_picker.mm +112 -0
  200. data/src/osx/event.h +10 -0
  201. data/src/osx/event.mm +84 -30
  202. data/src/osx/file_dialog.mm +168 -0
  203. data/src/osx/gamepad.mm +2 -2
  204. data/src/osx/gamepad_hid.mm +1 -1
  205. data/src/osx/menu.mm +177 -33
  206. data/src/osx/native_window.h +16 -2
  207. data/src/osx/native_window.mm +114 -57
  208. data/src/osx/opengl_view.h +2 -1
  209. data/src/osx/opengl_view.mm +184 -43
  210. data/src/osx/reflex.mm +38 -0
  211. data/src/osx/screen.mm +36 -0
  212. data/src/osx/window.mm +106 -24
  213. data/src/pointer.cpp +13 -4
  214. data/src/pointer.h +4 -0
  215. data/src/rays.h +46 -0
  216. data/src/sdl/application.cpp +68 -8
  217. data/src/sdl/color_picker.cpp +18 -0
  218. data/src/sdl/event.cpp +24 -3
  219. data/src/sdl/event.h +12 -0
  220. data/src/sdl/file_dialog.cpp +20 -0
  221. data/src/sdl/gamepad.cpp +3 -7
  222. data/src/sdl/menu.cpp +5 -0
  223. data/src/sdl/reflex.cpp +20 -0
  224. data/src/sdl/screen.cpp +36 -0
  225. data/src/sdl/window.cpp +142 -29
  226. data/src/shape.cpp +15 -10
  227. data/src/view.cpp +287 -198
  228. data/src/view.h +4 -2
  229. data/src/vk.h +416 -0
  230. data/src/win32/application.cpp +162 -12
  231. data/src/win32/application.h +20 -0
  232. data/src/win32/color_picker.cpp +82 -0
  233. data/src/win32/event.cpp +114 -12
  234. data/src/win32/event.h +21 -4
  235. data/src/win32/file_dialog.cpp +226 -0
  236. data/src/win32/gamepad.cpp +9 -2
  237. data/src/win32/menu.cpp +191 -53
  238. data/src/win32/menu.h +9 -1
  239. data/src/win32/opengl.cpp +2 -9
  240. data/src/win32/reflex.cpp +44 -3
  241. data/src/win32/screen.cpp +164 -3
  242. data/src/win32/screen.h +8 -0
  243. data/src/win32/tray.cpp +191 -0
  244. data/src/win32/tray.h +22 -0
  245. data/src/win32/vk.cpp +11 -0
  246. data/src/win32/window.cpp +809 -148
  247. data/src/win32/window.h +6 -0
  248. data/src/window.cpp +718 -185
  249. data/src/window.h +66 -33
  250. data/src/world.cpp +9 -1
  251. data/test/helper.rb +17 -0
  252. data/test/test_application.rb +90 -1
  253. data/test/test_chase_constraint.rb +1 -3
  254. data/test/test_color_event.rb +36 -0
  255. data/test/test_color_picker.rb +62 -0
  256. data/test/test_constraint.rb +2 -4
  257. data/test/test_event.rb +1 -1
  258. data/test/test_file_dialog.rb +48 -0
  259. data/test/test_file_event.rb +43 -0
  260. data/test/test_has_text_preedit.rb +54 -0
  261. data/test/test_key_event.rb +20 -5
  262. data/test/test_link_constraint.rb +1 -3
  263. data/test/test_menu.rb +40 -10
  264. data/test/test_pointer.rb +33 -23
  265. data/test/test_pointer_event.rb +24 -9
  266. data/test/test_reflex.rb +36 -0
  267. data/test/test_screen.rb +24 -2
  268. data/test/test_snap_constraint.rb +1 -3
  269. data/test/test_text_event.rb +54 -0
  270. data/test/test_view.rb +41 -4
  271. data/test/test_wheel_constraint.rb +1 -3
  272. data/test/test_wheel_event.rb +13 -5
  273. data/test/test_window.rb +196 -44
  274. metadata +80 -10
  275. data/.github/workflows/utils.rb +0 -127
@@ -68,7 +68,7 @@ namespace Reflex
68
68
 
69
69
  FLAG_CLIP = Xot::bit(0),
70
70
 
71
- FLAG_CACHE = Xot::bit(1),
71
+ FLAG_DRAW_CACHE = Xot::bit(1),
72
72
 
73
73
  FLAG_RESIZE_TO_FIT = Xot::bit(2),
74
74
 
@@ -76,7 +76,9 @@ namespace Reflex
76
76
 
77
77
  FLAG_FIX_ANGLE = Xot::bit(4),
78
78
 
79
- FLAG_LAST = FLAG_FIX_ANGLE
79
+ FLAG_TEXT_INPUT = Xot::bit(5),
80
+
81
+ FLAG_LAST = FLAG_TEXT_INPUT
80
82
 
81
83
  };// Flag
82
84
 
@@ -117,6 +119,14 @@ namespace Reflex
117
119
 
118
120
  virtual void update_layout ();
119
121
 
122
+ virtual void fit_to_content ();
123
+
124
+ virtual Bounds content_bounds () const;
125
+
126
+ virtual bool accepts_text_input () const;
127
+
128
+ virtual Bounds text_input_bounds () const;
129
+
120
130
  virtual Point from_parent (const Point& point) const;
121
131
 
122
132
  virtual Point to_parent (const Point& point) const;
@@ -228,10 +238,6 @@ namespace Reflex
228
238
 
229
239
  virtual const Bounds& frame () const;
230
240
 
231
- virtual Bounds content_bounds () const;
232
-
233
- virtual void fit_to_content ();
234
-
235
241
  virtual void set_zoom (float zoom);
236
242
 
237
243
  virtual float zoom () const;
@@ -393,6 +399,12 @@ namespace Reflex
393
399
 
394
400
  virtual void on_key_up (KeyEvent* e);
395
401
 
402
+ virtual void on_text (TextEvent* e);
403
+
404
+ virtual void on_text_preedit (TextEvent* e);
405
+
406
+ virtual void on_text_commit (TextEvent* e);
407
+
396
408
  virtual void on_pointer (PointerEvent* e);
397
409
 
398
410
  virtual void on_pointer_down (PointerEvent* e);
@@ -409,16 +421,6 @@ namespace Reflex
409
421
 
410
422
  virtual void on_wheel (WheelEvent* e);
411
423
 
412
- virtual void on_midi (MIDIEvent* e);
413
-
414
- virtual void on_note (NoteEvent* e);
415
-
416
- virtual void on_note_on (NoteEvent* e);
417
-
418
- virtual void on_note_off (NoteEvent* e);
419
-
420
- virtual void on_control_change (ControlChangeEvent* e);
421
-
422
424
  virtual void on_capture (CaptureEvent* e);
423
425
 
424
426
  virtual void on_timer (TimerEvent* e);
@@ -431,6 +433,16 @@ namespace Reflex
431
433
 
432
434
  virtual void on_contact_end (ContactEvent* e);
433
435
 
436
+ virtual void on_midi (MIDIEvent* e);
437
+
438
+ virtual void on_note (NoteEvent* e);
439
+
440
+ virtual void on_note_on (NoteEvent* e);
441
+
442
+ virtual void on_note_off (NoteEvent* e);
443
+
444
+ virtual void on_control_change (ControlChangeEvent* e);
445
+
434
446
  virtual operator bool () const;
435
447
 
436
448
  virtual bool operator ! () const;
@@ -34,19 +34,35 @@ namespace Reflex
34
34
  enum Flag
35
35
  {
36
36
 
37
- FLAG_CLOSABLE = Xot::bit(0),
37
+ FLAG_CLOSABLE = Xot::bit(0),
38
38
 
39
- FLAG_MINIMIZABLE = Xot::bit(1),
39
+ FLAG_MINIMIZABLE = Xot::bit(1),
40
40
 
41
- FLAG_RESIZABLE = Xot::bit(2),
41
+ FLAG_RESIZABLE = Xot::bit(2),
42
42
 
43
- FLAG_FULLSCREEN = Xot::bit(3),
43
+ FLAG_TITLEBAR_BUTTONS = Xot::bit(3),
44
44
 
45
- FLAG_PORTRAIT = Xot::bit(4),
45
+ FLAG_TITLEBAR_BACKGROUND = Xot::bit(4),
46
46
 
47
- FLAG_LANDSCAPE = Xot::bit(5),
47
+ FLAG_UNLISTED = Xot::bit(5),
48
48
 
49
- 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
50
66
 
51
67
  };// Flag
52
68
 
@@ -84,7 +100,11 @@ namespace Reflex
84
100
 
85
101
  virtual const Menu* menu () const;
86
102
 
87
- virtual void set_flag (uint flags);
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);
88
108
 
89
109
  virtual uint flags () const;
90
110
 
@@ -132,6 +152,12 @@ namespace Reflex
132
152
 
133
153
  virtual void on_key_up (KeyEvent* e);
134
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
+
135
161
  virtual void on_pointer (PointerEvent* e);
136
162
 
137
163
  virtual void on_pointer_down (PointerEvent* e);
@@ -148,6 +174,12 @@ namespace Reflex
148
174
 
149
175
  virtual void on_wheel (WheelEvent* e);
150
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
+
151
183
  virtual void on_midi (MIDIEvent* e);
152
184
 
153
185
  virtual void on_note (NoteEvent* e);
data/include/reflex.h CHANGED
@@ -24,6 +24,9 @@
24
24
  #include <reflex/view.h>
25
25
  #include <reflex/menu.h>
26
26
  #include <reflex/screen.h>
27
+ #include <reflex/clipboard.h>
28
+ #include <reflex/file_dialog.h>
29
+ #include <reflex/color_picker.h>
27
30
 
28
31
  #include <reflex/device.h>
29
32
  #include <reflex/midi.h>
@@ -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,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,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
@@ -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
@@ -2,6 +2,7 @@ require 'xot/universal_accessor'
2
2
  require 'reflex/ext'
3
3
  require 'reflex/point'
4
4
  require 'reflex/bounds'
5
+ require 'reflex/text_event'
5
6
 
6
7
 
7
8
  module Reflex
@@ -19,19 +20,16 @@ module Reflex
19
20
  numpad: MOD_NUMPAD,
20
21
  caps: MOD_CAPS,
21
22
  scroll: MOD_SCROLL
22
- }
23
+ }.freeze
23
24
 
24
25
  SHORTCUT_MODIFIER_SYMBOLS = MODIFIER_SYMBOLS.slice(
25
26
  :shift,
26
27
  :control,
27
28
  :alt,
29
+ :win,
28
30
  :option,
29
- :command)
30
-
31
- LOCK_MODIFIER_SYMBOLS = MODIFIER_SYMBOLS.slice(
32
- :numpad,
33
- :caps,
34
- :scroll)
31
+ :command
32
+ ).freeze
35
33
 
36
34
 
37
35
  module HasFrame
@@ -112,4 +110,57 @@ module Reflex
112
110
  end# HasTags
113
111
 
114
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
+
115
166
  end# Reflex
@@ -20,8 +20,12 @@ module Reflex
20
20
  bit_flag_reader :modifiers, **MODIFIER_SYMBOLS
21
21
  private alias_method :get_modifiers!, :modifiers
22
22
 
23
- def modifiers(locks: true)
24
- locks ? get_modifiers! : (get_modifiers! - LOCK_MODIFIER_SYMBOLS.keys)
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
25
29
  end
26
30
 
27
31
  def down?()
@@ -37,12 +41,13 @@ module Reflex
37
41
  end
38
42
 
39
43
  def inspect()
40
- "#<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
+ [
41
46
  action,
42
47
  chars ? "'#{chars}'" : :nil,
43
48
  key ? key : :nil,
44
49
  code,
45
- modifiers.join(','),
50
+ modifiers(all: true),
46
51
  repeat,
47
52
  captured?
48
53
  ]
data/lib/reflex/menu.rb CHANGED
@@ -20,7 +20,7 @@ module Reflex
20
20
  def initialize(label = nil, **options, &block)
21
21
  super()
22
22
  self.label = label if label
23
- set **options unless options.empty?
23
+ set(**options) unless options.empty?
24
24
  Xot::BlockUtil.instance_eval_or_block_call self, &block if block
25
25
  end
26
26
 
@@ -55,6 +55,15 @@ module Reflex
55
55
 
56
56
  bit_flag_accessor :shortcut_modifiers, **SHORTCUT_MODIFIER_SYMBOLS
57
57
 
58
+ def shortcut_key=(key)
59
+ key = sym2key(key) if key.is_a? Symbol
60
+ set_shortcut_key! key
61
+ end
62
+
63
+ def shortcut_key()
64
+ Reflex.get_key_symbol! shortcut_key!
65
+ end
66
+
58
67
  universal_accessor :label, :image, :shortcut_key, :shortcut_modifiers
59
68
 
60
69
  def each(&block)
@@ -70,6 +79,13 @@ module Reflex
70
79
  "#<Reflex::Menu label:#{label.inspect} size:#{size}>"
71
80
  end
72
81
 
82
+ private
83
+
84
+ def sym2key(sym)
85
+ KEYS.find {sym == Reflex.get_key_symbol!(_1)} ||
86
+ raise(ArgumentError, "unknown shortcut key: #{sym.inspect}")
87
+ end
88
+
73
89
  end# Menu
74
90
 
75
91
 
data/lib/reflex/model.rb CHANGED
@@ -110,35 +110,35 @@ module Reflex
110
110
 
111
111
  private
112
112
 
113
- INT_SYMS = [:to_i, :to_int]
113
+ INT_SYMS = [:to_i, :to_int]
114
114
 
115
- FLOAT_SYMS = [:to_f, :to_float]
115
+ FLOAT_SYMS = [:to_f, :to_float]
116
116
 
117
- STRING_SYMS = [:to_s, :to_str, :to_string]
117
+ STRING_SYMS = [:to_s, :to_str, :to_string]
118
118
 
119
- ARRAY_GET_SYMS = [:[], :at]
119
+ ARRAY_GET_SYMS = [:[], :at]
120
120
 
121
- ARRAY_SET_SYMS = [:[]=, :set_at]
121
+ ARRAY_SET_SYMS = [:[]=, :set_at]
122
122
 
123
- ARRAY_SIZE_SYMS = [:size, :length]
123
+ ARRAY_SIZE_SYMS = [:size, :length]
124
124
 
125
- def apply_filters(data)
126
- return data unless @filters
127
- @filters.each do |filter|
128
- break if data.nil?
129
- data = filter.call data
130
- end
131
- data
125
+ def apply_filters(data)
126
+ return data unless @filters
127
+ @filters.each do |filter|
128
+ break if data.nil?
129
+ data = filter.call data
132
130
  end
131
+ data
132
+ end
133
133
 
134
- def call_symbols(symbols, *args)
135
- if dat = data
136
- symbols.each do |symbol|
137
- return dat.send symbol, *args if dat.respond_to? symbol
138
- end
134
+ def call_symbols(symbols, *args)
135
+ if dat = data
136
+ symbols.each do |symbol|
137
+ return dat.send symbol, *args if dat.respond_to? symbol
139
138
  end
140
- nil
141
139
  end
140
+ nil
141
+ end
142
142
 
143
143
  end# Model
144
144
 
@@ -24,7 +24,7 @@ module Reflex
24
24
  end
25
25
 
26
26
  def inspect()
27
- "#<Reflex::NoteEvent action:%s channel:%d note:%d vel:0f time:%f captured?:%s>" %
27
+ "#<Reflex::NoteEvent action:%s channel:%d note:%d vel:%f time:%f captured?:%s>" %
28
28
  [action, channel, note, velocity, time, captured?]
29
29
  end
30
30
 
@@ -38,8 +38,8 @@ module Reflex
38
38
  bit_flag_reader :modifiers, **MODIFIER_SYMBOLS
39
39
  private alias_method :get_modifiers!, :modifiers
40
40
 
41
- def modifiers(locks: true)
42
- locks ? get_modifiers! : (get_modifiers! - LOCK_MODIFIER_SYMBOLS.keys)
41
+ def modifiers(all: false)
42
+ all ? get_modifiers! : (get_modifiers!.select {SHORTCUT_MODIFIER_SYMBOLS.key? _1})
43
43
  end
44
44
 
45
45
  def mouse?()
@@ -113,7 +113,18 @@ module Reflex
113
113
  end
114
114
 
115
115
  def inspect()
116
- "#<Reflex::Pointer id:#{id} #{types} #{action} (#{x.round 2}, #{y.round 2}) mod:#{modifiers} click:#{click_count} drag:#{drag?} time:#{time.round 2}>"
116
+ "#<Reflex::Pointer id:%d %p %p (%p, %p) mod:%p click:%d drag:%p time:%p>" %
117
+ [
118
+ id,
119
+ types,
120
+ action,
121
+ x.round(2),
122
+ y.round(2),
123
+ modifiers(all: true),
124
+ click_count,
125
+ drag?,
126
+ time.round(2)
127
+ ]
117
128
  end
118
129
 
119
130
  end# Pointer
@@ -24,7 +24,18 @@ module Reflex
24
24
  end
25
25
 
26
26
  def inspect()
27
- "#<Reflex::PointerEvent id:#{id} #{types} #{action} (#{x.round 2}, #{y.round 2}) mod:#{modifiers} click:#{click_count} drag:#{drag?} time:#{time.round 2}>"
27
+ "#<Reflex::PointerEvent id:%d %p %p (%p, %p) mod:%p click:%d drag:%p time:%p>" %
28
+ [
29
+ id,
30
+ types,
31
+ action,
32
+ x.round(2),
33
+ y.round(2),
34
+ modifiers(all: true),
35
+ click_count,
36
+ drag?,
37
+ time.round(2)
38
+ ]
28
39
  end
29
40
 
30
41
  end# PointerEvent