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.
- checksums.yaml +4 -4
- data/.doc/ext/reflex/application.cpp +56 -7
- data/.doc/ext/reflex/capture_event.cpp +1 -1
- data/.doc/ext/reflex/chase_constraint.cpp +84 -0
- data/.doc/ext/reflex/clipboard.cpp +65 -0
- data/.doc/ext/reflex/color_event.cpp +76 -0
- data/.doc/ext/reflex/color_picker.cpp +113 -0
- data/.doc/ext/reflex/constraint.cpp +135 -0
- 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 +178 -0
- data/.doc/ext/reflex/menu.cpp +303 -0
- 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 +40 -10
- data/.doc/ext/reflex/note_event.cpp +1 -1
- data/.doc/ext/reflex/pin.cpp +156 -0
- data/.doc/ext/reflex/pointer.cpp +3 -1
- data/.doc/ext/reflex/pointer_event.cpp +3 -3
- data/.doc/ext/reflex/polygon_shape.cpp +1 -1
- data/.doc/ext/reflex/rect_shape.cpp +1 -1
- data/.doc/ext/reflex/reflex.cpp +606 -237
- data/.doc/ext/reflex/screen.cpp +27 -1
- data/.doc/ext/reflex/scroll_event.cpp +1 -1
- data/.doc/ext/reflex/selector.cpp +5 -5
- data/.doc/ext/reflex/shape.cpp +1 -1
- data/.doc/ext/reflex/snap_constraint.cpp +125 -0
- data/.doc/ext/reflex/style.cpp +1 -1
- data/.doc/ext/reflex/style_length.cpp +4 -3
- 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 +206 -79
- data/.doc/ext/reflex/wheel_constraint.cpp +142 -0
- data/.doc/ext/reflex/wheel_event.cpp +1 -1
- data/.doc/ext/reflex/window.cpp +282 -31
- data/.github/workflows/release-gem.yml +2 -40
- data/.github/workflows/tag.yml +5 -28
- data/.github/workflows/test.yml +1 -28
- data/ChangeLog.md +79 -0
- data/Gemfile.lock +13 -8
- data/README.md +1 -0
- data/Rakefile +13 -2
- data/Reflex.podspec +2 -2
- data/VERSION +1 -1
- data/ext/reflex/application.cpp +62 -7
- data/ext/reflex/capture_event.cpp +1 -1
- data/ext/reflex/chase_constraint.cpp +89 -0
- data/ext/reflex/clipboard.cpp +69 -0
- data/ext/reflex/color_event.cpp +80 -0
- data/ext/reflex/color_picker.cpp +121 -0
- data/ext/reflex/constraint.cpp +146 -0
- 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 +194 -0
- data/ext/reflex/menu.cpp +331 -0
- 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 +40 -10
- data/ext/reflex/note_event.cpp +1 -1
- data/ext/reflex/pin.cpp +165 -0
- data/ext/reflex/pointer.cpp +3 -1
- data/ext/reflex/pointer_event.cpp +3 -3
- data/ext/reflex/polygon_shape.cpp +1 -1
- data/ext/reflex/rect_shape.cpp +1 -1
- data/ext/reflex/reflex.cpp +608 -237
- data/ext/reflex/screen.cpp +31 -2
- data/ext/reflex/scroll_event.cpp +1 -1
- data/ext/reflex/selector.cpp +5 -5
- data/ext/reflex/selector.h +10 -10
- data/ext/reflex/shape.cpp +1 -1
- data/ext/reflex/snap_constraint.cpp +135 -0
- data/ext/reflex/style.cpp +1 -1
- data/ext/reflex/style_length.cpp +4 -3
- 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 +236 -96
- data/ext/reflex/wheel_constraint.cpp +154 -0
- data/ext/reflex/wheel_event.cpp +1 -1
- data/ext/reflex/window.cpp +318 -40
- data/include/reflex/application.h +19 -0
- data/include/reflex/clipboard.h +53 -0
- data/include/reflex/color_picker.h +65 -0
- data/include/reflex/constraint.h +275 -0
- data/include/reflex/defs.h +204 -195
- data/include/reflex/event.h +180 -88
- data/include/reflex/file_dialog.h +73 -0
- data/include/reflex/gamepad.h +3 -0
- data/include/reflex/menu.h +120 -0
- data/include/reflex/midi.h +3 -0
- data/include/reflex/pin.h +68 -0
- data/include/reflex/pointer.h +4 -0
- data/include/reflex/reflex.h +2 -0
- data/include/reflex/ruby/application.h +6 -1
- data/include/reflex/ruby/clipboard.h +23 -0
- data/include/reflex/ruby/color_picker.h +89 -0
- data/include/reflex/ruby/constraint.h +94 -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/menu.h +103 -0
- data/include/reflex/ruby/pin.h +40 -0
- data/include/reflex/ruby/reflex.h +3 -0
- data/include/reflex/ruby/view.h +123 -39
- data/include/reflex/ruby/window.h +96 -19
- data/include/reflex/ruby.h +3 -0
- data/include/reflex/screen.h +11 -2
- data/include/reflex/view.h +66 -27
- data/include/reflex/window.h +57 -12
- data/include/reflex.h +8 -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/chase_constraint.rb +15 -0
- data/lib/reflex/clipboard.rb +19 -0
- data/lib/reflex/color_event.rb +16 -0
- data/lib/reflex/color_picker.rb +45 -0
- data/lib/reflex/constraint.rb +29 -0
- data/lib/reflex/control_change_event.rb +17 -0
- data/lib/reflex/extension.rb +1 -1
- data/lib/reflex/file_dialog.rb +70 -0
- data/lib/reflex/file_event.rb +37 -0
- data/lib/reflex/helper.rb +79 -0
- data/lib/reflex/key_event.rb +14 -14
- data/lib/reflex/link_constraint.rb +31 -0
- data/lib/reflex/menu.rb +92 -0
- data/lib/reflex/model.rb +19 -19
- data/lib/reflex/note_event.rb +1 -1
- data/lib/reflex/pin.rb +39 -0
- data/lib/reflex/pointer.rb +30 -1
- data/lib/reflex/pointer_event.rb +13 -2
- data/lib/reflex/reflex.rb +5 -0
- data/lib/reflex/shape.rb +14 -14
- data/lib/reflex/snap_constraint.rb +28 -0
- 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 +85 -18
- data/lib/reflex/wheel_constraint.rb +28 -0
- data/lib/reflex/wheel_event.rb +19 -1
- data/lib/reflex/window.rb +25 -13
- data/lib/reflex.rb +23 -8
- data/pod.rake +1 -1
- data/reflex.gemspec +4 -4
- data/samples/constraint.rb +152 -0
- data/samples/ime.rb +100 -0
- data/samples/ios/hello/hello.xcodeproj/project.pbxproj +236 -224
- data/samples/menu.rb +32 -0
- 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 +180 -20
- data/src/application.h +95 -5
- data/src/clipboard.cpp +81 -0
- data/src/color_picker.cpp +113 -0
- data/src/color_picker.h +36 -0
- data/src/constraint.cpp +1662 -0
- data/src/constraint.h +64 -0
- data/src/event.cpp +416 -252
- data/src/event.h +13 -2
- 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 +29 -0
- data/src/ios/clipboard.mm +44 -0
- data/src/ios/color_picker.mm +19 -0
- data/src/ios/event.h +6 -2
- data/src/ios/event.mm +31 -12
- data/src/ios/file_dialog.mm +21 -0
- data/src/ios/gamepad.mm +4 -4
- data/src/ios/menu.mm +41 -0
- data/src/ios/reflex.mm +8 -0
- data/src/ios/screen.mm +26 -0
- data/src/ios/view_controller.mm +47 -42
- data/src/ios/window.mm +44 -9
- data/src/menu.cpp +387 -0
- data/src/menu.h +81 -0
- data/src/midi.cpp +61 -31
- data/src/osx/app_delegate.h +4 -0
- data/src/osx/app_delegate.mm +168 -139
- data/src/osx/application.mm +103 -5
- data/src/osx/clipboard.mm +45 -0
- data/src/osx/color_picker.mm +112 -0
- data/src/osx/event.h +10 -0
- data/src/osx/event.mm +114 -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.h +25 -0
- data/src/osx/menu.mm +516 -0
- data/src/osx/native_window.h +16 -2
- data/src/osx/native_window.mm +141 -57
- data/src/osx/opengl_view.h +2 -1
- data/src/osx/opengl_view.mm +229 -37
- data/src/osx/reflex.mm +38 -0
- data/src/osx/screen.mm +36 -0
- data/src/osx/window.mm +117 -24
- data/src/pin.cpp +137 -0
- data/src/pointer.cpp +36 -16
- data/src/pointer.h +10 -0
- data/src/rays.h +46 -0
- data/src/sdl/application.cpp +73 -8
- data/src/sdl/clipboard.cpp +39 -0
- data/src/sdl/color_picker.cpp +18 -0
- data/src/sdl/event.cpp +44 -6
- data/src/sdl/event.h +18 -3
- data/src/sdl/file_dialog.cpp +20 -0
- data/src/sdl/gamepad.cpp +3 -7
- data/src/sdl/menu.cpp +40 -0
- data/src/sdl/reflex.cpp +20 -0
- data/src/sdl/screen.cpp +36 -0
- data/src/sdl/window.cpp +168 -37
- data/src/shape.cpp +15 -10
- data/src/view.cpp +583 -233
- data/src/view.h +22 -4
- data/src/vk.h +416 -0
- data/src/win32/application.cpp +167 -12
- data/src/win32/application.h +20 -0
- data/src/win32/clipboard.cpp +210 -0
- data/src/win32/color_picker.cpp +82 -0
- data/src/win32/event.cpp +123 -11
- data/src/win32/event.h +22 -3
- data/src/win32/file_dialog.cpp +226 -0
- data/src/win32/gamepad.cpp +9 -2
- data/src/win32/menu.cpp +490 -0
- data/src/win32/menu.h +35 -0
- 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 +858 -135
- data/src/win32/window.h +9 -0
- data/src/window.cpp +929 -183
- data/src/window.h +77 -33
- data/src/world.cpp +86 -15
- data/src/world.h +9 -2
- data/test/helper.rb +24 -0
- data/test/test_application.rb +101 -1
- data/test/test_chase_constraint.rb +122 -0
- data/test/test_clipboard.rb +54 -0
- data/test/test_color_event.rb +36 -0
- data/test/test_color_picker.rb +62 -0
- data/test/test_constraint.rb +184 -0
- 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 +23 -2
- data/test/test_link_constraint.rb +237 -0
- data/test/test_menu.rb +237 -0
- data/test/test_pin.rb +65 -0
- data/test/test_pointer.rb +50 -26
- data/test/test_pointer_event.rb +25 -10
- data/test/test_reflex.rb +36 -0
- data/test/test_screen.rb +24 -2
- data/test/test_snap_constraint.rb +140 -0
- data/test/test_text_event.rb +54 -0
- data/test/test_view.rb +152 -25
- data/test/test_wheel_constraint.rb +125 -0
- data/test/test_wheel_event.rb +24 -10
- data/test/test_window.rb +205 -43
- metadata +154 -10
- data/.github/workflows/utils.rb +0 -127
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require_relative 'helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TestClipboard < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
def setup()
|
|
7
|
+
@saved_text = Reflex::Clipboard.text
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def teardown()
|
|
11
|
+
if @saved_text
|
|
12
|
+
Reflex::Clipboard.text = @saved_text
|
|
13
|
+
else
|
|
14
|
+
Reflex::Clipboard.clear
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_initialize()
|
|
19
|
+
assert_raise(Reflex::ReflexError) {Reflex::Clipboard.new}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_text()
|
|
23
|
+
Reflex::Clipboard.text = 'ABC'
|
|
24
|
+
assert_equal 'ABC', Reflex::Clipboard.text
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_text_utf8()
|
|
28
|
+
Reflex::Clipboard.text = 'あいう'
|
|
29
|
+
assert_equal 'あいう', Reflex::Clipboard.text
|
|
30
|
+
assert_equal Encoding::UTF_8, Reflex::Clipboard.text.encoding
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_text_multiline()
|
|
34
|
+
Reflex::Clipboard.text = "A\nB\nC"
|
|
35
|
+
assert_equal "A\nB\nC", Reflex::Clipboard.text
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_universal_accessor()
|
|
39
|
+
Reflex::Clipboard.text 'ABC'
|
|
40
|
+
assert_equal 'ABC', Reflex::Clipboard.text
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_clear()
|
|
44
|
+
Reflex::Clipboard.text = 'ABC'
|
|
45
|
+
Reflex::Clipboard.clear
|
|
46
|
+
assert_nil Reflex::Clipboard.text
|
|
47
|
+
end unless linux?
|
|
48
|
+
|
|
49
|
+
def test_empty_text()
|
|
50
|
+
Reflex::Clipboard.text = ''
|
|
51
|
+
assert_equal '', Reflex::Clipboard.text
|
|
52
|
+
end unless linux?
|
|
53
|
+
|
|
54
|
+
end# TestClipboard
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require_relative 'helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TestColorEvent < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
def event(*args)
|
|
7
|
+
Reflex::ColorEvent.new(*args)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def color(*args)
|
|
11
|
+
Reflex::Color.new(*args)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_initialize()
|
|
15
|
+
assert_equal color(1, 0, 0), event(color(1, 0, 0)).color
|
|
16
|
+
assert_equal color(0, 1, 0, 0.5), event([0, 1, 0, 0.5]).color
|
|
17
|
+
|
|
18
|
+
assert_raise(ArgumentError) {event}
|
|
19
|
+
assert_raise(ArgumentError) {event(nil)}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_dup()
|
|
23
|
+
e1 = event color(1, 0, 0)
|
|
24
|
+
e2 = e1.dup
|
|
25
|
+
e1.block
|
|
26
|
+
e3 = e1.dup
|
|
27
|
+
assert_true e1.blocked?
|
|
28
|
+
assert_false e2.blocked?
|
|
29
|
+
assert_true e3.blocked?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_inspect()
|
|
33
|
+
assert_equal "#<Reflex::ColorEvent color:[1.0, 0.0, 0.0, 1.0]>", event(color(1, 0, 0)).inspect
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end# TestColorEvent
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require_relative 'helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TestColorPicker < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
include HasWindow
|
|
7
|
+
|
|
8
|
+
def picker(*args, &block)
|
|
9
|
+
Reflex::ColorPicker.new(*args, &block)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def event(color)
|
|
13
|
+
Reflex::ColorEvent.new color
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def color(*args)
|
|
17
|
+
Reflex::Color.new(*args)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_initialize()
|
|
21
|
+
assert_nil picker .owner
|
|
22
|
+
assert_false picker .alpha?
|
|
23
|
+
assert_true picker( alpha: true) .alpha?
|
|
24
|
+
assert_true picker {alpha true} .alpha?
|
|
25
|
+
assert_true picker {self.alpha = true} .alpha?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_owner()
|
|
29
|
+
w = window
|
|
30
|
+
picker.tap do |p|
|
|
31
|
+
p.owner = w
|
|
32
|
+
assert_equal w, p.owner
|
|
33
|
+
p.owner = nil
|
|
34
|
+
assert_nil p.owner
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
assert_raise(TypeError) {picker.owner = 1}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_alpha()
|
|
41
|
+
picker.tap do |p|
|
|
42
|
+
p.alpha = true
|
|
43
|
+
assert_true p.alpha?
|
|
44
|
+
p.alpha = false
|
|
45
|
+
assert_false p.alpha?
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_color_block_stays_until_close()
|
|
50
|
+
# the native side calls call_color_block and clear_color_block
|
|
51
|
+
p, got = picker, []
|
|
52
|
+
p.instance_variable_set :@color_block, -> e {got << e.color}
|
|
53
|
+
p.send :call_color_block, event(color(1, 0, 0))
|
|
54
|
+
p.send :call_color_block, event(color(0, 1, 0))
|
|
55
|
+
assert_equal [color(1, 0, 0), color(0, 1, 0)], got
|
|
56
|
+
|
|
57
|
+
p.send :clear_color_block
|
|
58
|
+
p.send :call_color_block, event(color(0, 0, 1))
|
|
59
|
+
assert_equal [color(1, 0, 0), color(0, 1, 0)], got
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end# TestColorPicker
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
require_relative 'helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TestConstraint < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
include HasWindow
|
|
7
|
+
|
|
8
|
+
R = Reflex
|
|
9
|
+
|
|
10
|
+
def view(x = 0, y = 0, w = 50, h = 50, **options, &block)
|
|
11
|
+
R::View.new(
|
|
12
|
+
frame: [x, y, w, h],
|
|
13
|
+
shape: R::RectShape.new(density: 1),
|
|
14
|
+
**options, &block)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def point(...)
|
|
18
|
+
R::Point.new(...)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def setup_views(win = window)
|
|
22
|
+
v1 = view 100, 100, dynamic: true
|
|
23
|
+
v2 = view 200, 100, static: true
|
|
24
|
+
win&.add v1
|
|
25
|
+
win&.add v2
|
|
26
|
+
[v1, v2, win, win&.root]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_activation()
|
|
30
|
+
v1, v2, = setup_views nil
|
|
31
|
+
w = window
|
|
32
|
+
|
|
33
|
+
c = v1.link v2; assert_false c.active?
|
|
34
|
+
w.add v1; assert_false c.active?
|
|
35
|
+
w.add v2; assert_true c.active?
|
|
36
|
+
w.remove v1; assert_false c.active?
|
|
37
|
+
w.add v1; assert_true c.active?
|
|
38
|
+
c = v1.link v2; assert_true c.active?
|
|
39
|
+
|
|
40
|
+
assert_in_delta 100, c.current_distance
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_pins()
|
|
44
|
+
v1, v2, = setup_views
|
|
45
|
+
|
|
46
|
+
c = v1.pin(10, 20).snap v2.pin(30, 40)
|
|
47
|
+
assert_equal v1, c.pins[0].view
|
|
48
|
+
assert_equal_point point(10, 20), c.pins[0].pos
|
|
49
|
+
assert_equal v2, c.pins[1].view
|
|
50
|
+
assert_equal_point point(30, 40), c.pins[1].pos
|
|
51
|
+
assert_equal [v1, v2], c.views
|
|
52
|
+
assert_equal [v1, v2], c.pins.map(&:view)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_resolved_positions()
|
|
56
|
+
v1, v2, = setup_views
|
|
57
|
+
|
|
58
|
+
assert_equal_point point( 25, 25), v1.pin .snap(v2) .pins[0].pos
|
|
59
|
+
assert_equal_point point(-75, 25), v1.pin .snap(v2) .pins[1].pos
|
|
60
|
+
assert_equal_point point( 10, 20), v1.pin(10, 20).snap(v2) .pins[0].pos
|
|
61
|
+
assert_equal_point point(-90, 20), v1.pin(10, 20).snap(v2) .pins[1].pos
|
|
62
|
+
assert_equal_point point( 130, 40), v1.pin .snap(v2, 30, 40).pins[0].pos
|
|
63
|
+
assert_equal_point point( 30, 40), v1.pin .snap(v2, 30, 40).pins[1].pos
|
|
64
|
+
assert_equal_point point( 50, 60), v1.pin(50, 60).snap(v2, 70, 80).pins[0].pos
|
|
65
|
+
assert_equal_point point( 70, 80), v1.pin(50, 60).snap(v2, 70, 80).pins[1].pos
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_spring()
|
|
69
|
+
v1, v2, = setup_views
|
|
70
|
+
|
|
71
|
+
c = v1.link v2, spring: 4, damping: 0.5
|
|
72
|
+
assert_in_delta 4, c.spring
|
|
73
|
+
assert_in_delta 0.5, c.damping
|
|
74
|
+
|
|
75
|
+
c.spring = nil; assert_nil c.spring
|
|
76
|
+
c.spring = 8; assert_in_delta 8, c.spring
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_collide()
|
|
80
|
+
v1, v2, = setup_views
|
|
81
|
+
|
|
82
|
+
assert_false v1.snap(v2) .collide?
|
|
83
|
+
assert_false v1.snap(v2, collide: false).collide?
|
|
84
|
+
assert_true v1.snap(v2, collide: true) .collide?
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_selector()
|
|
88
|
+
v1, v2, = setup_views
|
|
89
|
+
|
|
90
|
+
c = v1.link v2, name: :name1, tag: [:tag1, :tag2]
|
|
91
|
+
assert_equal 'name1', c.name
|
|
92
|
+
assert_equal ['tag1', 'tag2'], c.tags.to_a
|
|
93
|
+
assert_true c.tag?(:tag1)
|
|
94
|
+
assert_true c.tag?('tag1')
|
|
95
|
+
assert_true c.tag?(:tag2)
|
|
96
|
+
assert_false c.tag?(:tag3)
|
|
97
|
+
|
|
98
|
+
c.name = :name2
|
|
99
|
+
assert_equal 'name2', c.name
|
|
100
|
+
|
|
101
|
+
assert_false c.tag?(:tag9)
|
|
102
|
+
c.add_tag :tag9
|
|
103
|
+
assert_true c.tag?(:tag9)
|
|
104
|
+
assert_equal ['tag1', 'tag2', 'tag9'], c.tags.to_a
|
|
105
|
+
c.remove_tag :tag9
|
|
106
|
+
assert_false c.tag?(:tag9)
|
|
107
|
+
assert_equal ['tag1', 'tag2'], c.tags.to_a
|
|
108
|
+
|
|
109
|
+
c.clear_tags
|
|
110
|
+
assert_equal [], c.tags.to_a
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_block()
|
|
114
|
+
v1, v2, = setup_views
|
|
115
|
+
|
|
116
|
+
c = v1.link v2 do
|
|
117
|
+
distance 80
|
|
118
|
+
spring 4
|
|
119
|
+
end
|
|
120
|
+
assert_equal 80, c.distance
|
|
121
|
+
assert_in_delta 4, c.spring
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_constraints()
|
|
125
|
+
v1, v2, = setup_views
|
|
126
|
+
|
|
127
|
+
c1 = v1.link v2
|
|
128
|
+
c2 = v1.snap v2
|
|
129
|
+
assert_equal [c1, c2], v1.constraints.to_a
|
|
130
|
+
assert_equal [c1, c2], v2.constraints.to_a
|
|
131
|
+
assert_equal [R::LinkConstraint, R::SnapConstraint], v1.constraints.map(&:class)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_remove()
|
|
135
|
+
v1, v2, _, parent = setup_views
|
|
136
|
+
|
|
137
|
+
c = v1.link v2
|
|
138
|
+
c.remove
|
|
139
|
+
assert_false c.active?
|
|
140
|
+
assert_true c.removed?
|
|
141
|
+
assert_equal [], v1.constraints.to_a
|
|
142
|
+
assert_equal [], v2.constraints.to_a
|
|
143
|
+
|
|
144
|
+
c.remove # idempotent
|
|
145
|
+
|
|
146
|
+
parent.remove v1
|
|
147
|
+
parent.add v1
|
|
148
|
+
assert_false c.active? # never comes back
|
|
149
|
+
|
|
150
|
+
assert_nothing_raised do
|
|
151
|
+
c.spring = 4
|
|
152
|
+
c.damping = 0.5
|
|
153
|
+
c.distance = 50
|
|
154
|
+
end
|
|
155
|
+
assert_false c.active? # removed constraint is inert
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def test_constrain_to_itself_error()
|
|
159
|
+
setup_views.tap do |v,|
|
|
160
|
+
assert_raise(ArgumentError) {v.snap v}
|
|
161
|
+
end
|
|
162
|
+
setup_views.tap do |v,|
|
|
163
|
+
assert_raise(ArgumentError) {v.chase v}
|
|
164
|
+
assert_equal [], v.constraints.to_a # rejected self-constraint leaves no orphan
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def test_world_mismatch_error()
|
|
169
|
+
win = window
|
|
170
|
+
parent1, child1 = view(0, 0, 500, 500), view(100, 100, dynamic: true)
|
|
171
|
+
parent2, child2 = view(0, 0, 500, 500), view(100, 100, dynamic: true)
|
|
172
|
+
parent1.add child1
|
|
173
|
+
parent2.add child2
|
|
174
|
+
win.add parent1
|
|
175
|
+
win.add parent2
|
|
176
|
+
child1.meter2pixel # create parent1 world
|
|
177
|
+
child2.meter2pixel # create parent2 world
|
|
178
|
+
|
|
179
|
+
assert_raise(R::PhysicsError) {child1.snap child2}
|
|
180
|
+
assert_equal [], child1.constraints.to_a # rejected pins leave no trace
|
|
181
|
+
assert_equal [], child2.constraints.to_a
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
end# TestConstraint
|
data/test/test_event.rb
CHANGED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require_relative 'helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TestFileDialog < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
def dialog(*args, &block)
|
|
7
|
+
Reflex::FileDialog.new(*args, &block)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_initialize()
|
|
11
|
+
assert_nil dialog .owner
|
|
12
|
+
assert_equal '', dialog .title
|
|
13
|
+
assert_equal 'hoge', dialog( title: 'hoge') .title
|
|
14
|
+
assert_equal 'hoge', dialog {title 'hoge'} .title
|
|
15
|
+
assert_equal 'hoge', dialog {self.title = 'hoge'} .title
|
|
16
|
+
assert_equal [], dialog .extensions
|
|
17
|
+
assert_equal ['png'], dialog( extensions: ['png']).extensions
|
|
18
|
+
assert_equal ['png'], dialog {extensions ['png']}.extensions
|
|
19
|
+
assert_equal ['png'], dialog {self.extensions = ['png']}.extensions
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_extensions()
|
|
23
|
+
dialog.tap do |d|
|
|
24
|
+
d.extensions = %w[png jpg]
|
|
25
|
+
assert_equal %w[png jpg], d.extensions
|
|
26
|
+
d.extensions = ['txt']
|
|
27
|
+
assert_equal ['txt'], d.extensions
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
assert_equal %w[png], dialog(extensions: 'png') .extensions
|
|
31
|
+
assert_equal %w[png], dialog(extensions: ['png']) .extensions
|
|
32
|
+
assert_equal %w[png], dialog(extensions: [:png]) .extensions
|
|
33
|
+
assert_equal %w[jpg], dialog(extensions: ['.jpg']) .extensions
|
|
34
|
+
assert_equal %w[gif], dialog(extensions: ['..gif']) .extensions
|
|
35
|
+
assert_equal %w[tar.gz], dialog(extensions: ['.tar.gz']).extensions
|
|
36
|
+
|
|
37
|
+
assert_raise(ArgumentError) {dialog.extensions = ['']}
|
|
38
|
+
assert_raise(ArgumentError) {dialog.extensions = ['.']}
|
|
39
|
+
assert_raise(ArgumentError) {dialog.extensions = ['png', '']}
|
|
40
|
+
assert_raise(ArgumentError) {dialog.extensions = ['*.png']}
|
|
41
|
+
assert_raise(ArgumentError) {dialog.extensions = ['p?g']}
|
|
42
|
+
assert_raise(ArgumentError) {dialog.extensions = ['png;jpg']}
|
|
43
|
+
assert_raise(ArgumentError) {dialog.extensions = ['a/b']}
|
|
44
|
+
assert_raise(ArgumentError) {dialog.extensions = [/png/]}
|
|
45
|
+
assert_raise(ArgumentError) {dialog.extensions = [1]}
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end# TestFileDialog
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require_relative 'helper'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TestFileEvent < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
Event = Reflex::FileEvent
|
|
7
|
+
|
|
8
|
+
NONE, OPEN, SAVE = Event::ACTION_NONE, Event::OPEN, Event::SAVE
|
|
9
|
+
|
|
10
|
+
def event(*args)
|
|
11
|
+
Event.new(*args)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_initialize()
|
|
15
|
+
assert_equal :open, event(OPEN, ['/a', '/b']).action
|
|
16
|
+
assert_equal ['/a', '/b'], event(OPEN, ['/a', '/b']).paths
|
|
17
|
+
assert_equal '/a', event(OPEN, ['/a', '/b']).path
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_dup()
|
|
21
|
+
e1 = event OPEN, ['/a']
|
|
22
|
+
e2 = e1.dup
|
|
23
|
+
e1.block
|
|
24
|
+
e3 = e1.dup
|
|
25
|
+
assert_true e1.blocked?
|
|
26
|
+
assert_false e2.blocked?
|
|
27
|
+
assert_true e3.blocked?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_action()
|
|
31
|
+
assert_equal :none, event(NONE, []).action
|
|
32
|
+
assert_equal :open, event(OPEN, []).action
|
|
33
|
+
assert_equal :save, event(SAVE, []).action
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_open_save?()
|
|
37
|
+
assert_true event(OPEN, ['/a']).open?
|
|
38
|
+
assert_false event(OPEN, ['/a']).save?
|
|
39
|
+
assert_false event(SAVE, ['/a']).open?
|
|
40
|
+
assert_true event(SAVE, ['/a']).save?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end# TestFileEvent
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
require_relative 'helper'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class TestHasTextPreedit < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
PREEDIT, COMMIT = Reflex::TextEvent::PREEDIT, Reflex::TextEvent::COMMIT
|
|
8
|
+
|
|
9
|
+
def view(*args)
|
|
10
|
+
Class.new(Reflex::View) {include Reflex::HasTextPreedit}.new(*args)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def event(*args)
|
|
14
|
+
Reflex::TextEvent.new(*args)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_initial_state()
|
|
18
|
+
v = view
|
|
19
|
+
assert_equal '', v.preedit
|
|
20
|
+
assert_nil v.preedit_selection
|
|
21
|
+
assert_false v.preedit?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_preedit()
|
|
25
|
+
v = view
|
|
26
|
+
v.on_text_preedit event(PREEDIT, 'こんにちは', 1, 2)
|
|
27
|
+
assert_equal 'こんにちは', v.preedit
|
|
28
|
+
assert_equal 1...3, v.preedit_selection
|
|
29
|
+
assert_true v.preedit?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_cancel()
|
|
33
|
+
v = view
|
|
34
|
+
v.on_text_preedit event(PREEDIT, 'こんにちは', 1, 2)
|
|
35
|
+
v.on_text_preedit event(PREEDIT, '', -1, 0)
|
|
36
|
+
assert_equal '', v.preedit
|
|
37
|
+
assert_nil v.preedit_selection
|
|
38
|
+
assert_false v.preedit?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_commit_clears_preedit()
|
|
42
|
+
v = view
|
|
43
|
+
v.on_text_preedit event(PREEDIT, 'こんにちは', 1, 2)
|
|
44
|
+
v.on_text_commit event(COMMIT, '今日は', -1, 0)
|
|
45
|
+
assert_equal '', v.preedit
|
|
46
|
+
assert_nil v.preedit_selection
|
|
47
|
+
assert_false v.preedit?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_include_accepts_text_input()
|
|
51
|
+
assert_true view.accepts_text_input?
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end# TestHasTextPreedit
|
data/test/test_key_event.rb
CHANGED
|
@@ -3,10 +3,12 @@ require_relative 'helper'
|
|
|
3
3
|
|
|
4
4
|
class TestKeyEvent < Test::Unit::TestCase
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
R = Reflex
|
|
7
|
+
|
|
8
|
+
DOWN, UP = R::KeyEvent::DOWN, R::KeyEvent::UP
|
|
7
9
|
|
|
8
10
|
def event(*args)
|
|
9
|
-
|
|
11
|
+
R::KeyEvent.new(*args)
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
def test_initialize()
|
|
@@ -43,4 +45,23 @@ class TestKeyEvent < Test::Unit::TestCase
|
|
|
43
45
|
assert_nil event(DOWN, nil, 1, 2, 3).chars
|
|
44
46
|
end
|
|
45
47
|
|
|
48
|
+
def test_key()
|
|
49
|
+
assert_equal :a, event(DOWN, 'a', R::KEY_A, 0, 0).key
|
|
50
|
+
assert_equal :f1, event(DOWN, '', R::KEY_F1, 0, 0).key
|
|
51
|
+
assert_equal :left, event(DOWN, '', R::KEY_LEFT, 0, 0).key
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_modifiers()
|
|
55
|
+
e = event DOWN, 'a', 1, R::MOD_CONTROL | R::MOD_CAPS, 0
|
|
56
|
+
assert_equal [:control], e.modifiers
|
|
57
|
+
assert_equal [:control, :caps], e.modifiers(all: true)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_inspect()
|
|
61
|
+
hex_z = R::KEY_Z.to_s(16).upcase
|
|
62
|
+
assert_equal(
|
|
63
|
+
"#<Reflex::KeyEvent :down chars:'z' key:z code:0x#{hex_z} mod:[:control, :caps] repeat:2 captured?:false>",
|
|
64
|
+
event(DOWN, 'z', R::KEY_Z, R::MOD_CONTROL | R::MOD_CAPS, 2).inspect)
|
|
65
|
+
end
|
|
66
|
+
|
|
46
67
|
end# TestKeyEvent
|