glimr 0.1.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 (90) hide show
  1. data/lib/glimr.rb +2 -0
  2. data/lib/glimr/configurable.rb +37 -0
  3. data/lib/glimr/default_theme/button_bg.png +0 -0
  4. data/lib/glimr/default_theme/button_bg_down.png +0 -0
  5. data/lib/glimr/default_theme/button_cover.png +0 -0
  6. data/lib/glimr/default_theme/button_cover_down.png +0 -0
  7. data/lib/glimr/default_theme/button_focus.png +0 -0
  8. data/lib/glimr/default_theme/checkbox_bg.png +0 -0
  9. data/lib/glimr/default_theme/checkbox_checked_bg.png +0 -0
  10. data/lib/glimr/default_theme/font.ttf +0 -0
  11. data/lib/glimr/default_theme/hscroller_bg.png +0 -0
  12. data/lib/glimr/default_theme/radiobutton_bg.png +0 -0
  13. data/lib/glimr/default_theme/radiobutton_checked_bg.png +0 -0
  14. data/lib/glimr/default_theme/resizer_down.png +0 -0
  15. data/lib/glimr/default_theme/resizer_up.png +0 -0
  16. data/lib/glimr/default_theme/scroll_down_down.png +0 -0
  17. data/lib/glimr/default_theme/scroll_down_up.png +0 -0
  18. data/lib/glimr/default_theme/scroll_hknob_down.png +0 -0
  19. data/lib/glimr/default_theme/scroll_hknob_up.png +0 -0
  20. data/lib/glimr/default_theme/scroll_left_down.png +0 -0
  21. data/lib/glimr/default_theme/scroll_left_up.png +0 -0
  22. data/lib/glimr/default_theme/scroll_right_down.png +0 -0
  23. data/lib/glimr/default_theme/scroll_right_up.png +0 -0
  24. data/lib/glimr/default_theme/scroll_up_down.png +0 -0
  25. data/lib/glimr/default_theme/scroll_up_up.png +0 -0
  26. data/lib/glimr/default_theme/scroll_vknob_down.png +0 -0
  27. data/lib/glimr/default_theme/scroll_vknob_up.png +0 -0
  28. data/lib/glimr/default_theme/text_cursor.png +0 -0
  29. data/lib/glimr/default_theme/text_cursor_insert.png +0 -0
  30. data/lib/glimr/default_theme/text_input_bg.png +0 -0
  31. data/lib/glimr/default_theme/vscroller_bg.png +0 -0
  32. data/lib/glimr/event.rb +41 -0
  33. data/lib/glimr/eventlistener.rb +209 -0
  34. data/lib/glimr/layoutable.rb +520 -0
  35. data/lib/glimr/renderer.rb +2 -0
  36. data/lib/glimr/renderer/camera.rb +63 -0
  37. data/lib/glimr/renderer/geometry.rb +194 -0
  38. data/lib/glimr/renderer/glutwindow.rb +387 -0
  39. data/lib/glimr/renderer/light.rb +43 -0
  40. data/lib/glimr/renderer/material.rb +66 -0
  41. data/lib/glimr/renderer/model.rb +103 -0
  42. data/lib/glimr/renderer/orthoprojection.rb +21 -0
  43. data/lib/glimr/renderer/raw.rb +34 -0
  44. data/lib/glimr/renderer/sceneobject.rb +279 -0
  45. data/lib/glimr/renderer/shader.rb +14 -0
  46. data/lib/glimr/renderer/texture.rb +280 -0
  47. data/lib/glimr/renderer/transform.rb +322 -0
  48. data/lib/glimr/renderer/viewport.rb +349 -0
  49. data/lib/glimr/renderer_core.rb +10 -0
  50. data/lib/glimr/util.rb +247 -0
  51. data/lib/glimr/widget.rb +87 -0
  52. data/lib/glimr/widgets.rb +37 -0
  53. data/lib/glimr/widgets/button.rb +277 -0
  54. data/lib/glimr/widgets/checkbox.rb +82 -0
  55. data/lib/glimr/widgets/container.rb +84 -0
  56. data/lib/glimr/widgets/image.rb +82 -0
  57. data/lib/glimr/widgets/label.rb +91 -0
  58. data/lib/glimr/widgets/layout.rb +227 -0
  59. data/lib/glimr/widgets/list.rb +28 -0
  60. data/lib/glimr/widgets/radiogroup.rb +118 -0
  61. data/lib/glimr/widgets/resizer.rb +31 -0
  62. data/lib/glimr/widgets/scrollable_container.rb +67 -0
  63. data/lib/glimr/widgets/scrollbar.rb +496 -0
  64. data/lib/glimr/widgets/stretchable_image.rb +135 -0
  65. data/lib/glimr/widgets/text_editor.rb +349 -0
  66. data/tests/assets/datatowers_crop.jpg +0 -0
  67. data/tests/assets/download_progress_meter.png +0 -0
  68. data/tests/assets/metalwing2.png +0 -0
  69. data/tests/assets/redhairgreeneyes3.jpg +0 -0
  70. data/tests/demo_apps/spinning_ruby.rb +37 -0
  71. data/tests/integration_tests/run_all.rb +8 -0
  72. data/tests/integration_tests/test_button.rb +22 -0
  73. data/tests/integration_tests/test_checkbox.rb +21 -0
  74. data/tests/integration_tests/test_container.rb +22 -0
  75. data/tests/integration_tests/test_label.rb +12 -0
  76. data/tests/integration_tests/test_layout.rb +43 -0
  77. data/tests/integration_tests/test_radiogroup.rb +16 -0
  78. data/tests/integration_tests/test_renderer.rb +44 -0
  79. data/tests/integration_tests/test_renderer2.rb +36 -0
  80. data/tests/integration_tests/test_scrollable_container.rb +34 -0
  81. data/tests/integration_tests/test_scrollbar.rb +20 -0
  82. data/tests/integration_tests/test_stretchable_image.rb +34 -0
  83. data/tests/integration_tests/test_text_input.rb +20 -0
  84. data/tests/integration_tests/test_zsort.rb +18 -0
  85. data/tests/unit_tests/test_button.rb +93 -0
  86. data/tests/unit_tests/test_checkbox.rb +35 -0
  87. data/tests/unit_tests/test_label.rb +36 -0
  88. data/tests/unit_tests/test_layout.rb +229 -0
  89. data/tests/unit_tests/test_widget.rb +3 -0
  90. metadata +139 -0
