sdl2_ffi 0.0.6 → 0.0.7

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 (204) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +0 -6
  4. data/Guardfile +0 -45
  5. data/README.md +11 -21
  6. data/lib/bad_sdl.rb +4 -0
  7. data/lib/{sdl2 → bad_sdl}/application.rb +47 -35
  8. data/lib/{sdl2 → bad_sdl}/engine.rb +20 -3
  9. data/lib/{sdl2 → bad_sdl}/engine/block_engine.rb +2 -2
  10. data/lib/bad_sdl/engine/engines.rb +51 -0
  11. data/lib/enumerable_constants.rb +4 -2
  12. data/lib/sdl2.rb +26 -247
  13. data/lib/sdl2/blendmode.rb +18 -0
  14. data/lib/sdl2/color.rb +1 -3
  15. data/lib/sdl2/debug.rb +58 -0
  16. data/lib/sdl2/display.rb +30 -23
  17. data/lib/sdl2/error.rb +6 -4
  18. data/lib/sdl2/event.rb +229 -0
  19. data/lib/sdl2/event/abstract.rb +11 -0
  20. data/lib/sdl2/event/action.rb +19 -0
  21. data/lib/sdl2/event/common.rb +10 -0
  22. data/lib/sdl2/event/controller_axis.rb +20 -0
  23. data/lib/sdl2/event/controller_button.rb +17 -0
  24. data/lib/sdl2/event/controller_device.rb +14 -0
  25. data/lib/sdl2/event/dollar_gesture.rb +19 -0
  26. data/lib/sdl2/event/drop.rb +18 -0
  27. data/lib/sdl2/event/joy_axis.rb +20 -0
  28. data/lib/sdl2/event/joy_ball.rb +20 -0
  29. data/lib/sdl2/event/joy_button.rb +18 -0
  30. data/lib/sdl2/event/joy_device.rb +14 -0
  31. data/lib/sdl2/event/joy_hat.rb +18 -0
  32. data/lib/sdl2/event/keyboard.rb +18 -0
  33. data/lib/sdl2/event/mouse_button.rb +21 -0
  34. data/lib/sdl2/event/mouse_motion.rb +19 -0
  35. data/lib/sdl2/event/mouse_wheel.rb +17 -0
  36. data/lib/sdl2/event/multi_gesture.rb +20 -0
  37. data/lib/sdl2/event/os.rb +12 -0
  38. data/lib/sdl2/event/quit.rb +12 -0
  39. data/lib/sdl2/event/state.rb +13 -0
  40. data/lib/sdl2/event/sys_wm.rb +15 -0
  41. data/lib/sdl2/event/text_editing.rb +17 -0
  42. data/lib/sdl2/event/text_input.rb +15 -0
  43. data/lib/sdl2/event/touch_finger.rb +20 -0
  44. data/lib/sdl2/event/type.rb +62 -0
  45. data/lib/sdl2/event/user.rb +15 -0
  46. data/lib/sdl2/event/window.rb +19 -0
  47. data/lib/sdl2/events.rb +23 -538
  48. data/lib/sdl2/gem_version.rb +1 -1
  49. data/lib/sdl2/haptic.rb +3 -3
  50. data/lib/sdl2/hints.rb +3 -1
  51. data/lib/sdl2/image.rb +20 -20
  52. data/lib/sdl2/init.rb +5 -8
  53. data/lib/sdl2/joystick.rb +104 -78
  54. data/lib/sdl2/joystick/axes.rb +22 -0
  55. data/lib/sdl2/joystick/balls.rb +24 -0
  56. data/lib/sdl2/joystick/buttons.rb +22 -0
  57. data/lib/sdl2/joystick/components.rb +23 -0
  58. data/lib/sdl2/joystick/hats.rb +22 -0
  59. data/lib/sdl2/keyboard.rb +11 -10
  60. data/lib/sdl2/keycode.rb +70 -70
  61. data/lib/sdl2/library.rb +8 -7
  62. data/lib/sdl2/log.rb +6 -0
  63. data/lib/sdl2/managed_struct.rb +17 -0
  64. data/lib/sdl2/mixer.rb +16 -12
  65. data/lib/sdl2/mixer/chunk.rb +14 -3
  66. data/lib/sdl2/mouse.rb +21 -41
  67. data/lib/sdl2/pixel_format.rb +4 -4
  68. data/lib/sdl2/pixels.rb +59 -47
  69. data/lib/sdl2/power.rb +1 -1
  70. data/lib/sdl2/rect.rb +4 -5
  71. data/lib/sdl2/render.rb +85 -170
  72. data/lib/sdl2/renderer.rb +337 -20
  73. data/lib/sdl2/rwops.rb +89 -30
  74. data/lib/sdl2/stdinc.rb +18 -21
  75. data/lib/sdl2/struct.rb +184 -0
  76. data/lib/sdl2/struct_helper.rb +32 -0
  77. data/lib/sdl2/surface.rb +15 -14
  78. data/lib/sdl2/syswm.rb +26 -10
  79. data/lib/sdl2/syswm/msg.rb +22 -4
  80. data/lib/sdl2/texture.rb +106 -0
  81. data/lib/sdl2/touch.rb +16 -20
  82. data/lib/sdl2/ttf.rb +29 -29
  83. data/lib/sdl2/ttf/sdl_ttf_module.rb +1 -1
  84. data/lib/sdl2/typed_pointer.rb +45 -0
  85. data/lib/sdl2/union.rb +7 -0
  86. data/lib/sdl2/video.rb +97 -183
  87. data/lib/sdl2/window.rb +140 -90
  88. data/lib/struct_array.rb +42 -0
  89. data/sdl2_ffi.gemspec +3 -3
  90. data/spec/fixtures/approvals/lazyfoonet_lesson_03_advanced_timers/has_a_message.approved.png +0 -0
  91. data/spec/fixtures/approvals/lazyfoonet_lesson_07_true_type_fonts/draws_the_message_to_the_screen.approved.png +0 -0
  92. data/spec/fixtures/approvals/lazyfoonet_lesson_14_advanced_timers/has_a_message.approved.png +0 -0
  93. data/spec/fixtures/approvals/lazyfoonet_lesson_14_advanced_timers/has_drawn_something.approved.png +0 -0
  94. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_clear.approved.png +0 -0
  95. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_line_connecting_many_points.approved.png +0 -0
  96. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_point.approved.png +0 -0
  97. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_single_filled_rectangle.approved.png +0 -0
  98. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_single_pixel_line.approved.png +0 -0
  99. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_a_single_rectangle.approved.png +0 -0
  100. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_many_filled_rectangles.approved.png +0 -0
  101. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_many_rectangles_at_once.approved.png +0 -0
  102. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_draw_points.approved.png +0 -0
  103. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_render_textures.approved.png +0 -0
  104. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_be_able_to_rotate_and_flip_while_rendering_textures.approved.png +0 -0
  105. data/spec/fixtures/approvals/sdl2/sdl2_renderer/should_have_a_clip_rect.approved.png +0 -0
  106. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_clear.approved.png +0 -0
  107. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_line_connecting_many_points.approved.png +0 -0
  108. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_point.approved.png +0 -0
  109. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_single_filled_rectangle.approved.png +0 -0
  110. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_single_pixel_line.approved.png +0 -0
  111. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_a_single_rectangle.approved.png +0 -0
  112. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_many_filled_rectangles.approved.png +0 -0
  113. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_many_rectangles_at_once.approved.png +0 -0
  114. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_draw_points.approved.png +0 -0
  115. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_render_textures.approved.png +0 -0
  116. data/spec/fixtures/approvals/sdl2_renderer/should_be_able_to_rotate_and_flip_while_rendering_textures.approved.png +0 -0
  117. data/spec/fixtures/approvals/sdl2_renderer/should_have_a_clip_rect.approved.png +0 -0
  118. data/spec/fixtures/images/finger.png +0 -0
  119. data/spec/fixtures/music/beat.wav +0 -0
  120. data/spec/fixtures/sounds/high.wav +0 -0
  121. data/spec/fixtures/sounds/low.wav +0 -0
  122. data/spec/fixtures/sounds/medium.wav +0 -0
  123. data/spec/fixtures/sounds/scratch.wav +0 -0
  124. data/spec/functional/lazy_foo_tutorial/lazy_foo_01_hello_world_spec.rb +4 -6
  125. data/spec/functional/lazy_foo_tutorial/lazy_foo_02_optimized_images_spec.rb +3 -4
  126. data/spec/functional/lazy_foo_tutorial/lazy_foo_03_extension_libraries_spec.rb +2 -2
  127. data/spec/functional/lazy_foo_tutorial/lazy_foo_04_event_driven_programming_spec.rb +3 -3
  128. data/spec/functional/lazy_foo_tutorial/lazy_foo_05_color_keying_spec.rb +1 -1
  129. data/spec/functional/lazy_foo_tutorial/lazy_foo_06_clip_blitting_and_sprite_sheets_spec.rb +1 -1
  130. data/spec/functional/lazy_foo_tutorial/lazy_foo_07_true_type_fonts_spec.rb +3 -2
  131. data/spec/functional/lazy_foo_tutorial/lazy_foo_08_key_presses_spec.rb +9 -7
  132. data/spec/functional/lazy_foo_tutorial/lazy_foo_09_mouse_events_spec.rb +11 -8
  133. data/spec/functional/lazy_foo_tutorial/lazy_foo_10_key_states_spec.rb +5 -4
  134. data/spec/functional/lazy_foo_tutorial/lazy_foo_11_playing_sounds_spec.rb +17 -9
  135. data/spec/functional/lazy_foo_tutorial/lazy_foo_12_timing_spec.rb +8 -7
  136. data/spec/functional/lazy_foo_tutorial/lazy_foo_13_advanced_timers_spec.rb +85 -0
  137. data/spec/functional/lazy_foo_tutorial/lazy_foo_14_regulating_frame_rate_spec.rb +67 -0
  138. data/spec/functional/lazy_foo_tutorial/lazy_foo_15_calculating_frame_rate_spec.rb +48 -0
  139. data/spec/functional/lazy_foo_tutorial/lazy_foo_16_motion_spec.rb +95 -0
  140. data/spec/functional/lazy_foo_tutorial/lazy_foo_helper.rb +3 -1
  141. data/spec/functional/lazy_foo_tutorial/timer.rb +55 -0
  142. data/spec/lib/bad_sdl/application_spec.rb +22 -0
  143. data/spec/{unit → lib}/sdl2/color_spec.rb +5 -1
  144. data/spec/lib/sdl2/display_spec.rb +6 -0
  145. data/spec/lib/sdl2/event_spec.rb +102 -0
  146. data/spec/lib/sdl2/events_spec.rb +12 -0
  147. data/spec/lib/sdl2/joystick_spec.rb +130 -0
  148. data/spec/lib/sdl2/keyboard_spec.rb +22 -0
  149. data/spec/lib/sdl2/mouse_spec.rb +21 -0
  150. data/spec/lib/sdl2/render_spec.rb +62 -0
  151. data/spec/lib/sdl2/renderer_spec.rb +224 -0
  152. data/spec/lib/sdl2/sdl2_helper.rb +5 -0
  153. data/spec/lib/sdl2/texture_spec.rb +65 -0
  154. data/{test/unit/sdl2/test_video.rb → spec/lib/sdl2/video_spec.rb} +82 -57
  155. data/spec/lib/sdl2/window_spec.rb +42 -0
  156. data/spec/{unit → lib}/unit_helper.rb +0 -0
  157. data/spec/png_writer.rb +9 -1
  158. data/spec/spec_helper.rb +5 -3
  159. metadata +201 -132
  160. data/lib/sdl2/engine/engines.rb +0 -46
  161. data/test/approvals/clip_blitting_and_sprite_sheets.received.bmp +0 -0
  162. data/test/approvals/color_keying_example.approved.png +0 -0
  163. data/test/approvals/hello_world_example_hello.approved.png +0 -0
  164. data/test/approvals/hello_world_example_screen.approved.png +0 -0
  165. data/test/approvals/optimized_surface_loading.approved.png +0 -0
  166. data/test/fixtures/an_example.png +0 -0
  167. data/test/fixtures/background.bmp +0 -0
  168. data/test/fixtures/background.jpg +0 -0
  169. data/test/fixtures/color_bars.jpg +0 -0
  170. data/test/fixtures/foo.jpg +0 -0
  171. data/test/fixtures/hello.bmp +0 -0
  172. data/test/fixtures/sprites.jpg +0 -0
  173. data/test/fixtures/x.png +0 -0
  174. data/test/functional/examples/lazyfoo.net_s/test_clip_blitting_and_sprite_sheets.rb +0 -50
  175. data/test/functional/examples/lazyfoo.net_s/test_color_keying.rb +0 -42
  176. data/test/functional/examples/test_lazy_foo_examples.rb +0 -195
  177. data/test/functional/examples/test_readme_examples.rb +0 -15
  178. data/test/test_helper.rb +0 -13
  179. data/test/unit/sdl2/test_assert.rb +0 -10
  180. data/test/unit/sdl2/test_audio.rb +0 -9
  181. data/test/unit/sdl2/test_clipboard.rb +0 -13
  182. data/test/unit/sdl2/test_cpuinfo.rb +0 -11
  183. data/test/unit/sdl2/test_error.rb +0 -20
  184. data/test/unit/sdl2/test_events.rb +0 -31
  185. data/test/unit/sdl2/test_haptic.rb +0 -27
  186. data/test/unit/sdl2/test_hints.rb +0 -50
  187. data/test/unit/sdl2/test_image.rb +0 -9
  188. data/test/unit/sdl2/test_init.rb +0 -29
  189. data/test/unit/sdl2/test_keyboard.rb +0 -9
  190. data/test/unit/sdl2/test_log.rb +0 -80
  191. data/test/unit/sdl2/test_palette.rb +0 -26
  192. data/test/unit/sdl2/test_pixel_format.rb +0 -38
  193. data/test/unit/sdl2/test_pixels.rb +0 -24
  194. data/test/unit/sdl2/test_power.rb +0 -11
  195. data/test/unit/sdl2/test_rect.rb +0 -19
  196. data/test/unit/sdl2/test_render.rb +0 -58
  197. data/test/unit/sdl2/test_surface.rb +0 -88
  198. data/test/unit/sdl2/test_syswm.rb +0 -11
  199. data/test/unit/sdl2/test_timer.rb +0 -9
  200. data/test/unit/sdl2/test_ttf.rb +0 -11
  201. data/test/unit/sdl2/test_version.rb +0 -16
  202. data/test/unit/sdl2/test_window.rb +0 -155
  203. data/test/unit/test_scratch.rb +0 -19
  204. data/test/unit/test_sdl2.rb +0 -16
