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.
- checksums.yaml +4 -4
- data/.doc/ext/reflex/application.cpp +37 -6
- data/.doc/ext/reflex/capture_event.cpp +1 -1
- data/.doc/ext/reflex/chase_constraint.cpp +1 -1
- data/.doc/ext/reflex/clipboard.cpp +1 -1
- data/.doc/ext/reflex/color_event.cpp +76 -0
- data/.doc/ext/reflex/color_picker.cpp +113 -0
- data/.doc/ext/reflex/constraint.cpp +1 -1
- data/.doc/ext/reflex/contact_event.cpp +1 -1
- data/.doc/ext/reflex/control_change_event.cpp +1 -1
- data/.doc/ext/reflex/device.cpp +1 -1
- data/.doc/ext/reflex/device_event.cpp +1 -1
- data/.doc/ext/reflex/draw_event.cpp +1 -1
- data/.doc/ext/reflex/ellipse_shape.cpp +1 -1
- data/.doc/ext/reflex/event.cpp +1 -1
- data/.doc/ext/reflex/file_dialog.cpp +181 -0
- data/.doc/ext/reflex/file_event.cpp +103 -0
- data/.doc/ext/reflex/filter.cpp +1 -1
- data/.doc/ext/reflex/focus_event.cpp +1 -1
- data/.doc/ext/reflex/frame_event.cpp +1 -1
- data/.doc/ext/reflex/gamepad.cpp +48 -0
- data/.doc/ext/reflex/image_view.cpp +1 -1
- data/.doc/ext/reflex/key_event.cpp +1 -274
- data/.doc/ext/reflex/line_shape.cpp +1 -1
- data/.doc/ext/reflex/link_constraint.cpp +1 -1
- data/.doc/ext/reflex/menu.cpp +6 -5
- data/.doc/ext/reflex/midi.cpp +9 -2
- data/.doc/ext/reflex/midi_event.cpp +1 -1
- data/.doc/ext/reflex/motion_event.cpp +1 -1
- data/.doc/ext/reflex/native.cpp +18 -6
- data/.doc/ext/reflex/note_event.cpp +1 -1
- data/.doc/ext/reflex/pin.cpp +1 -1
- data/.doc/ext/reflex/pointer.cpp +1 -1
- data/.doc/ext/reflex/pointer_event.cpp +2 -2
- data/.doc/ext/reflex/polygon_shape.cpp +1 -1
- data/.doc/ext/reflex/rect_shape.cpp +1 -1
- data/.doc/ext/reflex/reflex.cpp +566 -232
- data/.doc/ext/reflex/screen.cpp +27 -1
- data/.doc/ext/reflex/scroll_event.cpp +1 -1
- data/.doc/ext/reflex/selector.cpp +1 -1
- data/.doc/ext/reflex/shape.cpp +1 -1
- data/.doc/ext/reflex/snap_constraint.cpp +1 -1
- data/.doc/ext/reflex/style.cpp +1 -1
- data/.doc/ext/reflex/style_length.cpp +1 -1
- data/.doc/ext/reflex/text_event.cpp +104 -0
- data/.doc/ext/reflex/timer.cpp +1 -1
- data/.doc/ext/reflex/timer_event.cpp +1 -1
- data/.doc/ext/reflex/update_event.cpp +1 -1
- data/.doc/ext/reflex/view.cpp +110 -56
- data/.doc/ext/reflex/wheel_constraint.cpp +1 -1
- data/.doc/ext/reflex/wheel_event.cpp +1 -1
- data/.doc/ext/reflex/window.cpp +226 -17
- data/.github/workflows/release-gem.yml +2 -49
- data/.github/workflows/tag.yml +5 -28
- data/.github/workflows/test.yml +1 -37
- data/ChangeLog.md +54 -0
- data/Gemfile.lock +13 -8
- data/Rakefile +13 -2
- data/Reflex.podspec +2 -2
- data/VERSION +1 -1
- data/ext/reflex/application.cpp +41 -6
- data/ext/reflex/capture_event.cpp +1 -1
- data/ext/reflex/chase_constraint.cpp +1 -1
- data/ext/reflex/clipboard.cpp +1 -1
- data/ext/reflex/color_event.cpp +80 -0
- data/ext/reflex/color_picker.cpp +121 -0
- data/ext/reflex/constraint.cpp +1 -1
- data/ext/reflex/contact_event.cpp +1 -1
- data/ext/reflex/control_change_event.cpp +1 -1
- data/ext/reflex/device.cpp +1 -1
- data/ext/reflex/device_event.cpp +1 -1
- data/ext/reflex/draw_event.cpp +1 -1
- data/ext/reflex/ellipse_shape.cpp +1 -1
- data/ext/reflex/event.cpp +1 -1
- data/ext/reflex/extconf.rb +4 -2
- data/ext/reflex/file_dialog.cpp +194 -0
- data/ext/reflex/file_event.cpp +108 -0
- data/ext/reflex/filter.cpp +1 -1
- data/ext/reflex/focus_event.cpp +1 -1
- data/ext/reflex/frame_event.cpp +1 -1
- data/ext/reflex/gamepad.cpp +50 -0
- data/ext/reflex/image_view.cpp +1 -1
- data/ext/reflex/key_event.cpp +1 -275
- data/ext/reflex/line_shape.cpp +1 -1
- data/ext/reflex/link_constraint.cpp +1 -1
- data/ext/reflex/menu.cpp +8 -7
- data/ext/reflex/midi.cpp +11 -3
- data/ext/reflex/midi_event.cpp +1 -1
- data/ext/reflex/motion_event.cpp +1 -1
- data/ext/reflex/native.cpp +18 -6
- data/ext/reflex/note_event.cpp +1 -1
- data/ext/reflex/pin.cpp +1 -1
- data/ext/reflex/pointer.cpp +1 -1
- data/ext/reflex/pointer_event.cpp +2 -2
- data/ext/reflex/polygon_shape.cpp +1 -1
- data/ext/reflex/rect_shape.cpp +1 -1
- data/ext/reflex/reflex.cpp +568 -232
- data/ext/reflex/screen.cpp +31 -2
- data/ext/reflex/scroll_event.cpp +1 -1
- data/ext/reflex/selector.cpp +1 -1
- data/ext/reflex/selector.h +9 -9
- data/ext/reflex/shape.cpp +1 -1
- data/ext/reflex/snap_constraint.cpp +1 -1
- data/ext/reflex/style.cpp +1 -1
- data/ext/reflex/style_length.cpp +1 -1
- data/ext/reflex/text_event.cpp +111 -0
- data/ext/reflex/timer.cpp +1 -1
- data/ext/reflex/timer_event.cpp +1 -1
- data/ext/reflex/update_event.cpp +1 -1
- data/ext/reflex/view.cpp +121 -61
- data/ext/reflex/wheel_constraint.cpp +1 -1
- data/ext/reflex/wheel_event.cpp +1 -1
- data/ext/reflex/window.cpp +256 -25
- data/include/reflex/application.h +10 -0
- data/include/reflex/color_picker.h +65 -0
- data/include/reflex/event.h +178 -88
- data/include/reflex/file_dialog.h +73 -0
- data/include/reflex/gamepad.h +3 -0
- data/include/reflex/menu.h +3 -3
- data/include/reflex/midi.h +3 -0
- data/include/reflex/reflex.h +2 -0
- data/include/reflex/ruby/application.h +6 -1
- data/include/reflex/ruby/color_picker.h +89 -0
- data/include/reflex/ruby/event.h +62 -29
- data/include/reflex/ruby/file_dialog.h +89 -0
- data/include/reflex/ruby/gamepad.h +46 -0
- data/include/reflex/ruby/reflex.h +3 -0
- data/include/reflex/ruby/view.h +92 -44
- data/include/reflex/ruby/window.h +60 -1
- data/include/reflex/ruby.h +3 -0
- data/include/reflex/screen.h +11 -2
- data/include/reflex/view.h +28 -16
- data/include/reflex/window.h +40 -8
- data/include/reflex.h +3 -0
- data/lib/reflex/application.rb +5 -5
- data/lib/reflex/autoinit.rb +3 -1
- data/lib/reflex/button.rb +3 -3
- data/lib/reflex/color_event.rb +16 -0
- data/lib/reflex/color_picker.rb +45 -0
- data/lib/reflex/control_change_event.rb +17 -0
- data/lib/reflex/file_dialog.rb +70 -0
- data/lib/reflex/file_event.rb +37 -0
- data/lib/reflex/helper.rb +58 -7
- data/lib/reflex/key_event.rb +9 -4
- data/lib/reflex/menu.rb +17 -1
- data/lib/reflex/model.rb +19 -19
- data/lib/reflex/note_event.rb +1 -1
- data/lib/reflex/pointer.rb +14 -3
- data/lib/reflex/pointer_event.rb +12 -1
- data/lib/reflex/reflex.rb +5 -0
- data/lib/reflex/shape.rb +14 -14
- data/lib/reflex/style.rb +16 -16
- data/lib/reflex/text_event.rb +40 -0
- data/lib/reflex/timer.rb +3 -3
- data/lib/reflex/view.rb +29 -14
- data/lib/reflex/wheel_event.rb +12 -3
- data/lib/reflex/window.rb +25 -13
- data/lib/reflex.rb +8 -2
- data/reflex.gemspec +4 -4
- data/samples/ime.rb +100 -0
- data/samples/ios/hello/hello.xcodeproj/project.pbxproj +236 -224
- data/samples/menu.rb +4 -1
- data/samples/model.rb +3 -3
- data/samples/test/alert.rb +93 -0
- data/samples/test/always_on.rb +76 -0
- data/samples/test/app_background.rb +51 -0
- data/samples/test/boundary.rb +75 -0
- data/samples/test/callback_exception.rb +101 -0
- data/samples/test/cancel.rb +53 -0
- data/samples/test/color_picker.rb +63 -0
- data/samples/test/file_dialog.rb +102 -0
- data/samples/window_style.rb +156 -0
- data/src/application.cpp +159 -18
- data/src/application.h +92 -7
- data/src/color_picker.cpp +113 -0
- data/src/color_picker.h +36 -0
- data/src/event.cpp +410 -252
- data/src/event.h +12 -0
- data/src/file_dialog.cpp +163 -0
- data/src/file_dialog.h +52 -0
- data/src/gamepad.cpp +42 -5
- data/src/gamepad.h +4 -0
- data/src/ios/app_delegate.mm +5 -3
- data/src/ios/application.mm +24 -0
- data/src/ios/color_picker.mm +19 -0
- data/src/ios/file_dialog.mm +21 -0
- data/src/ios/gamepad.mm +4 -4
- data/src/ios/menu.mm +5 -0
- data/src/ios/reflex.mm +8 -0
- data/src/ios/screen.mm +26 -0
- data/src/ios/view_controller.mm +2 -30
- data/src/ios/window.mm +38 -9
- data/src/menu.cpp +66 -4
- data/src/menu.h +17 -1
- data/src/midi.cpp +61 -31
- data/src/osx/app_delegate.h +4 -0
- data/src/osx/app_delegate.mm +102 -22
- data/src/osx/application.mm +88 -6
- data/src/osx/color_picker.mm +112 -0
- data/src/osx/event.h +10 -0
- data/src/osx/event.mm +84 -30
- data/src/osx/file_dialog.mm +168 -0
- data/src/osx/gamepad.mm +2 -2
- data/src/osx/gamepad_hid.mm +1 -1
- data/src/osx/menu.mm +177 -33
- data/src/osx/native_window.h +16 -2
- data/src/osx/native_window.mm +114 -57
- data/src/osx/opengl_view.h +2 -1
- data/src/osx/opengl_view.mm +184 -43
- data/src/osx/reflex.mm +38 -0
- data/src/osx/screen.mm +36 -0
- data/src/osx/window.mm +106 -24
- data/src/pointer.cpp +13 -4
- data/src/pointer.h +4 -0
- data/src/rays.h +46 -0
- data/src/sdl/application.cpp +68 -8
- data/src/sdl/color_picker.cpp +18 -0
- data/src/sdl/event.cpp +24 -3
- data/src/sdl/event.h +12 -0
- data/src/sdl/file_dialog.cpp +20 -0
- data/src/sdl/gamepad.cpp +3 -7
- data/src/sdl/menu.cpp +5 -0
- data/src/sdl/reflex.cpp +20 -0
- data/src/sdl/screen.cpp +36 -0
- data/src/sdl/window.cpp +142 -29
- data/src/shape.cpp +15 -10
- data/src/view.cpp +287 -198
- data/src/view.h +4 -2
- data/src/vk.h +416 -0
- data/src/win32/application.cpp +162 -12
- data/src/win32/application.h +20 -0
- data/src/win32/color_picker.cpp +82 -0
- data/src/win32/event.cpp +114 -12
- data/src/win32/event.h +21 -4
- data/src/win32/file_dialog.cpp +226 -0
- data/src/win32/gamepad.cpp +9 -2
- data/src/win32/menu.cpp +191 -53
- data/src/win32/menu.h +9 -1
- data/src/win32/opengl.cpp +2 -9
- data/src/win32/reflex.cpp +44 -3
- data/src/win32/screen.cpp +164 -3
- data/src/win32/screen.h +8 -0
- data/src/win32/tray.cpp +191 -0
- data/src/win32/tray.h +22 -0
- data/src/win32/vk.cpp +11 -0
- data/src/win32/window.cpp +809 -148
- data/src/win32/window.h +6 -0
- data/src/window.cpp +718 -185
- data/src/window.h +66 -33
- data/src/world.cpp +9 -1
- data/test/helper.rb +17 -0
- data/test/test_application.rb +90 -1
- data/test/test_chase_constraint.rb +1 -3
- data/test/test_color_event.rb +36 -0
- data/test/test_color_picker.rb +62 -0
- data/test/test_constraint.rb +2 -4
- data/test/test_event.rb +1 -1
- data/test/test_file_dialog.rb +48 -0
- data/test/test_file_event.rb +43 -0
- data/test/test_has_text_preedit.rb +54 -0
- data/test/test_key_event.rb +20 -5
- data/test/test_link_constraint.rb +1 -3
- data/test/test_menu.rb +40 -10
- data/test/test_pointer.rb +33 -23
- data/test/test_pointer_event.rb +24 -9
- data/test/test_reflex.rb +36 -0
- data/test/test_screen.rb +24 -2
- data/test/test_snap_constraint.rb +1 -3
- data/test/test_text_event.rb +54 -0
- data/test/test_view.rb +41 -4
- data/test/test_wheel_constraint.rb +1 -3
- data/test/test_wheel_event.rb +13 -5
- data/test/test_window.rb +196 -44
- metadata +80 -10
- data/.github/workflows/utils.rb +0 -127
data/include/reflex/view.h
CHANGED
|
@@ -68,7 +68,7 @@ namespace Reflex
|
|
|
68
68
|
|
|
69
69
|
FLAG_CLIP = Xot::bit(0),
|
|
70
70
|
|
|
71
|
-
|
|
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
|
-
|
|
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;
|
data/include/reflex/window.h
CHANGED
|
@@ -34,19 +34,35 @@ namespace Reflex
|
|
|
34
34
|
enum Flag
|
|
35
35
|
{
|
|
36
36
|
|
|
37
|
-
FLAG_CLOSABLE
|
|
37
|
+
FLAG_CLOSABLE = Xot::bit(0),
|
|
38
38
|
|
|
39
|
-
FLAG_MINIMIZABLE
|
|
39
|
+
FLAG_MINIMIZABLE = Xot::bit(1),
|
|
40
40
|
|
|
41
|
-
FLAG_RESIZABLE
|
|
41
|
+
FLAG_RESIZABLE = Xot::bit(2),
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
FLAG_TITLEBAR_BUTTONS = Xot::bit(3),
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
FLAG_TITLEBAR_BACKGROUND = Xot::bit(4),
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
FLAG_UNLISTED = Xot::bit(5),
|
|
48
48
|
|
|
49
|
-
|
|
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
|
|
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
data/lib/reflex/application.rb
CHANGED
|
@@ -33,11 +33,11 @@ module Reflex
|
|
|
33
33
|
|
|
34
34
|
private
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
|
data/lib/reflex/autoinit.rb
CHANGED
data/lib/reflex/button.rb
CHANGED
|
@@ -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
|
data/lib/reflex/key_event.rb
CHANGED
|
@@ -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(
|
|
24
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
113
|
+
INT_SYMS = [:to_i, :to_int]
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
FLOAT_SYMS = [:to_f, :to_float]
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
STRING_SYMS = [:to_s, :to_str, :to_string]
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
ARRAY_GET_SYMS = [:[], :at]
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
ARRAY_SET_SYMS = [:[]=, :set_at]
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
ARRAY_SIZE_SYMS = [:size, :length]
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
|
data/lib/reflex/note_event.rb
CHANGED
|
@@ -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
|
|
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
|
|
data/lib/reflex/pointer.rb
CHANGED
|
@@ -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(
|
|
42
|
-
|
|
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
|
|
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
|
data/lib/reflex/pointer_event.rb
CHANGED
|
@@ -24,7 +24,18 @@ module Reflex
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def inspect()
|
|
27
|
-
"#<Reflex::PointerEvent id
|
|
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
|