ray 0.0.0.pre2 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/.gitignore +1 -0
  2. data/.rspec +3 -0
  3. data/README.md +62 -0
  4. data/Rakefile +33 -23
  5. data/VERSION +1 -1
  6. data/ext/audio.c +473 -0
  7. data/ext/color.c +4 -4
  8. data/ext/event.c +25 -3
  9. data/ext/extconf.rb +35 -22
  10. data/ext/font.c +287 -0
  11. data/ext/image.c +682 -33
  12. data/ext/joystick.c +9 -9
  13. data/ext/ray.c +166 -55
  14. data/ext/ray.h +120 -9
  15. data/ext/ray_osx.m +161 -0
  16. data/ext/rect.c +31 -4
  17. data/lib/ray/audio.rb +52 -0
  18. data/lib/ray/color.rb +16 -0
  19. data/lib/ray/dsl.rb +1 -3
  20. data/lib/ray/dsl/event.rb +1 -39
  21. data/lib/ray/dsl/event_listener.rb +38 -0
  22. data/lib/ray/dsl/event_runner.rb +3 -1
  23. data/lib/ray/dsl/event_translator.rb +74 -8
  24. data/lib/ray/dsl/handler.rb +3 -33
  25. data/lib/ray/dsl/matcher.rb +129 -23
  26. data/lib/ray/font.rb +108 -0
  27. data/lib/ray/font_set.rb +37 -0
  28. data/lib/ray/game.rb +171 -34
  29. data/lib/ray/helper.rb +43 -5
  30. data/lib/ray/image.rb +90 -3
  31. data/lib/ray/image_set.rb +35 -0
  32. data/lib/ray/joystick.rb +30 -0
  33. data/lib/ray/music_set.rb +35 -0
  34. data/lib/ray/ray.rb +17 -9
  35. data/lib/ray/rect.rb +51 -0
  36. data/lib/ray/resource_set.rb +92 -0
  37. data/lib/ray/scene.rb +220 -51
  38. data/lib/ray/sound_set.rb +35 -0
  39. data/lib/ray/sprite.rb +184 -0
  40. data/psp/ext.c +4 -0
  41. data/samples/hello_world/hello.rb +35 -0
  42. data/samples/hello_world/hello_dsl.rb +24 -0
  43. data/samples/pong/pong.rb +128 -0
  44. data/samples/sokoban/level_1 +7 -0
  45. data/samples/sokoban/sokoban.rb +370 -0
  46. data/spec/ray/audio_spec.rb +146 -0
  47. data/spec/ray/color_spec.rb +13 -0
  48. data/spec/ray/event_spec.rb +57 -168
  49. data/spec/ray/font_spec.rb +93 -0
  50. data/spec/ray/image_set_spec.rb +48 -0
  51. data/spec/ray/image_spec.rb +130 -44
  52. data/spec/ray/joystick_spec.rb +13 -9
  53. data/spec/ray/matcher_spec.rb +32 -55
  54. data/spec/ray/ray_spec.rb +33 -31
  55. data/spec/ray/rect_spec.rb +80 -0
  56. data/spec/ray/resource_set_spec.rb +105 -0
  57. data/spec/ray/sprite_spec.rb +163 -0
  58. data/spec/res/VeraMono.ttf +0 -0
  59. data/spec/res/aqua2.bmp +0 -0
  60. data/spec/res/pop.wav +0 -0
  61. data/spec/spec.opts +4 -0
  62. data/spec/spec_helper.rb +8 -0
  63. data/yard_ext.rb +91 -0
  64. metadata +104 -38
  65. data/bin/ray +0 -5
  66. data/bin/ray_irb +0 -4
  67. data/ext/SDLMain.h +0 -17
  68. data/ext/SDLMain.m +0 -381
  69. data/lib/ray/config.rb +0 -84
  70. data/lib/ray/dsl/converter.rb +0 -65
  71. data/lib/ray/dsl/listener.rb +0 -30
  72. data/lib/ray/dsl/type.rb +0 -58
  73. data/spec/ray/config_spec.rb +0 -90
  74. data/spec/ray/conversion_spec.rb +0 -43
  75. data/spec/ray/type_spec.rb +0 -17
  76. data/spec_runner.rb +0 -27
