reflexion 0.1.22 → 0.1.23

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/event.cpp +9 -1
  3. data/.doc/ext/reflex/key_event.cpp +3 -3
  4. data/.doc/ext/reflex/native.cpp +2 -0
  5. data/.doc/ext/reflex/pointer.cpp +158 -0
  6. data/.doc/ext/reflex/pointer_event.cpp +29 -88
  7. data/.doc/ext/reflex/selector.cpp +8 -0
  8. data/.doc/ext/reflex/view.cpp +57 -0
  9. data/.doc/ext/reflex/window.cpp +24 -0
  10. data/VERSION +1 -1
  11. data/ext/reflex/event.cpp +11 -2
  12. data/ext/reflex/key_event.cpp +3 -3
  13. data/ext/reflex/native.cpp +2 -0
  14. data/ext/reflex/pointer.cpp +170 -0
  15. data/ext/reflex/pointer_event.cpp +29 -94
  16. data/ext/reflex/selector.cpp +9 -0
  17. data/ext/reflex/view.cpp +67 -3
  18. data/ext/reflex/window.cpp +30 -3
  19. data/include/reflex/defs.h +0 -18
  20. data/include/reflex/event.h +26 -27
  21. data/include/reflex/pointer.h +107 -0
  22. data/include/reflex/ruby/pointer.h +41 -0
  23. data/include/reflex/ruby/view.h +9 -0
  24. data/include/reflex/ruby/window.h +9 -0
  25. data/include/reflex/selector.h +1 -1
  26. data/include/reflex/view.h +6 -4
  27. data/include/reflex/window.h +10 -8
  28. data/lib/reflex/key_event.rb +1 -1
  29. data/lib/reflex/pointer.rb +107 -0
  30. data/lib/reflex/pointer_event.rb +16 -54
  31. data/lib/reflex.rb +1 -0
  32. data/reflex.gemspec +5 -5
  33. data/src/event.cpp +189 -37
  34. data/src/event.h +32 -0
  35. data/src/ios/event.h +15 -3
  36. data/src/ios/event.mm +126 -11
  37. data/src/ios/view_controller.mm +49 -21
  38. data/src/osx/event.h +6 -3
  39. data/src/osx/event.mm +40 -22
  40. data/src/osx/native_window.mm +79 -16
  41. data/src/pointer.cpp +203 -0
  42. data/src/pointer.h +26 -0
  43. data/src/selector.cpp +1 -1
  44. data/src/view.cpp +83 -72
  45. data/src/view.h +0 -4
  46. data/src/window.cpp +321 -97
  47. data/src/window.h +22 -3
  48. data/test/test_event.rb +16 -2
  49. data/test/test_pointer.rb +149 -0
  50. data/test/test_pointer_event.rb +70 -104
  51. data/test/test_selector.rb +7 -0
  52. data/test/test_view.rb +38 -11
  53. data/test/test_window.rb +27 -25
  54. metadata +46 -35