@@ -0,0 +1,35 @@
1
+ require 'glimr'
2
+ require 'test/unit'
3
+
4
+ class TestCheckbox < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @c = GlimR::Checkbox.new(:label => "Checkbox")
8
+ end
9
+
10
+ def test_label
11
+ assert_equal "Checkbox", @c.label
12
+ @c.label = "Foo"
13
+ assert_equal "Foo", @c.label
14
+ @c.label = "Bar"
15
+ assert_equal "Bar", @c.label
16
+ end
17
+
18
+ def test_change
19
+ state = @c.state
20
+ changed = false
21
+ assert_equal false, state
22
+ assert_equal false, changed
23
+ @c.on_change{|o,e|
24
+ changed = true
25
+ }
26
+ assert_equal false, @c.state
27
+ assert_equal false, changed
28
+ @c.multicast_event(GlimR::Event.new(:activate))
29
+ assert_equal true, @c.state
30
+ assert_equal true, changed
31
+ end
32
+
33
+
34
+ end
35
+
@@ -0,0 +1,36 @@
1
+ require 'glimr'
2
+ require 'test/unit'
3
+
4
+
5
+ class TestLabel < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @l = GlimR::Label.new(:text => "My Label")
9
+ end
10
+
11
+ def test_changing_label
12
+ assert_equal "My Label", @l.text
13
+ @l.text = "Your Label"
14
+ assert_equal "Your Label", @l.text
15
+ end
16
+
17
+ def test_dimensions_change
18
+ w,h = @l.width, @l.height
19
+
20
+ @l.text = "This is a really really long label"
21
+ w2,h2 = @l.width, @l.height
22
+ assert_equal h, h2
23
+ assert w2 > w
24
+
25
+ @l.text = "Short"
26
+ w2,h2 = @l.width, @l.height
27
+ assert_equal h, h2
28
+ assert w2 < w
29
+
30
+ @l.text = "My Label\nHas\nMany\nLines"
31
+ w3,h3 = @l.width, @l.height
32
+ assert_equal w, w3
33
+ assert h3 > h
34
+ end
35
+
36
+ end
@@ -0,0 +1,229 @@
1
+ require 'glimr'
2
+ require 'test/unit'
3
+
4
+ class LayoutTest < Test::Unit::TestCase
5
+ include GlimR
6
+
7
+ def test_create_layoutable
8
+ l = Widget.new(:width => 40, :height => 30)
9
+ assert_equal 40, l.width
10
+ assert_equal 30, l.height
11
+ assert_equal 0, l.margin.left
12
+ assert_equal 0, l.margin.top
13
+ assert_equal 0, l.margin.bottom
14
+ assert_equal 0, l.margin.right
15
+ assert_equal 0, l.padding.left
16
+ assert_equal 0, l.padding.top
17
+ assert_equal 0, l.padding.bottom
18
+ assert_equal 0, l.padding.right
19
+ l
20
+ end
21
+
22
+ def test_set_margin
23
+ l = test_create_layoutable
24
+ l.margin = {:left => 30, :top => 20}
25
+ assert_equal 30, l.margin.left
26
+ assert_equal 20, l.margin.top
27
+ assert_equal 0, l.margin.bottom
28
+ assert_equal 0, l.margin.right
29
+ l.margin = 10
30
+ assert_equal 10, l.margin.left
31
+ assert_equal 10, l.margin.right
32
+ assert_equal 10, l.margin.top
33
+ assert_equal 10, l.margin.bottom
34
+ m = l.margin
35
+ m.left = 20
36
+ l.margin = m
37
+ assert_equal 20, l.margin.left
38
+ assert_equal 10, l.margin.right
39
+ assert_equal 10, l.margin.top
40
+ assert_equal 10, l.margin.bottom
41
+ l.margin = {:left => 20, :right => 20}
42
+ assert_equal 20, l.margin.left
43
+ assert_equal 20, l.margin.right
44
+ assert_equal 10, l.margin.top
45
+ assert_equal 10, l.margin.bottom
46
+ l.margin = 0
47
+ assert_equal 0, l.margin.left
48
+ assert_equal 0, l.margin.right
49
+ assert_equal 0, l.margin.top
50
+ assert_equal 0, l.margin.bottom
51
+ end
52
+
53
+ def test_create_hlayout
54
+ lo = HLayout.new
55
+ assert_equal 0, lo.width
56
+ assert_equal 0, lo.height
57
+ l = test_create_layoutable
58
+ l2 = test_create_layoutable
59
+ lo.attach l
60
+ assert_equal l.width, lo.width
61
+ assert_equal l.height, lo.height
62
+ lo.padding = 2
63
+ assert_equal l.width + 4, lo.width
64
+ assert_equal l.height + 4, lo.height
65
+ lo.attach l2
66
+ assert_equal l.full_width * 2 + lo.item_spacing, lo.inner_width
67
+ assert_equal l.full_height, lo.inner_height
68
+ lo.item_spacing = 0
69
+ assert_equal l.full_width * 2 + lo.item_spacing, lo.inner_width
70
+ assert_equal l.full_height + 4, lo.height
71
+ l.margin = 10
72
+ assert_equal l.width * 2 + 24, lo.width
73
+ assert_equal l.height + 24, lo.height
74
+ end
75
+
76
+ def test_create_vlayout
77
+ lo = VLayout.new
78
+ assert_equal 0, lo.width
79
+ assert_equal 0, lo.height
80
+ l = test_create_layoutable
81
+ l2 = test_create_layoutable
82
+ lo.attach l
83
+ assert_equal l.width, lo.width
84
+ assert_equal l.height, lo.height
85
+ lo.padding = 2
86
+ assert_equal l.width + 4, lo.width
87
+ assert_equal l.height + 4, lo.height
88
+ lo << l2
89
+ assert_equal l.width + 4, lo.width
90
+ assert_equal l.height * 2 + 4 + lo.item_spacing, lo.height
91
+ lo.item_spacing = 0
92
+ assert_equal l.width + 4, lo.width
93
+ assert_equal l.height * 2 + 4 + lo.item_spacing, lo.height
94
+ l.margin = 10
95
+ assert_equal l.height * 2 + 24, lo.height
96
+ assert_equal l.width + 24, lo.width
97
+ end
98
+
99
+ def test_expand_layout
100
+ vl = VLayout.new(:item_spacing => 0)
101
+ hl = HLayout.new
102
+ hl.width = 100
103
+ hl.height = 100
104
+ #~ p 'vl << hl'
105
+ vl << hl
106
+ assert_equal 100, vl.width
107
+ assert_equal 100, vl.height
108
+ assert_equal 100, hl.width
109
+ assert_equal 100, hl.height
110
+ #~ p 'vl.min_width = 200'
111
+ vl.min_width = 200
112
+ assert_equal 200, vl.width
113
+ assert_equal 100, vl.height
114
+ #~ p 'vl.min_width = 100'
115
+ vl.min_width = 100
116
+ #~ p 'vl.min_height = 200'
117
+ vl.min_height = 200
118
+ assert_equal 100, vl.width
119
+ assert_equal 200, vl.height
120
+ #~ p 'vl.min_width = 200'
121
+ vl.min_width = 200
122
+ assert_equal 100, hl.width
123
+ assert_equal 100, hl.height
124
+ #~ p 'hl.expand_width = true'
125
+ hl.expand_width = true
126
+ assert_equal 200, vl.width
127
+ assert_equal 200, vl.height
128
+ assert_equal 200, hl.width
129
+ assert_equal 100, hl.height
130
+ #~ p 'hl.expand_height = true'
131
+ hl.expand_height = true
132
+ assert_equal 200, vl.width
133
+ assert_equal 200, vl.height
134
+ assert_equal 200, hl.width
135
+ assert_equal 200, hl.height
136
+ hl2 = HLayout.new(:width => 50, :height => 50, :fit_children => false)
137
+ #~ p 'vl << hl2'
138
+ vl << hl2
139
+ assert_equal 50, hl2.width
140
+ assert_equal 50, hl2.height
141
+ assert_equal 200, vl.width
142
+ assert_equal 200, vl.height
143
+ assert_equal 200, hl.width
144
+ assert_equal 150, hl.height
145
+ hl2.expand_width = true
146
+ assert_equal 200, hl2.width
147
+ assert_equal 50, hl2.height
148
+ assert_equal 200, vl.width
149
+ assert_equal 200, vl.height
150
+ assert_equal 200, hl.width
151
+ assert_equal 150, hl.height
152
+ vl.item_spacing = 2
153
+ assert_equal 200, hl2.width
154
+ assert_equal 50, hl2.height
155
+ assert_equal 200, vl.width
156
+ assert_equal 200, vl.height
157
+ assert_equal 200, hl.width
158
+ assert_equal 148, hl.height
159
+ hl3 = HLayout.new(:width => 250, :height => 50, :fit_children => false)
160
+ #~ p 'vl << hl3'
161
+ vl << hl3
162
+ assert_equal 250, hl3.width
163
+ assert_equal 50, hl3.height
164
+ assert_equal 250, vl.width
165
+ assert_equal 200, vl.height
166
+ assert_equal 250, hl2.width
167
+ assert_equal 50, hl2.height
168
+ assert_equal 250, hl.width
169
+ assert_equal 96, hl.height
170
+ hl4 = HLayout.new(:expand_height => true, :width => 20, :fit_children => false)
171
+ vl << hl4
172
+ assert_equal 250, hl3.width
173
+ assert_equal 50, hl3.height
174
+ assert_equal 250, hl2.width
175
+ assert_equal 50, hl2.height
176
+ assert_equal 250, vl.width
177
+ assert_equal 200, vl.height
178
+ assert_equal 250, hl.width
179
+ assert_equal 47, hl.height
180
+ assert_equal 20, hl4.width
181
+ assert_equal 47, hl4.height
182
+ end
183
+
184
+ def test_nested_expand
185
+ root = GlimR::HLayout.new(
186
+ :fit_children => false,
187
+ :width => 640, :height => 480)
188
+ vl = GlimR::VLayout.new(:expand_width => true, :expand_height => true)
189
+ hl = GlimR::HLayout.new(:expand_width => true, :expand_height => true)
190
+ exp_h = GlimR::Widget.new(:expand_width => true)
191
+ exp_v = GlimR::Widget.new(:expand_height => true)
192
+ hl << exp_h
193
+ vl << exp_v << hl
194
+ root << vl
195
+ assert_equal(640, root.width)
196
+ assert_equal(480, root.height)
197
+ assert_equal(640, vl.width)
198
+ assert_equal(480, vl.height)
199
+ assert_equal(640, hl.width)
200
+ assert_equal(239, hl.height)
201
+ assert_equal(640, exp_h.width)
202
+ assert_equal(239, exp_v.height)
203
+ end
204
+
205
+ def test_nested_constant_root
206
+ root = GlimR::Widget.new(
207
+ :fit_children => false,
208
+ :width => 640, :height => 480)
209
+ vl = GlimR::VLayout.new(:item_spacing => 0)
210
+ hl = GlimR::HLayout.new(:item_spacing => 0)
211
+ exp_h = GlimR::Widget.new(:expand_width => true)
212
+ exp_v = GlimR::Widget.new(:expand_height => true)
213
+ hl << exp_h
214
+ vl << exp_v << hl
215
+ root << vl
216
+ assert_equal(640, root.width)
217
+ assert_equal(480, root.height)
218
+ assert_equal(640, vl.width)
219
+ assert_equal(480, vl.height)
220
+ assert_equal(640, hl.width)
221
+ assert_equal(0, hl.height)
222
+ assert_equal(640, exp_h.width)
223
+ assert_equal(0, exp_h.height)
224
+ assert_equal(480, exp_v.height)
225
+ assert_equal(0, exp_v.width)
226
+ end
227
+
228
+ end
229
+
@@ -0,0 +1,3 @@
1
+ require 'glimr'
2
+ require 'test/unit'
3
+
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.0
3
+ specification_version: 1
4
+ name: glimr
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.0
7
+ date: 2006-07-15 00:00:00 +03:00
8
+ summary: Ruby OpenGL GUI Widget Kit
9
+ require_paths:
10
+ - lib
11
+ email: ilmari.heikkinen@gmail.com
12
+ homepage: glimr.rubyforge.org
13
+ rubyforge_project: glimr
14
+ description:
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.8.1
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Ilmari Heikkinen
31
+ files:
32
+ - lib/glimr.rb
33
+ - lib/glimr/eventlistener.rb
34
+ - lib/glimr/widgets.rb
35
+ - lib/glimr/renderer.rb
36
+ - lib/glimr/renderer_core.rb
37
+ - lib/glimr/event.rb
38
+ - lib/glimr/widget.rb
39
+ - lib/glimr/configurable.rb
40
+ - lib/glimr/util.rb
41
+ - lib/glimr/layoutable.rb
42
+ - lib/glimr/renderer/viewport.rb
43
+ - lib/glimr/renderer/shader.rb
44
+ - lib/glimr/renderer/model.rb
45
+ - lib/glimr/renderer/texture.rb
46
+ - lib/glimr/renderer/geometry.rb
47
+ - lib/glimr/renderer/sceneobject.rb
48
+ - lib/glimr/renderer/raw.rb
49
+ - lib/glimr/renderer/camera.rb
50
+ - lib/glimr/renderer/glutwindow.rb
51
+ - lib/glimr/renderer/material.rb
52
+ - lib/glimr/renderer/orthoprojection.rb
53
+ - lib/glimr/renderer/light.rb
54
+ - lib/glimr/renderer/transform.rb
55
+ - lib/glimr/widgets/scrollable_container.rb
56
+ - lib/glimr/widgets/scrollbar.rb
57
+ - lib/glimr/widgets/checkbox.rb
58
+ - lib/glimr/widgets/list.rb
59
+ - lib/glimr/widgets/resizer.rb
60
+ - lib/glimr/widgets/stretchable_image.rb
61
+ - lib/glimr/widgets/button.rb
62
+ - lib/glimr/widgets/image.rb
63
+ - lib/glimr/widgets/label.rb
64
+ - lib/glimr/widgets/layout.rb
65
+ - lib/glimr/widgets/text_editor.rb
66
+ - lib/glimr/widgets/container.rb
67
+ - lib/glimr/widgets/radiogroup.rb
68
+ - lib/glimr/default_theme/scroll_hknob_up.png
69
+ - lib/glimr/default_theme/button_cover_down.png
70
+ - lib/glimr/default_theme/scroll_vknob_up.png
71
+ - lib/glimr/default_theme/button_focus.png
72
+ - lib/glimr/default_theme/radiobutton_checked_bg.png
73
+ - lib/glimr/default_theme/checkbox_checked_bg.png
74
+ - lib/glimr/default_theme/radiobutton_bg.png
75
+ - lib/glimr/default_theme/scroll_up_down.png
76
+ - lib/glimr/default_theme/scroll_right_up.png
77
+ - lib/glimr/default_theme/text_cursor_insert.png
78
+ - lib/glimr/default_theme/scroll_left_up.png
79
+ - lib/glimr/default_theme/scroll_down_down.png
80
+ - lib/glimr/default_theme/button_bg.png
81
+ - lib/glimr/default_theme/scroll_hknob_down.png
82
+ - lib/glimr/default_theme/scroll_left_down.png
83
+ - lib/glimr/default_theme/scroll_vknob_down.png
84
+ - lib/glimr/default_theme/resizer_up.png
85
+ - lib/glimr/default_theme/vscroller_bg.png
86
+ - lib/glimr/default_theme/scroll_right_down.png
87
+ - lib/glimr/default_theme/hscroller_bg.png
88
+ - lib/glimr/default_theme/text_cursor.png
89
+ - lib/glimr/default_theme/resizer_down.png
90
+ - lib/glimr/default_theme/checkbox_bg.png
91
+ - lib/glimr/default_theme/button_cover.png
92
+ - lib/glimr/default_theme/scroll_up_up.png
93
+ - lib/glimr/default_theme/button_bg_down.png
94
+ - lib/glimr/default_theme/scroll_down_up.png
95
+ - lib/glimr/default_theme/text_input_bg.png
96
+ - lib/glimr/default_theme/font.ttf
97
+ - tests/unit_tests
98
+ - tests/assets
99
+ - tests/integration_tests
100
+ - tests/demo_apps
101
+ - tests/unit_tests/test_checkbox.rb
102
+ - tests/unit_tests/test_button.rb
103
+ - tests/unit_tests/test_widget.rb
104
+ - tests/unit_tests/test_layout.rb
105
+ - tests/unit_tests/test_label.rb
106
+ - tests/assets/download_progress_meter.png
107
+ - tests/assets/metalwing2.png
108
+ - tests/assets/datatowers_crop.jpg
109
+ - tests/assets/redhairgreeneyes3.jpg
110
+ - tests/integration_tests/test_stretchable_image.rb
111
+ - tests/integration_tests/test_checkbox.rb
112
+ - tests/integration_tests/test_text_input.rb
113
+ - tests/integration_tests/test_container.rb
114
+ - tests/integration_tests/test_radiogroup.rb
115
+ - tests/integration_tests/test_renderer.rb
116
+ - tests/integration_tests/test_button.rb
117
+ - tests/integration_tests/test_scrollable_container.rb
118
+ - tests/integration_tests/test_renderer2.rb
119
+ - tests/integration_tests/run_all.rb
120
+ - tests/integration_tests/test_layout.rb
121
+ - tests/integration_tests/test_label.rb
122
+ - tests/integration_tests/test_scrollbar.rb
123
+ - tests/integration_tests/test_zsort.rb
124
+ - tests/demo_apps/spinning_ruby.rb
125
+ test_files: []
126
+
127
+ rdoc_options: []
128
+
129
+ extra_rdoc_files: []
130
+
131
+ executables: []
132
+
133
+ extensions: []
134
+
135
+ requirements:
136
+ - Ruby-OpenGL >= 0.32g
137
+ - Ruby/SDL >= 1.0.0
138
+ dependencies: []
139
+