data/ext/joystick.c CHANGED
@@ -79,9 +79,17 @@ VALUE ray_joystick_open(VALUE self) {
79
79
  return self;
80
80
  }
81
81
 
82
+ /* @return [true, false] true if the joystick is closed */
83
+ VALUE ray_joystick_closed(VALUE self) {
84
+ ray_joystick *joy = NULL;
85
+ Data_Get_Struct(self, ray_joystick, joy);
86
+
87
+ return joy->joystick == NULL ? Qtrue : Qfalse;
88
+ }
89
+
82
90
  /* Closes the joystick. Can be called even if closed? is true. */
83
91
  VALUE ray_joystick_close(VALUE self) {
84
- if (ray_joystick_close(self) == Qtrue)
92
+ if (ray_joystick_closed(self) == Qtrue)
85
93
  return Qnil;
86
94
 
87
95
  SDL_JoystickClose(ray_rb2joystick(self));
@@ -94,14 +102,6 @@ VALUE ray_joystick_close(VALUE self) {
94
102
  return Qnil;
95
103
  }
96
104
 
97
- /* @return [true, false] true if the joystick is closed */
98
- VALUE ray_joystick_closed(VALUE self) {
99
- ray_joystick *joy = NULL;
100
- Data_Get_Struct(self, ray_joystick, joy);
101
-
102
- return joy->joystick == NULL ? Qtrue : Qfalse;
103
- }
104
-
105
105
  /* @return [Integer] The number of buttons on this joystick */
106
106
  VALUE ray_joystick_button_count(VALUE self) {
107
107
  return INT2FIX(SDL_JoystickNumButtons(ray_rb2joystick(self)));
data/ext/ray.c CHANGED
@@ -1,16 +1,93 @@
1
1
  #include "ray.h"
2
2
 
3
+ #ifdef HAVE_COCOA
4
+ extern void ray_osx_init();
5
+ extern void ray_osx_close();
6
+ #endif
7
+
3
8
  VALUE ray_mRay = Qnil;
4
9
 
5
- /* Inits ray */
6
- VALUE ray_init(VALUE self) {
7
- SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK);
10
+ /*
11
+ @overload init(opts = {})
12
+ Inits Ray.
13
+
14
+ @option opts [Integer] :frequency Audio frequency (defaults to 22050)
15
+ @option opts [Integer] :format A constant declared in Ray::Audio
16
+ @option opts [true] :mono or :stereo Set :mono or :stereo to true to enable
17
+ one of them.
18
+ @option opts [Integer] :chunk_size Size of a chunk (defaults to 1024)
19
+ */
20
+ VALUE ray_init(int argc, VALUE *argv, VALUE self) {
21
+ VALUE hash = Qnil;
22
+ rb_scan_args(argc, argv, "01", &hash);
23
+
24
+ #ifdef HAVE_COCOA
25
+ ray_osx_init();
26
+ #endif
27
+
28
+ if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) == -1) {
29
+ rb_raise(rb_eRuntimeError, "Couldn't init the SDL (%s)",
30
+ SDL_GetError());
31
+ }
32
+
33
+ #ifdef HAVE_SDL_TTF
34
+ if (!TTF_WasInit()) {
35
+ if (TTF_Init() == -1) {
36
+ rb_raise(rb_eRuntimeError, "Couldn't init SDL_TTF (%s)",
37
+ TTF_GetError());
38
+ }
39
+ }
40
+ #endif
41
+
42
+ #ifdef HAVE_SDL_MIXER
43
+ int frequency = MIX_DEFAULT_FREQUENCY;
44
+ uint16_t format = MIX_DEFAULT_FORMAT;
45
+ int channels = MIX_DEFAULT_CHANNELS;
46
+ int chunk_size = 1024;
47
+
48
+ if (!NIL_P(hash)) {
49
+ VALUE rb_freq, rb_format, rb_chunk_size;
50
+ if (!NIL_P(rb_freq = rb_hash_aref(hash, RAY_SYM("frequency"))))
51
+ frequency = NUM2INT(rb_freq);
52
+
53
+ if (!NIL_P(rb_format = rb_hash_aref(hash, RAY_SYM("format"))))
54
+ format = NUM2INT(rb_format);
55
+
56
+ if (RTEST(rb_hash_aref(hash, RAY_SYM("mono"))))
57
+ channels = 1;
58
+ else if (RTEST(rb_hash_aref(hash, RAY_SYM("stereo"))))
59
+ channels = 2;
60
+
61
+ if (!NIL_P(rb_chunk_size = rb_hash_aref(hash, RAY_SYM("chunk_size"))))
62
+ chunk_size = NUM2INT(rb_chunk_size);
63
+ }
64
+
65
+ if (Mix_OpenAudio(frequency, format, channels, chunk_size) == -1) {
66
+ rb_raise(rb_eRuntimeError, "Couldn't open audio (%s)",
67
+ Mix_GetError());
68
+ }
69
+ #endif
70
+
8
71
  return Qnil;
9
72
  }