@@ -0,0 +1,149 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require_relative 'helper'
5
+
6
+
7
+ class TestPointer < Test::Unit::TestCase
8
+
9
+ TYPE_NONE = Reflex::Pointer::TYPE_NONE
10
+ MOUSE = Reflex::Pointer::MOUSE
11
+ LEFT = Reflex::Pointer::MOUSE_LEFT
12
+ RIGHT = Reflex::Pointer::MOUSE_RIGHT
13
+ MIDDLE = Reflex::Pointer::MOUSE_MIDDLE
14
+ TOUCH = Reflex::Pointer::TOUCH
15
+ PEN = Reflex::Pointer::PEN
16
+
17
+ ACTION_NONE = Reflex::Pointer::ACTION_NONE
18
+ DOWN = Reflex::Pointer::DOWN
19
+ UP = Reflex::Pointer::UP
20
+ MOVE = Reflex::Pointer::MOVE
21
+ STAY = Reflex::Pointer::STAY
22
+ CANCEL = Reflex::Pointer::CANCEL
23
+
24
+ T = true
25
+ F = false
26
+
27
+ def pointer(
28
+ id: 0, type: TYPE_NONE, action: ACTION_NONE,
29
+ position: 0, modifiers: 0, click_count: 0, drag: false,
30
+ time: 0)
31
+
32
+ Reflex::Pointer.new(
33
+ id, type, action, position, modifiers, click_count, drag, time)
34
+ end
35
+
36
+ def test_initialize()
37
+ assert_nothing_raised {pointer}
38
+
39
+ p = pointer(
40
+ id: 1, type: TOUCH, action: DOWN,
41
+ position: [2, 3], modifiers: 4, click_count: 5, drag: true,
42
+ time: 6)
43
+
44
+ assert_equal 1, p.id
45
+ assert_equal [:touch], p.type
46
+ assert_equal :down, p.action
47
+ assert_equal [2, 3], p.position.to_a
48
+ assert_equal 4, p.modifiers
49
+ assert_equal 5, p.click_count
50
+ assert_equal true, p.drag?
51
+ assert_equal 6, p.time
52
+ assert_nil p.prev
53
+ end
54
+
55
+ def test_type()
56
+ def type(t)
57
+ pointer(type: t).tap do |o|
58
+ def o.test()
59
+ [type, mouse?, left?, right?, middle?, touch?, pen?]
60
+ end
61
+ end
62
+ end
63
+
64
+ o = type TYPE_NONE
65
+ assert_equal [[], F, F, F, F, F, F], o.test
66
+
67
+ o = type MOUSE
68
+ assert_equal [[:mouse], T, F, F, F, F, F], o.test
69
+
70
+ o = type LEFT
71
+ assert_equal [[:mouse_left], F, T, F, F, F, F], o.test
72
+
73
+ o = type RIGHT
74
+ assert_equal [[:mouse_right], F, F, T, F, F, F], o.test
75
+
76
+ o = type MIDDLE
77
+ assert_equal [[:mouse_middle], F, F, F, T, F, F], o.test
78
+
79
+ o = type TOUCH
80
+ assert_equal [[:touch], F, F, F, F, T, F], o.test
81
+
82
+ o = type PEN
83
+ assert_equal [[:pen], F, F, F, F, F, T], o.test
84
+
85
+ o = type LEFT | RIGHT
86
+ types = [:mouse_left, :mouse_right]
87
+ assert_equal [types, F, T, T, F, F, F], o.test
88
+
89
+ o = type LEFT | RIGHT | MIDDLE
90
+ types = [:mouse_left, :mouse_right, :mouse_middle]
91
+ assert_equal [types, F, T, T, T, F, F], o.test
92
+
93
+ o = type MOUSE | LEFT | RIGHT | MIDDLE | TOUCH | PEN
94
+ types = [:mouse, :mouse_left, :mouse_right, :mouse_middle, :touch, :pen]
95
+ assert_equal [types, T, T, T, T, T, T], o.test
96
+ end
97
+
98
+ def test_action()
99
+ def action(a)
100
+ pointer(action: a).tap do |o|
101
+ def o.test()
102
+ [action, down?, up?, move?, cancel?, stay?]
103
+ end
104
+ end
105
+ end
106
+
107
+ o = action ACTION_NONE
108
+ assert_equal [:none, F, F, F, F, F], o.test
109
+
110
+ o = action DOWN
111
+ assert_equal [:down, T, F, F, F, F], o.test
112
+
113
+ o = action UP
114
+ assert_equal [:up, F, T, F, F, F], o.test
115
+
116
+ o = action MOVE
117
+ assert_equal [:move, F, F, T, F, F], o.test
118
+
119
+ o = action CANCEL
120
+ assert_equal [:cancel, F, F, F, T, F], o.test
121
+
122
+ o = action STAY
123
+ assert_equal [:stay, F, F, F, F, T], o.test
124
+ end
125
+
126
+ def test_position()
127
+ assert_equal [1, 1], pointer(position: 1 ).position.to_a
128
+ assert_equal [2, 3], pointer(position: [2, 3]).position.to_a
129
+ end
130
+
131
+ def test_xy()
132
+ assert_equal 1, pointer(position: [1, 2]).x
133
+ assert_equal 2, pointer(position: [1, 2]).y
134
+ end
135
+
136
+ def test_compare()
137
+ assert_equal pointer, pointer
138
+
139
+ assert_not_equal pointer, pointer(id: 1)
140
+ assert_not_equal pointer, pointer(type: Reflex::Pointer::PEN)
141
+ assert_not_equal pointer, pointer(action: Reflex::Pointer::UP)
142
+ assert_not_equal pointer, pointer(position: 2)
143
+ assert_not_equal pointer, pointer(modifiers: 3)
144
+ assert_not_equal pointer, pointer(click_count: 4)
145
+ assert_not_equal pointer, pointer(drag: true)
146
+ assert_not_equal pointer, pointer(time: 5)
147
+ end
148
+
149
+ end# TestPointer
@@ -6,125 +6,91 @@ require_relative 'helper'
6
6
 