@@ -0,0 +1,22 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe SDL2::Keyboard do
4
+ before :each do
5
+ SDL2.init(:VIDEO)
6
+ @window = SDL2::Window.create()
7
+ SDL2.pump_events
8
+ end
9
+
10
+ it 'should return a focused window' do
11
+ SDL2::Keyboard.get_focus.should be_a(SDL2::Window)
12
+ end
13
+
14
+ it 'should return an array of integers' do
15
+ skip 'TODO: Keyboard#get_state'
16
+ #binding.pry
17
+ end
18
+
19
+ after :each do
20
+ SDL2.quit
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe SDL2 do
4
+ it 'should have the SDL_mouse.h API' do
5
+ [
6
+ :create_color_cursor!,
7
+ ].each do |function|
8
+ SDL2.should respond_to(function)
9
+ end
10
+ end
11
+ end
12
+
13
+ describe SDL2::Cursor do
14
+ it 'can create color cursors' do
15
+ skip 'supported yet?' do
16
+ SDL2::Cursor.should respond_to(:create_color_cursor)
17
+ finger = SDL2::Image.load(img_path('finger.png'))
18
+ @cursor = SDL2::Cursor.create_color_cursor(finger,finger.w/2,finger.h/2)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,62 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe SDL2 do
4
+ it 'should have the renderer api' do
5
+ [
6
+ :create_renderer!,
7
+ :create_software_renderer!,
8
+ :create_texture!,
9
+ :create_texture_from_surface!,
10
+ :create_window_and_renderer!,
11
+ :destroy_renderer,
12
+ :destroy_texture,
13
+ :get_num_render_drivers!,
14
+ :get_render_draw_blend_mode!,
15
+ :get_render_draw_color!,
16
+ :get_render_driver_info!,
17
+ :get_render_target,
18
+ :get_renderer!,
19
+ :get_renderer_info!,
20
+ :get_renderer_output_size!,
21
+ :get_texture_alpha_mod!,
22
+ :get_texture_color_mod!,
23
+ :get_texture_blend_mode!,
24
+ :lock_texture!,
25
+ :query_texture!,
26
+ :render_clear!,
27
+ :render_copy!,
28
+ :render_copy_ex!,
29
+ :render_draw_line!,
30
+ :render_draw_lines!,
31
+ :render_draw_point!,
32
+ :render_draw_points!,
33
+ :render_draw_rect!,
34
+ :render_draw_rects!,
35
+ :render_fill_rect!,
36
+ :render_fill_rects!,
37
+ :render_get_clip_rect,
38
+ :render_get_logical_size,
39
+ :render_get_scale,
40
+ :render_get_viewport,
41
+ :render_present,
42
+ :render_read_pixels!,
43
+ :render_set_clip_rect!,
44
+ :render_set_logical_size!,
45
+ :render_set_scale!,
46
+ :render_set_viewport!,
47
+ :render_target_supported?,
48
+ :set_render_draw_blend_mode!,
49
+ :set_render_draw_color!,
50
+ :set_render_target!,
51
+ :render_set_clip_rect!,
52
+ :set_texture_alpha_mod!,
53
+ :set_texture_blend_mode!,
54
+ :set_texture_color_mod!,
55
+ :unlock_texture,
56
+ :update_texture!,
57
+ ].each do |method|
58
+ SDL2.should respond_to(method)
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,224 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ module SDL2
4
+
5
+ describe Renderer do
6
+ before :each do
7
+ SDL2.init(:VIDEO)
8
+ @window = SDL2::Window.create()
9
+ @renderer = SDL2::Renderer.create(@window)
10
+ end
11
+
12
+ it 'could have many drivers' do
13
+ SDL2::Renderer::Drivers.count.should be_a(Integer)
14
+ SDL2::Renderer::Drivers.count.should >= 0
15
+ end
16
+
17
+ it 'should have a draw_color' do
18
+ @renderer.draw_color.should be_a(SDL2::Color)
19
+ @renderer.draw_color = SDL2::Color.create(r: 255)
20
+ @renderer.draw_color.r.should == 255
21
+ end
22
+
23
+ it 'should have a draw blend mode' do
24
+ @renderer.should respond_to(:draw_blend_mode)
25
+ @renderer.draw_blend_mode= :BLEND
26
+ @renderer.draw_blend_mode.should == :BLEND
27
+ @renderer.draw_blend_mode= :NONE
28
+ @renderer.draw_blend_mode.should == :NONE
29
+ end
30
+
31
+ it 'should have an info' do
32
+ @renderer.should respond_to(:info)
33
+ @renderer.info.should be_a(SDL2::RendererInfo)
34
+ @renderer.info.should_not be_null
35
+ end
36
+
37
+ it 'should have an output size' do
38
+ @renderer.should respond_to(:output_size)
39
+ @renderer.output_size.count.should == 2
40
+ @renderer.output_size.should == @window.current_size
41
+ @renderer.output_size.each{|val|val.should be_a(Integer)}
42
+ end
43
+
44
+ it 'should have a target' do
45
+ @renderer.should respond_to(:target)
46
+ @renderer.should respond_to(:target=)
47
+ @renderer.target.should be_nil
48
+ skip "TODO: SDL Error: glFramebufferTexture2DEXT() failed" #TODO: Investigate SDL Error: glFramebufferTexture2DEXT() failed
49
+ binding.pry
50
+ texture = SDL2::Texture.create(@renderer, :RGBA8888, :TARGET, 128, 128)
51
+ @renderer.target=texture
52
+ @renderer.target.should == texture
53
+ @renderer.target=nil
54
+ @renderer.target.should be_nil
55
+ end
56
+
57
+ it 'should be able to clear' do
58
+ @renderer.should respond_to(:clear)
59
+ @renderer.draw_color = SDL2::Color.create(g: 255)
60
+ @renderer.clear
61
+ SDL2.render_present(@renderer)
62
+
63
+ verify(format: :png){@window.renderer_to_surface}
64
+ end
65
+
66
+ it 'should be able to create textures from surfaces' do
67
+ @renderer.should respond_to(:texture_from_surface)
68
+ sur_hello = @window.surface.convert(SDL2::Image.load!(img_path('hello.bmp')))
69
+ @renderer.texture_from_surface(sur_hello).should be_a(SDL2::Texture)
70
+ end
71
+
72
+ it 'should be able to render textures' do
73
+ @renderer.should respond_to(:copy)
74
+ txt_hello = @renderer.texture_from_surface(@window.surface.convert(SDL2::Image.load!(img_path('hello.bmp'))))
75
+ @renderer.copy(txt_hello, {w: 200, h: 200}, {x: 100, y: 100, w: 100, h: 100})
76
+ SDL2.render_present(@renderer)
77
+ verify(){@window.renderer_to_surface}
78
+ end
79
+
80
+ it 'should be able to rotate and flip while rendering textures' do
81
+ @renderer.should respond_to(:copy_ex)
82
+ txt_hello = @renderer.texture_from_surface(@window.surface.convert(SDL2::Image.load!(img_path('hello.bmp'))))
83
+ @renderer.copy_ex(txt_hello, nil, nil, 12, {x: 12, y: 12}, :BOTH )
84
+ verify(){@window.renderer_to_surface}
85
+ end
86
+
87
+ it 'should be able to draw a single pixel line' do
88
+ @renderer.should respond_to(:draw_line)
89
+ @renderer.draw_color = SDL2::Color.create(r: 255,g: 255,b: 255)
90
+ @renderer.draw_line(100,100,200,200)
91
+ SDL2.render_present(@renderer)
92
+ verify(){@window.renderer_to_surface}
93
+ end
94
+
95
+ it 'should be able to draw a line connecting many points' do
96
+ @renderer.should respond_to(:draw_lines)
97
+ points = [[5,5],[1,123],[290,33],[27,222]]
98
+ @renderer.draw_color = SDL2::Color.create(g: 255)
99
+ # draw lines expects each point to be specified as an argument,
100
+ # no limit to the number of points that can be specified at once
101
+ # that I know of using this method.
102
+ @renderer.draw_lines(*points)
103
+ SDL2.render_present(@renderer)
104
+
105
+ verify(){@window.renderer_to_surface}
106
+ end
107
+
108
+ it 'should be able to draw a point' do
109
+ @renderer.should respond_to(:draw_point)
110
+ @renderer.draw_color = SDL2::Color.create(r: 255)
111
+ @renderer.draw_point(160,120)
112
+ SDL2.render_present(@renderer)
113
+ verify(){@window.renderer_to_surface}
114
+ end
115
+
116
+ it 'should be able to draw points' do
117
+ # You can pass many kinds of points.
118
+ points = [[88,44],SDL2::Point.cast([128,40]),{x: 300, y: 444}]
119
+ @renderer.draw_color = SDL2::Color.create(b: 255)
120
+ @renderer.draw_points(*points)
121
+ SDL2.render_present(@renderer)
122
+ verify(){@window.renderer_to_surface}
123
+ end
124
+
125
+ it 'should be able to draw a single rectangle' do
126
+ @renderer.should respond_to(:draw_rect)
127
+ @renderer.draw_color = {r: 255}
128
+ @renderer.draw_rect([10,10,100,100])
129
+ @renderer.draw_color = {g: 255}
130
+ @renderer.draw_rect({x: 40, y: 40, w: 64, h: 128})
131
+ @renderer.draw_color = {b: 255}
132
+ @renderer.draw_rect(SDL2::Rect.cast({x: 100, y: 100, w: 128, h: 64}))
133
+ SDL2.render_present(@renderer)
134
+ verify(){@window.renderer_to_surface}
135
+ end
136
+
137
+
138
+ it 'should be able to draw many rectangles at once' do
139
+ @renderer.should respond_to(:draw_rects)
140
+ # Should be able to handle many kinds of cords.
141
+ cords = [[10,10,100,100],{x: 40, y: 40, w: 64, h: 128},SDL2::Rect.cast({x: 100, y: 100, w: 128, h: 64})]
142
+ @renderer.draw_color = {r: 255, g: 255, b: 255}
143
+ @renderer.draw_rects(*cords)
144
+ SDL2.render_present(@renderer)
145
+ verify(){@window.renderer_to_surface}
146
+ end
147
+
148
+ it 'should be able to draw a single filled rectangle' do
149
+ @renderer.should respond_to(:fill_rect)
150
+ rect = {x: 123, y: 132, w: 200, h: 200}
151
+ @renderer.fill_rect(rect)
152
+ @renderer.present
153
+ verify(){@window.renderer_to_surface}
154
+ end
155
+
156
+ it 'should be able to draw many filled rectangles' do
157
+ rects = [
158
+ [21,32,124,200],
159
+ [64,11,15,66],
160
+ [222,100,80,100]
161
+ ]
162
+ @renderer.fill_rects(*rects)
163
+ @renderer.present
164
+ verify(){@window.renderer_to_surface}
165
+ end
166
+
167
+ it 'should have a clip rect' do
168
+ @renderer.should respond_to(:clip_rect)
169
+ @renderer.should respond_to(:clip_rect=)
170
+ @renderer.clip_rect.should be_a(SDL2::Rect)
171
+ @renderer.clip_rect.x.should == 0
172
+ @renderer.clip_rect.y.should == 0
173
+ @renderer.clip_rect.w.should == 0
174
+ @renderer.clip_rect.h.should == 0
175
+ @renderer.clip_rect = {x: 128, y: 128, w: 64, h: 32}
176
+
177
+ @renderer.clip_rect.x.should == 128
178
+ @renderer.clip_rect.y.should == 128
179
+ @renderer.clip_rect.w.should == 64
180
+ @renderer.clip_rect.h.should == 32
181
+ @renderer.fill_rect x: 100, y: 100, w: 100, h: 100
182
+ @renderer.present
183
+ verify(){@window.renderer_to_surface}
184
+ end
185
+
186
+ it 'should have a logical size' do
187
+ @renderer.should respond_to(:logical_size)
188
+ @renderer.should respond_to(:logical_size=)
189
+ @renderer.logical_size.should == [0, 0]
190
+ @renderer.logical_size = [128, 128]
191
+ @renderer.logical_size.should == [128, 128]
192
+ end
193
+
194
+ it 'should have a scale' do
195
+ @renderer.should respond_to(:scale)
196
+ @renderer.should respond_to(:scale=)
197
+ @renderer.scale.should == [1.0, 1.0]
198
+ @renderer.scale = [2.0, 3.0]
199
+ @renderer.scale.should == [2.0, 3.0]
200
+ end
201
+
202
+ it 'should have a viewport' do
203
+ @renderer.should respond_to(:viewport)
204
+ @renderer.should respond_to(:viewport=)
205
+ @renderer.viewport.should == SDL2::Rect.cast([0,0,*@window.current_size])
206
+ @renderer.viewport = {x: 20, y: 20, w: 128, h: 128}
207
+ @renderer.viewport.x.should == 20
208
+ @renderer.viewport.y.should == 20
209
+ @renderer.viewport.w.should == 128
210
+ @renderer.viewport.h.should == 128
211
+ end
212
+
213
+ it 'should signal if target rendering is supported' do
214
+ @renderer.should respond_to(:target_supported?)
215
+ # TODO: How else should we test this?
216
+ end
217
+
218
+
219
+ after :each do
220
+ SDL2.quit
221
+ end
222
+
223
+ end
224
+ end
@@ -0,0 +1,5 @@
1
+ require_relative '../unit_helper.rb'
2
+
3
+ require 'sdl2'
4
+
5
+ include SDL2
@@ -0,0 +1,65 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ module SDL2
4
+
5
+ describe Texture do
6
+
7
+ before :each do
8
+ SDL2.init!(:VIDEO)
9
+ @window = SDL2::Window.create()
10
+ @renderer = SDL2::Renderer.create(@window)
11
+ @texture = @renderer.texture_from_surface(SDL2::Image.load(img_path('hello.bmp')))
12
+ #@texture = SDL2::Texture.create(@renderer, :RGBA8888, :STATIC, 64,64)
13
+ #@renderer.present
14
+ #binding.pry
15
+ #SDL2::Debug.enable(SDL2::Struct)
16
+ #SDL2::Debug.enable(SDL2)
17
+ end
18
+
19
+ after :each do
20
+ #@texture.destroy
21
+ #@renderer.destroy
22
+ SDL2.quit
23
+ end
24
+
25
+ it 'has an alpha_mod' do
26
+ @texture.should respond_to(:alpha_mod)
27
+ @texture.should respond_to(:alpha_mod=)
28
+ @texture.alpha_mod.should == 255
29
+ @texture.alpha_mod = 128
30
+ @texture.alpha_mod.should == 128
31
+ end
32
+
33
+ it 'has a blend_mode' do
34
+ @texture.should respond_to(:blend_mode)
35
+ @texture.should respond_to(:blend_mode=)
36
+ @texture.blend_mode.should == :BLEND
37
+ @texture.blend_mode = SDL2::BLENDMODE::ADD
38
+ @texture.blend_mode.should == :ADD
39
+ end
40
+
41
+ it 'has a color_mod' do
42
+ @texture.should respond_to(:color_mod)
43
+ @texture.should respond_to(:color_mod=)
44
+ @texture.color_mod.should == [255,255,255]
45
+ @texture.color_mod = [32,64,128]
46
+ @texture.color_mod.should == [32,64,128]
47
+ end
48
+
49
+ it 'can be locked' do
50
+ @texture.should respond_to(:lock)
51
+ @texture.should respond_to(:unlock)
52
+ skip 'need to mess with streaming textures'
53
+ @texture.lock
54
+ @texture.unlock
55
+ end
56
+
57
+ it 'can be queried' do
58
+ query = @texture.query
59
+ query.length.should == 4
60
+ end
61
+
62
+
63
+ end
64
+
65
+ end
@@ -1,4 +1,4 @@
1
- require_relative '../../test_helper'
1
+ require_relative '../../spec_helper'
2
2
 