10
73
 
11
74
  /* Stops ray */
12
75
  VALUE ray_stop(VALUE self) {
76
+ #ifdef HAVE_SDL_MIXER
77
+ Mix_CloseAudio();
78
+ #endif
79
+
80
+ #ifdef HAVE_SDL_TTF
81
+ /*
82
+ Freeing a font after TTF_Quit causes a segfault, but, Ruby being
83
+ garbage called, we can't be sure a font won't be freed later.
84
+ */
85
+
86
+ /* TTF_Quit(); */
87
+ #endif
88
+
13
89
  SDL_Quit();
90
+ /* The pool is never drained on OSX */
14
91
  return Qnil;
15
92
  }
16
93
 
@@ -50,6 +127,9 @@ ray_video_mode ray_parse_video_mode(VALUE hash) {
50
127
  if (RTEST(rb_hash_aref(hash, RAY_SYM("no_frame"))))
51
128
  flags |= SDL_NOFRAME;
52
129
 
130
+ if (RTEST(rb_hash_aref(hash, RAY_SYM("resizable"))))
131
+ flags |= SDL_RESIZABLE;
132
+
53
133
  ray_video_mode mode = {
54
134
  NUM2INT(width),
55
135
  NUM2INT(height),
@@ -63,35 +143,36 @@ ray_video_mode ray_parse_video_mode(VALUE hash) {
63
143
  }
64
144
 
65
145
  /*
66
- Creates a new window.
146
+ @overload create_window(hash)
147
+ Creates a new window.
67
148
 
68
- @note If both hw_surface and sws_urface are false, hw_surface
69
- will be considered as true. :sw_surface should be true
70
- if you want to acess
149
+ If both hw_surface and sws_urface are false, hw_surface
150
+ will be considered as true. :sw_surface should be true
151
+ if you want to acess
71
152
 
72
- @return [Ray::Image] An image representing the window
153
+ @return [Ray::Image] An image representing the window
73
154
 
74
- @option hash [Integer] :width Width of the window
75
- @option hash [Integer] :height Height of the window
155
+ @option hash [Integer] :width Width of the window
156
+ @option hash [Integer] :height Height of the window
76
157
 
77
- @option hash [Integer] :w Alias for width
78
- @option hash [Integer] :h Alias for height
158
+ @option hash [Integer] :w Alias for width
159
+ @option hash [Integer] :h Alias for height
79
160
 
80
- @option hash [Integer] :bits_per_pixel Bits per pixel. Valid values are
81
- 8, 15, 16, 24, and 32.
82
- @option hash [Integer] :bpp Alias for bits_per_pixel
161
+ @option hash [Integer] :bits_per_pixel Bits per pixel. Valid values are
162
+ 8, 15, 16, 24, and 32.
163
+ @option hash [Integer] :bpp Alias for bits_per_pixel
83
164
 
84
- @option hash [true, false] :hw_surface Creates the surface in video memory
165
+ @option hash [true, false] :hw_surface Creates the surface in video memory
85
166
  (default)
86
- @option hash [true, false] :sw_surface Creates the surface in system memory
87
- @option hash [true, false] :async_blit Enables asynchronous updates of the
88
- the surface
89
- @option hash [true, false] :double_buf Enables double buffering. Ignored
90
- if sw_surface is set.
91
- @option hash [true, false] :fullscreen Creates a full screen window.
92
- @option hash [true, false] :resizable Creates a resizable window.
93
- @option hash [true, false] :no_frame Disables window decoration if
94
- possible.
167
+ @option hash [true, false] :sw_surface Creates the surface in system memory
168
+ @option hash [true, false] :async_blit Enables asynchronous updates of the
169
+ the surface
170
+ @option hash [true, false] :double_buf Enables double buffering. Ignored
171
+ if sw_surface is set.
172
+ @option hash [true, false] :fullscreen Creates a full screen window.
173
+ @option hash [true, false] :resizable Creates a resizable window.
174
+ @option hash [true, false] :no_frame Disables window decoration if
175
+ possible.
95
176
  */
96
177
  VALUE ray_create_window(VALUE self, VALUE hash) {
97
178
  ray_video_mode mode = ray_parse_video_mode(hash);
@@ -107,8 +188,10 @@ VALUE ray_create_window(VALUE self, VALUE hash) {
107
188
  }
108
189
 
109
190
  /*
110
- @return [true, false] True if the video mode described by hash
111
- can be used.
191
+ @overload can_use_mode?(hash)
192
+ @param [Hash] hash Same options as in create_window
193
+ @return [true, false] True if the video mode described by hash
194
+ can be used.
112
195
  */
113
196
  VALUE ray_can_use_mode(VALUE self, VALUE hash) {
114
197
  ray_video_mode mode = ray_parse_video_mode(hash);
@@ -118,8 +201,9 @@ VALUE ray_can_use_mode(VALUE self, VALUE hash) {
118
201
  }
119
202
 
120
203
  /*
121
- Sets the window icon
122
- @param [Ray::Image] icon The icon to display
204
+ @overload icon=(icon)
205
+ Sets the window icon
206
+ @param [Ray::Image] icon The icon to display
123
207
  */
124
208
  VALUE ray_set_icon(VALUE self, VALUE icon) {
125
209
  SDL_WM_SetIcon(ray_rb2surface(icon), NULL);
@@ -136,7 +220,10 @@ VALUE ray_window_title(VALUE self) {
136
220
  return rb_str_new2(title);
137
221
  }
138
222
 
139
- /* Sets the window title */
223
+ /*
224
+ @overload window_title=(title)
225
+ Sets the window title
226
+ */
140
227
  VALUE ray_set_window_title(VALUE self, VALUE title) {
141
228
  char *icon = NULL;
142
229
 
@@ -158,7 +245,10 @@ VALUE ray_text_icon(VALUE self) {
158
245
  return rb_str_new2(icon);
159
246
  }
160
247
 
161
- /* Sets the window title */
248
+ /*
249
+ @overload text_icon=(val)
250
+ Sets the window text icon
251
+ */
162
252
  VALUE ray_set_text_icon(VALUE self, VALUE icon) {
163
253
  char *title;
164
254
 
@@ -180,7 +270,10 @@ VALUE ray_grab_input(VALUE self) {
180
270
  return (mode == SDL_GRAB_ON) ? Qtrue : Qfalse;
181
271
  }
182
272
 
183
- /* Sets the grab input to true or false */
273
+ /*
274
+ @overload grab_input=(grab)
275
+ Sets the grab input to true or false
276
+ */
184
277
  VALUE ray_set_grab_input(VALUE self, VALUE grab) {
185
278
  SDL_WM_GrabInput(RTEST(grab) ? SDL_GRAB_ON : SDL_GRAB_OFF);
186
279
  return grab;
@@ -204,10 +297,37 @@ VALUE ray_has_image_support(VALUE self) {
204
297
  #endif
205
298
  }
206
299
 
300
+ /* @return [true, false] true if Ray supports graphical effect like rotations */
301
+ VALUE ray_has_gfx_support(VALUE self) {
302
+ #ifdef HAVE_SDL_GFX
303
+ return Qtrue;
304
+ #else
305
+ return Qfalse;
306
+ #endif
307
+ }
308
+
309
+ /* @return [true, false] true if Ray supports ttf fonts */
310
+ VALUE ray_has_font_support(VALUE self) {
311
+ #ifdef HAVE_SDL_TTF
312
+ return Qtrue;
313
+ #else
314
+ return Qfalse;
315
+ #endif
316
+ }
317
+
318
+ /* @return [true, false] true if Ray supports audio playback */
319
+ VALUE ray_has_audio_support(VALUE self) {
320
+ #ifdef HAVE_SDL_MIXER
321
+ return Qtrue;
322
+ #else
323
+ return Qfalse;
324
+ #endif
325
+ }
326
+
207
327
  void Init_ray_ext() {
208
328
  ray_mRay = rb_define_module("Ray");
209
329
 
210
- rb_define_module_function(ray_mRay, "init", ray_init, 0);
330
+ rb_define_module_function(ray_mRay, "init", ray_init, -1);
211
331
  rb_define_module_function(ray_mRay, "stop", ray_stop, 0);
212
332
 
213
333
  rb_define_module_function(ray_mRay, "create_window", ray_create_window, 1);
@@ -227,6 +347,12 @@ void Init_ray_ext() {
227
347
 
228
348
  rb_define_module_function(ray_mRay, "has_image_support?",
229
349
  ray_has_image_support, 0);
350
+ rb_define_module_function(ray_mRay, "has_gfx_support?",
351
+ ray_has_gfx_support, 0);
352
+ rb_define_module_function(ray_mRay, "has_font_support?",
353
+ ray_has_font_support, 0);
354
+ rb_define_module_function(ray_mRay, "has_audio_support?",
355
+ ray_has_audio_support, 0);
230
356
 
231
357
  Init_ray_image();
232
358
  Init_ray_color();
@@ -234,33 +360,18 @@ void Init_ray_ext() {
234
360
  Init_ray_event();
235
361
  Init_ray_joystick();
236
362
 
237
- #ifdef PSP
238
- Init_ray_psp();
363
+ #ifdef HAVE_SDL_TTF
364
+ Init_ray_font();
239
365
  #endif
240
- }
241
366
 
242
- #ifndef PSP
243
-
244
- int main(int argc, char *argv[]) {
245
- #if defined(HAVE_RUBY_RUN_NODE)
246
- ruby_init();
247
- Init_ray_ext();
248
- ruby_run_node(ruby_options(argc, argv));
249
- #elif defined(HAVE_RUBY_RUN)
250
- ruby_init();
251
- Init_ray_ext();
252
- ruby_init_loadpath();
253
- ruby_options(argc, argv);
254
- ruby_run();
255
- #else
256
- fprintf(stderr, "Please use \"require 'ray'\" on this platform\n");
257
- return 1;
367
+ #ifdef HAVE_SDL_MIXER
368
+ Init_ray_audio();
258
369
  #endif
259
370
 
260
- return 0;
261
- }
262
-
371
+ #ifdef PSP
372
+ Init_ray_psp();
263
373
  #endif
374
+ }
264
375
 
265
376
  #ifdef PSP
266
377
 
data/ext/ray.h CHANGED
@@ -1,10 +1,13 @@
1
+ #ifndef RAY_H_
2
+ #define RAY_H_
3
+
1
4
  #ifndef PSP
2
5
  # include "ruby.h"
3
6
  #else
4
7
  # include <ruby/ruby.h>
5
8
  #endif
6
9
 
7
- #if defined(HAVE_SDL_H) || defined(RAY_USE_FRAMEWORK)
10
+ #if defined(HAVE_SDL_H)
8
11
  # include <SDL.h>
9
12
  #else
10
13
  # include <SDL/SDL.h>
@@ -16,14 +19,66 @@
16
19
  # include <pspctrl.h>
17
20
  #endif
18
21
 
19
- #if defined(HAVE_SDL_IMAGE)
20
- # if defined(HAVE_SDL_IMAGE_H) || defined(RAY_USE_FRAMEWORK)
21
- # include <SDL_image.h>
22
- # else
22
+ #if defined(HAVE_SDL_IMAGE_H)
23
+ # if !defined(HAVE_SDL_IMAGE)
24
+ # define HAVE_SDL_IMAGE
25
+ # endif
26
+ # include <SDL_image.h>
27
+ #else
28
+ # if defined(HAVE_SDL_SDL_IMAGE_H)
29
+ # if !defined(HAVE_SDL_IMAGE)
30
+ # define HAVE_SDL_IMAGE
31
+ # endif
23
32
  # include <SDL/SDL_image.h>
24
33
  # endif
25
34
  #endif
26
35
 
36
+ #if defined(HAVE_SDL_ROTOZOOM_H)
37
+ # if !defined(HAVE_SDL_GFX)
38
+ # define HAVE_SDL_GFX
39
+ # endif
40
+ # include <SDL_gfxPrimitives.h>
41
+ # include <SDL_rotozoom.h>
42
+ # include <SDL_imageFilter.h>
43
+ #else
44
+ # if defined(HAVE_SDL_SDL_ROTOZOOM_H)
45
+ # if !defined(HAVE_SDL_GFX)
46
+ # define HAVE_SDL_GFX
47
+ # endif
48
+ # include <SDL/SDL_gfxPrimitives.h>
49
+ # include <SDL/SDL_rotozoom.h>
50
+ # include <SDL/SDL_imageFilter.h>
51
+ # endif
52
+ #endif
53
+
54
+ #if defined(HAVE_SDL_TTF_H)
55
+ # if !defined(HAVE_SDL_TTF)
56
+ # define HAVE_SDL_TTF
57
+ # endif
58
+ # include <SDL_ttf.h>
59
+ #else
60
+ # if defined(HAVE_SDL_SDL_TTF_H)
61
+ # if !defined(HAVE_SDL_TTF)
62
+ # define HAVE_SDL_TTF
63
+ # endif
64
+ # include <SDL/SDL_ttf.h>
65
+ # endif
66
+ #endif
67
+
68
+ #if defined(HAVE_SDL_MIXER_H)
69
+ # if !defined(HAVE_SDL_MIXER)
70
+ # define HAVE_SDL_MIXER
71
+ # endif
72
+ # include <SDL_mixer.h>
73
+ #else
74
+ # if defined(HAVE_SDL_SDL_MIXER_H)
75
+ # if !defined(HAVE_SDL_MIXER)
76
+ # define HAVE_SDL_MIXER
77
+ # endif
78
+ # include <SDL/SDL_mixer.h>
79
+ # endif
80
+ #endif
81
+
27
82
  #ifdef __cplusplus
28
83
  extern "C" {
29
84
  #if 0
@@ -39,6 +94,16 @@ extern VALUE ray_cColor;
39
94
  extern VALUE ray_cRect;
40
95
  extern VALUE ray_cEvent;
41
96
 
97
+ #ifdef HAVE_SDL_TTF
98
+ extern VALUE ray_cFont;
99
+ #endif
100
+
101
+ #ifdef HAVE_SDL_MIXER
102
+ extern VALUE ray_mAudio;
103
+ extern VALUE ray_cSound;
104
+ extern VALUE ray_cMusic;
105
+ #endif
106
+
42
107
  #ifdef PSP
43
108
  extern VALUE ray_eTimeoutError;
44
109
  extern VALUE ray_mWlan;
@@ -65,10 +130,8 @@ typedef struct {
65
130
  } ray_video_mode;
66
131
 
67
132
  typedef struct {
68
- VALUE self;
69
133
  SDL_Surface *surface;
70
-
71
- int mustFree; /* Should we call SDL_FreeSurface? */
134
+ int must_free; /* Should we call SDL_FreeSurface? */
72
135
  } ray_image;
73
136
 
74
137
  typedef struct {
@@ -81,11 +144,30 @@ typedef struct {
81
144
  SDL_Joystick *joystick;
82
145
  } ray_joystick;
83
146
 
147
+ #ifdef HAVE_SDL_TTF
148
+ typedef struct {
149
+ TTF_Font *font;
150
+ } ray_font;
151
+ #endif
152
+
153
+ #ifdef HAVE_SDL_MIXER
154
+ typedef struct {
155
+ Mix_Chunk *sound;
156
+ } ray_sound;
157
+
158
+ typedef struct {
159
+ Mix_Music *music;
160
+ } ray_music;
161
+ #endif
162
+
84
163
  /* Convertion functions */
85
164
 
86
- /** Converts a surface into a ruby object */
165
+ /** Converts a surface into a ruby object (won't free it) */
87
166
  VALUE ray_create_image(SDL_Surface *surface);
88
167
 
168
+ /** Converts a surface into a ruby object (will free it) */
169
+ VALUE ray_create_gc_image(SDL_Surface *surface);
170
+
89
171
  /** Converts a color into a ruby object */
90
172
  VALUE ray_col2rb(ray_color color);
91
173
 
@@ -107,12 +189,31 @@ SDL_Surface *ray_rb2surface(VALUE object);
107
189
  /** Converts a ruby object into a rect */
108
190
  ray_rect ray_rb2rect(VALUE object);
109
191
 
192
+ /**
193
+ Converts a ruby object into a rect even if it's not an intance
194
+ of Ray::Rect.
195
+ */
196
+ ray_rect ray_convert_to_rect(VALUE obj);
197
+
110
198
  /** Converts a ruby object into an event */
111
199
  SDL_Event *ray_rb2event(VALUE object);
112
200
 
113
201
  /** Converts a ruby object into a joystick */
114
202
  SDL_Joystick *ray_rb2joystick(VALUE object);
115
203
 
204
+ #ifdef HAVE_SDL_TTF
205
+ /** Converts a ruby object into a font */
206
+ TTF_Font *ray_rb2font(VALUE object);
207
+ #endif
208
+
209
+ #ifdef HAVE_SDL_MIXER
210
+ /** Converts a ruby object into a sound chunk */
211
+ Mix_Chunk *ray_rb2chunk(VALUE object);
212
+
213
+ /** Converts a ruby object into a music */
214
+ Mix_Music *ray_rb2music(VALUE object);
215
+ #endif
216
+
116
217
  /* Initializers */
117
218
 
118
219
  void Init_ray_ext();
@@ -122,6 +223,14 @@ void Init_ray_rect();
122
223
  void Init_ray_event();
123
224
  void Init_ray_joystick();
124
225
 
226
+ #ifdef HAVE_SDL_TTF
227
+ void Init_ray_font();
228
+ #endif
229
+
230
+ #ifdef HAVE_SDL_MIXER
231
+ void Init_ray_audio();
232
+ #endif
233
+
125
234
  #ifdef PSP
126
235
  void Init_ray_psp();
127
236
  #endif
@@ -132,3 +241,5 @@ void Init_ray_psp();
132
241
  #endif
133
242
  }
134
243
  #endif
244
+
245
+ #endif