7
7
  class TestPointerEvent < Test::Unit::TestCase
8
8
 
9
- E = Reflex::PointerEvent
10
- T = true
11
- F = false
12
-
13
- TYPE_NONE = E::TYPE_NONE
14
- DOWN = E::TYPE_DOWN
15
- UP = E::TYPE_UP
16
- MOVE = E::TYPE_MOVE
17
-
18
- POINTER_NONE = E::POINTER_NONE
19
- LEFT = E::POINTER_MOUSE_LEFT
20
- RIGHT = E::POINTER_MOUSE_RIGHT
21
- MIDDLE = E::POINTER_MOUSE_MIDDLE
22
- TOUCH = E::POINTER_TOUCH
23
- PEN = E::POINTER_PEN
24
-
25
- def event(
26
- type = TYPE_NONE, pointer_type = POINTER_NONE,
27
- modifiers = 0, count = 0, drag = false,
28
- positions: [0])
29
-
30
- Reflex::PointerEvent.new type, pointer_type, modifiers, count, drag, positions
31
- end
32
-
33
- def test_initialize()
34
- assert_nothing_raised {event positions: 10.times.to_a}
35
- assert_raise(ArgumentError) {event positions: 11.times.to_a}
36
- assert_raise(ArgumentError) {event positions: []}
37
- end
38
-
39
- def test_type()
40
- def type(arg)
41
- event(arg).tap do |o|
42
- def o.test()
43
- [type, down?, up?, move?]
44
- end
45
- end
46
- end
9
+ TYPE_NONE = Reflex::Pointer::TYPE_NONE
10
+ TOUCH = Reflex::Pointer::TOUCH
11
+ PEN = Reflex::Pointer::PEN
47
12
 
48
- o = type TYPE_NONE
49
- assert_equal [:none, F, F, F], o.test
13
+ ACTION_NONE = Reflex::Pointer::ACTION_NONE
14
+ DOWN = Reflex::Pointer::DOWN
15
+ UP = Reflex::Pointer::UP
50
16
 
51
- o = type DOWN
52
- assert_equal [:down, T, F, F], o.test
53
-
54
- o = type UP
55
- assert_equal [:up, F, T, F], o.test
56
-
57
- o = type MOVE
58
- assert_equal [:move, F, F, T], o.test
17
+ def event(*args)
18
+ Reflex::PointerEvent.new(*args)
59
19
  end
60
20
 
61
- def test_pointer_type()
62
- def pointer_type(arg)
63
- event(TYPE_NONE, arg).tap do |o|
64
- def o.test()
65
- [pointer_type, left?, right?, middle?, touch?, pen?]
66
- end
67
- end
68
- end
69
-
70
- o = pointer_type POINTER_NONE
71
- assert_equal [[], F, F, F, F, F], o.test
72
-
73
- o = pointer_type LEFT
74
- assert_equal [[:mouse_left], T, F, F, F, F], o.test
75
-
76
- o = pointer_type RIGHT
77
- assert_equal [[:mouse_right], F, T, F, F, F], o.test
21
+ def pointer(
22
+ id: 0, type: TYPE_NONE, action: ACTION_NONE,
23
+ position: 0, modifiers: 0, click_count: 0, drag: false,
24
+ time: 0)
78
25
 