3
3
  require 'sdl2/init'
4
4
  require 'sdl2/video'
@@ -9,15 +9,15 @@ require 'sdl2/video'
9
9
  # What the Ruby version of the SDL_video.h API should look like
10
10
  #
11
11
  VIDEO_API = [
12
- :get_num_video_drivers,
12
+ :get_num_video_drivers!,
13
13
  :get_video_driver,
14
14
  :video_init,
15
15
  :video_quit,
16
16
  :get_current_video_driver,
17
- :get_num_video_displays,
17
+ :get_num_video_displays!,
18
18
  :get_display_name,
19
19
  :get_display_bounds,
20
- :get_num_display_modes,
20
+ :get_num_display_modes!,
21
21
  :get_display_mode,
22
22
  :get_desktop_display_mode,
23
23
  :get_current_display_mode,
@@ -83,88 +83,113 @@ VIDEO_API = [
83
83
  ]
84
84
 
85
85
  describe SDL2 do
86
- before do
87
- assert(SDL2.init(SDL2::INIT::VIDEO) == 0, 'Video initialized.')
88
- end
89
-
90
- after do
91
- SDL2.quit()
92
- end
93
-
94
86
  it 'has the video API' do
95
- assert_equal 70, VIDEO_API.count
87
+ VIDEO_API.count.should == 70
96
88
  VIDEO_API.each do |function|
97
- assert_respond_to SDL2, function
89
+ SDL2.should respond_to(function)
98
90
  end
99
91
  end
92
+ end
100
93
 
101
- it 'can manage the screen saver' do
102
- SDL2.disable_screen_saver
103
- refute SDL2.is_screen_saver_enabled
104
- SDL2.enable_screen_saver
105
- assert SDL2.is_screen_saver_enabled
94
+ describe SDL2::Video do
95
+ before do
96
+ SDL2::Debug.enable(SDL2::Struct)
97
+ SDL2.init(:VIDEO)
106
98
  end
107
-
108
- describe SDL2::Window do
109
-
99
+ after do
100
+ SDL2.quit
110
101
  end
111
-
112
- it 'can query OpenGL Extension Support' do
113
- skip 'not sure how to write this test right now.'
102
+ it 'can be initialized and shut down with default drivers' do
103
+ SDL2::Video.init("x11")
104
+ SDL2::Video.quit
114
105
  end
115
106
 
116
- it 'can query and set OpenGL Attributes' do
117
- skip 'for now.'
107
+ it 'can initialize each of the video drivers' do
108
+ skip 'Fails on dummy driver right now for me'
109
+ SDL2::Video::Drivers.each do |driver|
110
+ SDL2::Video.init(driver)
111
+ SDL2::Video.current_driver.should == driver
112
+ SDL2::Video.quit
113
+ end
118
114
  end
115
+ end
119
116
 
120
- describe SDL2::Display do
121
- it 'can count the displays attached' do
122
- sdl_count = SDL2.get_num_video_displays()
123
- assert_equal sdl_count, SDL2::Display.count
117
+ describe SDL2::Video::Drivers do
118
+ before do
119
+ SDL2.init(:VIDEO)
120
+ end
121
+ after do
122
+ SDL2.quit
123
+ end
124
+ it 'can list the video drivers' do
125
+ SDL2::Video::Drivers.num.should >= 1
126
+ SDL2::Video::Drivers.each do |driver|
127
+ driver.should be_a(String)
124
128
  end
129
+ end
125
130
 
126
- it 'can get the first display' do
127
- assert_kind_of SDL2::Display, SDL2::Display.first
128
- end
131
+ end
129
132
 
130
- it 'can get the display bounds' do
131
- assert_kind_of SDL2::Rect, SDL2::Display.first.bounds!
132
- end
133
+ describe SDL2::ScreenSaver do
134
+ before do
135
+ SDL2.init(:VIDEO)
136
+ end
137
+ after do
138
+ SDL2.quit()
139
+ end
140
+ before :each do
141
+ SDL2::Video.init
142
+ end
143
+ after :each do
144
+ SDL2::Video.quit
145
+ end
146
+ it 'can manage the screen saver' do
147
+ SDL2::ScreenSaver.disable
148
+ SDL2::ScreenSaver.enabled?.should == false
149
+ SDL2::ScreenSaver.enable
150
+ SDL2::ScreenSaver.enabled?.should == true
151
+ end
152
+ end
153
+
154
+ describe SDL2::Display do
155
+ before(:each){SDL2.init!(:VIDEO)}
156
+ after(:each){SDL2.quit}
157
+ it 'can count the displays attached' do
158
+ sdl_count = SDL2.get_num_video_displays()
159
+ SDL2::Display.count.should == sdl_count
160
+ end
133
161
 
134
- it 'has many display modes' do
135
- assert SDL2::Display.first.modes.count > 0
136
- assert_kind_of SDL2::Display::Mode, SDL2::Display.first().modes.first
137
- end
162
+ it 'can get the first display' do
163
+ SDL2::Display.first.should be_a(SDL2::Display)
164
+ end
138
165
 
166
+ it 'can get the display bounds' do
167
+ SDL2::Display.first.bounds!.should be_a(SDL2::Rect)
139
168
  end
140
169
 
170
+ it 'has many display modes' do
171
+ SDL2::Display.first.modes.count.should > 0
172
+ SDL2::Display.first().modes.first.should be_a(SDL2::Display::Mode)
173
+ end
141
174
  it 'can get the closest display mode' do
142
175
  closest_display_mode_found = nil # for now
143
176
 
144
177
  SDL2::Display::Mode.new do |wanted|
145
-
146
178
  wanted.format = 0 #SDL2::PIXELFORMAT_RGBA8888 #TODO: Import PIXELFORMAT
147
179
  # constants?
148
180
  wanted.w = 640
149
181
  wanted.h = 480
150
182
  wanted.refresh_rate = 60
151
183
  wanted.driverdata = nil
152
-
153
- closest_display_mode_found = SDL2::Display.first.closest_display_mode!(wanted)
184
+ closest_display_mode_found = SDL2::Display.first.closest_display_mode(wanted)
154
185
  end # This should automatically dispose of the display_mode struct we created
155
186
  # as wanted
156
- assert_kind_of SDL2::Display::Mode, closest_display_mode_found
187
+ closest_display_mode_found.should be_a(SDL2::Display::Mode)
157
188
 
158
189
  end
159
- #TODO: Redo GLContext testing
160
- #describe SDL2::GLContext do
161
- #
162
- # it 'can create gl_context' do
163
- # window = SDL2::Window.create!()
164
- # context = SDL2::GLContext.create!(window)
165
- # assert_kind_of SDL2::GLContext, context
166
- # end
167
- #
168
- # end
169
-
170
- end
190
+
191
+ it 'can list the current display mode' do
192
+ SDL2::Display.first.current_display_mode.should be_a(SDL2::Display::Mode)
193
+ #binding.pry
194
+ end
195
+ end