79
- o = pointer_type MIDDLE
80
- assert_equal [[:mouse_middle], F, F, T, F, F], o.test
81
-
82
- o = pointer_type TOUCH
83
- assert_equal [[:touch], F, F, F, T, F], o.test
84
-
85
- o = pointer_type PEN
86
- assert_equal [[:pen], F, F, F, F, T], o.test
87
-
88
- o = pointer_type LEFT | RIGHT
89
- types = [:mouse_left, :mouse_right]
90
- assert_equal [types, T, T, F, F, F], o.test
91
-
92
- o = pointer_type LEFT | RIGHT | MIDDLE
93
- types = [:mouse_left, :mouse_right, :mouse_middle]
94
- assert_equal [types, T, T, T, F, F], o.test
95
-
96
- o = pointer_type LEFT | RIGHT | MIDDLE | TOUCH | PEN
97
- types = [:mouse_left, :mouse_right, :mouse_middle, :touch, :pen]
98
- assert_equal [types, T, T, T, T, T], o.test
26
+ Reflex::Pointer.new(
27
+ id, type, action, position, modifiers, click_count, drag, time)
99
28
  end
100
29
 
101
- def test_size()
102
- assert_equal 1, event(positions: [0] ).size
103
- assert_equal 2, event(positions: [0, 1]).size
30
+ def test_initialize()
31
+ assert_nothing_raised {event pointer}
32
+ assert_nothing_raised {event pointer, pointer}
33
+ assert_raise(ArgumentError) {event}
34
+
35
+ p1 = pointer(
36
+ id: 1, type: TOUCH, action: DOWN,
37
+ position: [2, 3], modifiers: 4, click_count: 5, drag: true,
38
+ time: 6)
39
+ p2 = pointer(
40
+ id: 10, type: PEN, action: UP,
41
+ position: [20, 30], modifiers: 40, click_count: 50, drag: false,
42
+ time: 60)
43
+ e = event p1, p2
44
+
45
+ assert_equal [p1, p2], e.pointers.to_a
46
+ assert_equal 2, e.size
47
+ assert_equal false, e.empty?
48
+ assert_equal false, e.captured?
49
+
50
+ assert_equal 1, p1.id
51
+ assert_equal [:touch], p1.type
52
+ assert_equal :down, p1.action
53
+ assert_equal [2, 3], p1.position.to_a
54
+ assert_equal [2, 3], p1.pos .to_a
55
+ assert_equal 2, p1.x
56
+ assert_equal 3, p1.y
57
+ assert_equal 4, p1.modifiers
58
+ assert_equal 5, p1.click_count
59
+ assert_equal true, p1.drag?
60
+ assert_equal 6, p1.time
104
61
  end
105
62
 
106
- def test_xy()
107
- assert_equal 0, event(positions: [[0, 1], [2, 3]]).x
108
- assert_equal 1, event(positions: [[0, 1], [2, 3]]).y
63
+ def test_dup()
64
+ e1 = event pointer
65
+ e2 = e1.dup
66
+ e1.block
67
+ e3 = e1.dup
68
+ assert_equal true, e1.blocked?
69
+ assert_equal false, e2.blocked?
70
+ assert_equal true, e3.blocked?
109
71
  end
110
72
 
111
- def test_position()
112
- assert_equal [0, 1], event(positions: [[0, 1], [2, 3]]).position.to_a
73
+ def test_size()
74
+ assert_equal 1, event(pointer ).size
75
+ assert_equal 2, event(pointer, pointer).size
113
76
  end
114
77
 
115
- def test_positions()
116
- assert_equal [[0, 0]], event(positions: [0] ).positions.map(&:to_a)
117
- assert_equal [[0, 0], [1, 1]], event(positions: [0, 1]).positions.map(&:to_a)
118
-
119
- assert_equal [[0, 1]], event(positions: [[0, 1]] ).positions.map(&:to_a)
120
- assert_equal [[0, 1], [2, 3]], event(positions: [[0, 1], [2, 3]]).positions.map(&:to_a)
78
+ def test_empty?()
79
+ assert_equal false, event(pointer).empty?
121
80
  end
122
81
 
123
- def test_at()
124
- assert_equal [0, 1], event(positions: [[0, 1], [2, 3]])[0].to_a
125
- assert_equal [2, 3], event(positions: [[0, 1], [2, 3]])[1].to_a
126
- assert_raise(IndexError) {event(positions: [[0, 1], [2, 3]])[-1]}
127
- assert_raise(IndexError) {event(positions: [[0, 1], [2, 3]])[2]}
82
+ def test_get_at()
83
+ p1 = pointer position: 1
84
+ p2 = pointer position: 2
85
+ p3 = pointer position: 3
86
+ e = event p1, p2, p3
87
+
88
+ assert_equal p1, e[0]
89
+ assert_equal p3, e[2]
90
+ assert_nil e[3]
91
+ assert_equal p3, e[-1]
92
+ assert_equal p1, e[-3]
93
+ assert_nil e[-4]
128
94
  end
129
95
 
130
96
  end# TestPointerEvent
@@ -46,6 +46,13 @@ class TestSelector < Test::Unit::TestCase
46
46
  assert_equal [], s.tags.to_a
47
47
  end
48
48
 
49
+ def test_empty()
50
+ assert_equal true, sel .empty?
51
+ assert_equal false, sel(name: :A ).empty?
52
+ assert_equal false, sel( tag: :T).empty?
53
+ assert_equal false, sel(name: :A, tag: :T).empty?
54
+ end
55
+
49
56
  def test_contains()
50
57
  assert_not sel.contains(sel name: :A, tag: :T)
51
58
  assert sel(name: :A).contains(sel name: :A)
data/test/test_view.rb CHANGED
@@ -6,26 +6,30 @@ require_relative 'helper'
6
6
 
7
7
  class TestView < Test::Unit::TestCase
8
8
 
9
- def view(*args, &block)
10
- Reflex::View.new(*args, &block)
9
+ def view(*a, **k, &b)
10
+ Reflex::View.new(*a, **k, &b)
11
11
  end
12
12
 
13
- def style(*args, &block)
14
- Reflex::Style.new(*args, &block)
13
+ def window(*a, **k, &b)
14
+ Reflex::Window.new(*a, **k, &b)
15
15
  end
16
16
 
17
- def shape(*args, &block)
18
- Reflex::RectShape.new(*args, &block)
17
+ def style(*a, **k, &b)
18
+ Reflex::Style.new(*a, **k, &b)
19
19
  end
20
20
 
21
- def selector(*args, &block)
22
- Reflex::Selector.new(*args, &block)
21
+ def shape(*a, **k, &b)
22
+ Reflex::RectShape.new(*a, **k, &b)
23
23
  end
24
24
 
25
- def point(*args) Rays::Point.new(*args) end
26
- def bounds(*args) Rays::Bounds.new(*args) end
25
+ def selector(*a, **k, &b)
26
+ Reflex::Selector.new(*a, **k, &b)
27
+ end
28
+
29
+ def point(*a) Rays::Point.new(*a) end
30
+ def bounds(*a) Rays::Bounds.new(*a) end
27
31
 
28
- def test_hidden()
32
+ def test_show_hide_hidden()
29
33
  v = view
30
34
  assert_equal false, v.hidden?
31
35
  v.hide
@@ -44,6 +48,29 @@ class TestView < Test::Unit::TestCase
44
48
  assert_equal true, v.hidden?
45
49
  end
46
50
 
51
+ def test_coord_conversion()
52
+ w = window x: 100, y: 200
53
+ v1 = view x: 10, y: 20
54
+ v2 = view x: 1, y: 2
55
+
56
+ assert_raise(Rucy::NativeError) {v2.from_parent 0}
57
+ assert_raise(Rucy::NativeError) {v2. to_parent 0}
58
+ assert_raise(Rucy::NativeError) {v2.from_window 0}
59
+ assert_raise(Rucy::NativeError) {v2. to_window 0}
60
+ assert_raise(Rucy::NativeError) {v2.from_screen 0}
61
+ assert_raise(Rucy::NativeError) {v2. to_screen 0}
62
+
63
+ w .add v1
64
+ v1.add v2
65
+
66
+ assert_equal [4, 3], v2.from_parent(5) .to_a
67
+ assert_equal [6, 7], v2. to_parent(5) .to_a
68
+ assert_equal [39, 28], v2.from_window(50) .to_a
69
+ assert_equal [61, 72], v2. to_window(50) .to_a
70
+ assert_equal [389, 278], v2.from_screen(500).to_a
71
+ assert_equal [611, 722], v2. to_screen(500).to_a
72
+ end
73
+
47
74
  def test_add_child()
48
75
  assert_raise(ArgumentError) {view.add_child}
49
76
  assert_raise(TypeError) {view.add_child nil}
data/test/test_window.rb CHANGED
@@ -6,40 +6,41 @@ require_relative 'helper'
6
6
 
7
7
  class TestWindow < Test::Unit::TestCase
8
8
 
9
- def win(*args, &block)
10
- Reflex::Window.new(*args, &block)
9
+ def win(*a, **k, &b)
10
+ Reflex::Window.new(*a, **k, &b)
11
11
  end
12
12
 
13
- def point(*args) Reflex::Point.new(*args) end
14
- def bounds(*args) Reflex::Bounds.new(*args) end
13
+ def point(*a) Reflex::Point.new(*a) end
14
+ def bounds(*a) Reflex::Bounds.new(*a) end
15
15
 
16
- def test_root()
17
- w = win
18
- assert_not_nil w.root
19
- assert_nil w.root.parent
20
- assert_equal 'ROOT', w.root.name
21
- end
22
-
23
- def test_window()
16
+ def test_show_hide_hidden()
24
17
  w = win
25
- assert_equal w, w.root.window
26
- end
27
-
28
- def test_hidden()
29
- w = win
30
- assert_equal true, w.hidden
18
+ assert_equal true, w.hidden
31
19
  w.show
32
20
  assert_equal false, w.hidden
33
21
  w.hide
34
- assert_equal true, w.hidden
22
+ assert_equal true, w.hidden
35
23
  w.hide
36
- assert_equal true, w.hidden
24
+ assert_equal true, w.hidden
37
25
  w.show
38
- assert_equal true, w.hidden
26
+ assert_equal true, w.hidden
39
27
  w.show
40
28
  assert_equal false, w.hidden
41
29
  end
42
30
 
31
+ def test_coord_conversion()
32
+ w = win x: 100, y: 200
33
+ assert_equal [400, 300], w.from_screen(500).to_a
34
+ assert_equal [600, 700], w. to_screen(500).to_a
35
+ end
36
+
37
+ def test_title()
38
+ w = win
39
+ assert_equal '', w.title
40
+ w.title = 'A'
41
+ assert_equal 'A', w.title
42
+ end
43
+
43
44
  def test_frame()
44
45
  w = win
45
46
  b = w.frame.dup
@@ -85,11 +86,12 @@ class TestWindow < Test::Unit::TestCase
85
86
  assert_true w.resizable?
86
87
  end
87
88
 
88
- def test_title()
89
+ def test_root()
89
90
  w = win
90
- assert_equal '', w.title
91
- w.title = 'A'
92
- assert_equal 'A', w.title
91
+ assert_not_nil w.root
92
+ assert_nil w.root.parent
93
+ assert_equal 'ROOT', w.root.name
94
+ assert_equal w, w.root.window
93
95
  end
94
96
 
95
97
  end# TestWindow