rubysdl 1.3.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 (82) hide show
  1. data/LICENSE +505 -0
  2. data/MANIFEST +81 -0
  3. data/NEWS.en +144 -0
  4. data/NEWS.ja +151 -0
  5. data/README.en +117 -0
  6. data/README.ja +166 -0
  7. data/SDL_kanji.c +403 -0
  8. data/SDL_kanji.h +48 -0
  9. data/depend +18 -0
  10. data/doc/Makefile +18 -0
  11. data/doc/cdrom.rsd +431 -0
  12. data/doc/collision.rsd +162 -0
  13. data/doc/event.rsd +1487 -0
  14. data/doc/font.rsd +839 -0
  15. data/doc/general.rsd +49 -0
  16. data/doc/init.rsd +175 -0
  17. data/doc/joystick.rsd +387 -0
  18. data/doc/mixer.rsd +837 -0
  19. data/doc/mpeg.rsd +595 -0
  20. data/doc/rsd.rb +125 -0
  21. data/doc/sdlskk.rsd +496 -0
  22. data/doc/time.rsd +45 -0
  23. data/doc/video.rsd +2499 -0
  24. data/doc/wm.rsd +113 -0
  25. data/extconf.rb +92 -0
  26. data/lib/rubysdl_aliases.rb +431 -0
  27. data/lib/sdl.rb +271 -0
  28. data/rubysdl.h +109 -0
  29. data/rubysdl_cdrom.c +176 -0
  30. data/rubysdl_const_list.txt +280 -0
  31. data/rubysdl_doc.en.rd +2180 -0
  32. data/rubysdl_doc_old.rd +2402 -0
  33. data/rubysdl_event.c +346 -0
  34. data/rubysdl_event2.c +417 -0
  35. data/rubysdl_event_key.c +356 -0
  36. data/rubysdl_image.c +53 -0
  37. data/rubysdl_joystick.c +156 -0
  38. data/rubysdl_kanji.c +135 -0
  39. data/rubysdl_main.c +202 -0
  40. data/rubysdl_mixer.c +422 -0
  41. data/rubysdl_mouse.c +96 -0
  42. data/rubysdl_opengl.c +63 -0
  43. data/rubysdl_pixel.c +133 -0
  44. data/rubysdl_ref.html +5550 -0
  45. data/rubysdl_ref.rd +6163 -0
  46. data/rubysdl_rwops.c +90 -0
  47. data/rubysdl_sdlskk.c +312 -0
  48. data/rubysdl_sge_video.c +622 -0
  49. data/rubysdl_smpeg.c +341 -0
  50. data/rubysdl_time.c +36 -0
  51. data/rubysdl_ttf.c +324 -0
  52. data/rubysdl_video.c +749 -0
  53. data/rubysdl_wm.c +71 -0
  54. data/sample/aadraw.rb +24 -0
  55. data/sample/alpha.rb +27 -0
  56. data/sample/alphadraw.rb +25 -0
  57. data/sample/bfont.rb +24 -0
  58. data/sample/cdrom.rb +17 -0
  59. data/sample/collision.rb +97 -0
  60. data/sample/cursor.bmp +0 -0
  61. data/sample/cursor.rb +22 -0
  62. data/sample/ellipses.rb +35 -0
  63. data/sample/event2.rb +32 -0
  64. data/sample/font.bmp +0 -0
  65. data/sample/font.rb +25 -0
  66. data/sample/fpstimer.rb +175 -0
  67. data/sample/icon.bmp +0 -0
  68. data/sample/joy2.rb +81 -0
  69. data/sample/kanji.rb +36 -0
  70. data/sample/movesp.rb +93 -0
  71. data/sample/playmod.rb +14 -0
  72. data/sample/plaympeg.rb +48 -0
  73. data/sample/playwave.rb +16 -0
  74. data/sample/randrect.rb +40 -0
  75. data/sample/sample.ttf +0 -0
  76. data/sample/sdlskk.rb +70 -0
  77. data/sample/sgetest.rb +31 -0
  78. data/sample/stetris.rb +275 -0
  79. data/sample/testgl.rb +166 -0
  80. data/sample/testsprite.rb +68 -0
  81. data/sample/transformblit.rb +41 -0
  82. metadata +121 -0
@@ -0,0 +1,90 @@
1
+ /*
2
+ Ruby/SDL Ruby extension library for SDL
3
+
4
+ Copyright (C) 2001-2007 Ohbayashi Ippei
5
+
6
+ This library is free software; you can redistribute it and/or
7
+ modify it under the terms of the GNU Lesser General Public
8
+ License as published by the Free Software Foundation; either
9
+ version 2.1 of the License, or (at your option) any later version.
10
+
11
+ This library is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ Lesser General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Lesser General Public
17
+ License along with this library; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ */
20
+ #include "rubysdl.h"
21
+
22
+ static int rubyio_read(SDL_RWops* context, void* ptr, int size, int maxnum)
23
+ {
24
+ volatile VALUE io = (VALUE)context->hidden.unknown.data1;
25
+ volatile VALUE str;
26
+ str = rb_funcall(io, rb_intern("read"), 1, INT2NUM(size*maxnum));
27
+ StringValue(str);
28
+
29
+ memcpy(ptr, RSTRING(str)->ptr, RSTRING(str)->len);
30
+ return RSTRING(str)->len/size;
31
+ }
32
+
33
+ static int rubyio_write(SDL_RWops* context, const void* ptr, int size, int num)
34
+ {
35
+ rb_raise(rb_eTypeError, "not implemented yet RWops write");
36
+ }
37
+
38
+ static int rubyio_pseudo_seek(SDL_RWops* context, int offset, int whence)
39
+ {
40
+ volatile VALUE io = (VALUE)context->hidden.unknown.data1;
41
+ volatile VALUE str;
42
+ if(offset < 0)
43
+ rb_raise(eSDLError, "cannot seek backward");
44
+
45
+
46
+ switch(whence){
47
+ case SEEK_SET:
48
+ rb_funcall(io, rb_intern("rewind"), 0);
49
+ rb_funcall(io, rb_intern("read"), 1, INT2NUM(offset));
50
+ break;
51
+ case SEEK_CUR:
52
+ str = rb_funcall(io, rb_intern("read"), 1, INT2NUM(offset));
53
+ break;
54
+ case SEEK_END:
55
+ rb_raise(eSDLError, "cannot seek SEEK_END");
56
+ default:
57
+ SDL_SetError("Unknown value for 'whence'");
58
+ return(-1);
59
+ }
60
+ return NUM2INT(rb_funcall(io, rb_intern("tell"), 0));
61
+ }
62
+
63
+ static int rubyio_close(SDL_RWops* context)
64
+ {
65
+ if(context)
66
+ SDL_FreeRW(context);
67
+ return 0;
68
+ }
69
+
70
+ /* WARNING: +obj+ is not marked when GC starts,
71
+ so you should use `volatile' when this function is used
72
+ and you should not take out this RWops pointer to ruby's world.
73
+ */
74
+ SDL_RWops* rubysdl_RWops_from_ruby_obj(VALUE obj)
75
+ {
76
+ SDL_RWops* rwops;
77
+
78
+ rwops = SDL_AllocRW();
79
+ if( rwops == NULL )
80
+ rb_raise(eSDLError, "Out of memory:%s", SDL_GetError());
81
+
82
+ rwops->seek = rubyio_pseudo_seek;
83
+ rwops->read = rubyio_read;
84
+ rwops->write = rubyio_write;
85
+ rwops->close = rubyio_close;
86
+ rwops->hidden.unknown.data1 = (void*)obj;
87
+
88
+ return rwops;
89
+ }
90
+
@@ -0,0 +1,312 @@
1
+ /*
2
+ Ruby/SDL Ruby extension library for SDL
3
+
4
+ Copyright (C) 2001-2007 Ohbayashi Ippei
5
+
6
+ This library is free software; you can redistribute it and/or
7
+ modify it under the terms of the GNU Lesser General Public
8
+ License as published by the Free Software Foundation; either
9
+ version 2.1 of the License, or (at your option) any later version.
10
+
11
+ This library is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ Lesser General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Lesser General Public
17
+ License along with this library; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ */
20
+ #ifdef HAVE_SDLSKK
21
+ #include "rubysdl.h"
22
+ #include <sdlskk.h>
23
+ #include <SDL_ttf.h>
24
+
25
+ typedef SDL_Surface* (*Renderer)(SDLSKK_Context*,TTF_Font*,SDL_Color);
26
+
27
+ static void skk_error_handler(SDLSKK_Error err)
28
+ {
29
+ switch( err ){
30
+ case SDLSKK_NOERROR:
31
+ return;
32
+ case SDLSKK_MEMERROR:
33
+ rb_fatal("SDLSKK: memory allocation error");
34
+ }
35
+ }
36
+
37
+ static VALUE skk_set_encoding(VALUE mod,VALUE encoding)
38
+ {
39
+ SDLSKK_set_encoding( NUM2INT(encoding) );
40
+ return Qnil;
41
+ }
42
+
43
+ static VALUE skk_get_encoding(VALUE mod)
44
+ {
45
+ return INT2FIX(SDLSKK_get_encoding());
46
+ }
47
+
48
+
49
+ static VALUE skk_Context_new(VALUE class,VALUE dict,VALUE rule_table,
50
+ VALUE keybind, VALUE use_minibuffer )
51
+ {
52
+ SDLSKK_Context* c_context;
53
+ SDLSKK_RomKanaRuleTable* c_table;
54
+ SDLSKK_Dictionary* c_dict;
55
+ SDLSKK_Keybind* c_bind;
56
+ VALUE context;
57
+
58
+ if( !rb_obj_is_kind_of(dict,cDictionary) )
59
+ rb_raise(rb_eArgError,"type mismatch(expect SDL::SKK::Dictionary)");
60
+ if( !rb_obj_is_kind_of(rule_table,cRomKanaRuleTable) )
61
+ rb_raise(rb_eArgError,"type mismatch(expect SDL::SKK::RomKanaRuleTable)");
62
+ if( !rb_obj_is_kind_of(keybind,cKeybind) )
63
+ rb_raise(rb_eArgError,"type mismatch(expect SDL::SKK::Keybind)");
64
+
65
+ Data_Get_Struct(dict,SDLSKK_Dictionary,c_dict);
66
+ Data_Get_Struct(rule_table,SDLSKK_RomKanaRuleTable,c_table);
67
+ Data_Get_Struct(keybind,SDLSKK_Keybind,c_bind);
68
+
69
+ c_context = SDLSKK_Context_new( c_dict, c_table, c_bind, RTEST(use_minibuffer) );
70
+ if( c_context == NULL )
71
+ rb_raise(eSDLError,"Couldn't create Context");
72
+
73
+ context = Data_Wrap_Struct(class,0,SDLSKK_Context_delete,c_context);
74
+ rb_iv_set(context,"dict",dict);
75
+ rb_iv_set(context,"rule_table",rule_table);
76
+
77
+ return context;
78
+ }
79
+
80
+ static VALUE skk_Context_input_event(VALUE obj,VALUE event)
81
+ {
82
+ SDLSKK_Context* context;
83
+ SDL_Event *ev;
84
+
85
+ Data_Get_Struct(obj,SDLSKK_Context,context);
86
+ if( rb_obj_is_kind_of( event,cEvent ) ){
87
+ Data_Get_Struct(event,SDL_Event,ev);
88
+ SDLSKK_Context_input_event( context, ev );
89
+ return Qnil;
90
+ }
91
+
92
+ #ifdef DEF_EVENT2
93
+ if( rb_obj_is_kind_of( event,cEvent2 ) ){
94
+ if( rb_obj_is_kind_of( event,cKeyDownEvent ) ){
95
+ SDL_Event ev2;
96
+ ev2.type = SDL_KEYDOWN;
97
+ ev2.key.keysym.sym = NUM2INT( rb_iv_get(event,"@sym") );
98
+ ev2.key.keysym.unicode = NUM2UINT( rb_iv_get(event,"@unicode") );
99
+ ev2.key.keysym.mod = NUM2INT( rb_iv_get(event,"@mod"));
100
+ SDLSKK_Context_input_event( context, &ev2 );
101
+ return Qnil;
102
+ }else{
103
+ return Qnil;
104
+ }
105
+ }
106
+
107
+ #endif
108
+ rb_raise( rb_eArgError,"type mismatch(expect SDL::Event or SDL::Event2)");
109
+
110
+ /* NOT REACHED */
111
+ }
112
+
113
+ static VALUE skk_Context_get_str(VALUE obj)
114
+ {
115
+ SDLSKK_Context* context;
116
+ char cstr[10000];
117
+
118
+ Data_Get_Struct(obj,SDLSKK_Context,context);
119
+
120
+ SDLSKK_Context_get_str(context,cstr,sizeof(cstr));
121
+
122
+ return rb_str_new2(cstr);
123
+ }
124
+
125
+ static VALUE render_str(VALUE obj,VALUE font,VALUE r,VALUE g,VALUE b,
126
+ Renderer func)
127
+ {
128
+ SDLSKK_Context* context;
129
+ SDL_Surface* surface;
130
+ TTF_Font* ttf_font;
131
+ SDL_Color color;
132
+
133
+ if( !rb_obj_is_kind_of(font,cTTF) )
134
+ rb_raise( rb_eArgError,"type mismatch(expect SDL::TTF)");
135
+
136
+ color.r = NUM2UINT(r);
137
+ color.g = NUM2UINT(g);
138
+ color.b = NUM2UINT(b);
139
+
140
+ Data_Get_Struct(obj,SDLSKK_Context,context);
141
+ Data_Get_Struct(font,TTF_Font,ttf_font);
142
+
143
+ surface = func(context,ttf_font,color);
144
+
145
+ if( surface == NULL )
146
+ return Qnil;
147
+
148
+ return Data_Wrap_Struct(cSurface,0,sdl_freeSurface,surface);
149
+ }
150
+
151
+ static VALUE skk_Context_render_str(VALUE obj,VALUE font,VALUE r,VALUE g,
152
+ VALUE b)
153
+ {
154
+ return render_str(obj,font,r,g,b,SDLSKK_Context_render_display_str);
155
+ }
156
+
157
+ static VALUE skk_Context_render_minibuffer_str(VALUE obj,VALUE font,VALUE r,
158
+ VALUE g,VALUE b)
159
+ {
160
+ return render_str(obj,font,r,g,b,SDLSKK_Context_render_minibuffer_str);
161
+ }
162
+
163
+ static VALUE skk_Context_get_basic_mode(VALUE obj)
164
+ {
165
+ SDLSKK_Context* context;
166
+
167
+ Data_Get_Struct(obj,SDLSKK_Context,context);
168
+ return BOOL(SDLSKK_Context_get_basic_mode(context));
169
+ }
170
+
171
+ static VALUE skk_Context_clear(VALUE obj)
172
+ {
173
+ SDLSKK_Context* context;
174
+
175
+ Data_Get_Struct(obj,SDLSKK_Context,context);
176
+ SDLSKK_Context_clear(context);
177
+ return Qnil;
178
+ }
179
+
180
+ static VALUE skk_Context_clear_text(VALUE obj)
181
+ {
182
+ SDLSKK_Context* context;
183
+
184
+ Data_Get_Struct(obj,SDLSKK_Context,context);
185
+ SDLSKK_Context_clear_text(context);
186
+ return Qnil;
187
+ }
188
+
189
+ static VALUE skk_Dictionary_new(VALUE class)
190
+ {
191
+ SDLSKK_Dictionary* dict;
192
+
193
+ dict = SDLSKK_Dict_new();
194
+ if( dict == NULL )
195
+ rb_raise(eSDLError,"Couldn't create SDL::SKK::Dictionary" );
196
+
197
+ return Data_Wrap_Struct(class,0,SDLSKK_Dict_delete,dict);
198
+ }
199
+
200
+ static VALUE skk_Dict_load(VALUE obj,VALUE filename,VALUE users)
201
+ {
202
+ SDLSKK_Dictionary* dict;
203
+
204
+ Data_Get_Struct(obj,SDLSKK_Dictionary,dict);
205
+
206
+ if( !SDLSKK_Dict_load(dict,GETCSTR(filename),RTEST(users)) )
207
+ rb_raise(eSDLError,"Couldn't load %s",GETCSTR(filename));
208
+
209
+ return Qnil;
210
+ }
211
+
212
+ static VALUE skk_Dict_save(VALUE obj, VALUE filename)
213
+ {
214
+ SDLSKK_Dictionary* dict;
215
+
216
+ Data_Get_Struct(obj,SDLSKK_Dictionary,dict);
217
+
218
+ if( !SDLSKK_Dict_save_user_dict(dict,GETCSTR(filename)) )
219
+ rb_raise(eSDLError,"Couldn't save %s",GETCSTR(filename));
220
+
221
+ return Qnil;
222
+ }
223
+
224
+ static VALUE skk_RomKanaRuleTable_new(VALUE class,VALUE table_file)
225
+ {
226
+ SDLSKK_RomKanaRuleTable* rule_table;
227
+
228
+ rule_table = SDLSKK_RomKanaRuleTable_new( GETCSTR(table_file) );
229
+
230
+ if( rule_table == NULL )
231
+ rb_raise(eSDLError,"Couldn't load %s",GETCSTR(table_file));
232
+
233
+ return Data_Wrap_Struct(class,0,SDLSKK_RomKanaRuleTable_delete,rule_table);
234
+ }
235
+
236
+ static VALUE skk_Keybind_new(VALUE class)
237
+ {
238
+ return Data_Wrap_Struct(class,0,SDLSKK_Keybind_delete,SDLSKK_Keybind_new());
239
+ }
240
+
241
+ static VALUE skk_Keybind_set_key(VALUE obj,VALUE key_str,VALUE cmd_str)
242
+ {
243
+ SDLSKK_Keybind* keybind;
244
+
245
+ Data_Get_Struct(obj,SDLSKK_Keybind,keybind);
246
+ SDLSKK_Keybind_set_key(keybind,GETCSTR(key_str),GETCSTR(cmd_str));
247
+ return Qnil;
248
+ }
249
+
250
+ static VALUE skk_Keybind_set_default_key(VALUE obj)
251
+ {
252
+ SDLSKK_Keybind* keybind;
253
+
254
+ Data_Get_Struct(obj,SDLSKK_Keybind,keybind);
255
+ SDLSKK_Keybind_set_default_key(keybind);
256
+ return Qnil;
257
+ }
258
+
259
+ static VALUE skk_Keybind_unset_key(VALUE obj,VALUE key_str)
260
+ {
261
+ SDLSKK_Keybind* keybind;
262
+
263
+ Data_Get_Struct(obj,SDLSKK_Keybind,keybind);
264
+ SDLSKK_Keybind_unset_key(keybind,GETCSTR(key_str));
265
+ return Qnil;
266
+ }
267
+
268
+ static void defineConstForSDLSKK(void)
269
+ {
270
+ rb_define_const(mSDLSKK,"EUCJP",INT2NUM(SDLSKK_EUCJP));
271
+ rb_define_const(mSDLSKK,"UTF8",INT2NUM(SDLSKK_UTF8));
272
+ rb_define_const(mSDLSKK,"SJIS",INT2NUM(SDLSKK_SJIS));
273
+ }
274
+
275
+ void init_sdlskk(void)
276
+ {
277
+ mSDLSKK = rb_define_module_under(mSDL,"SKK");
278
+ cContext = rb_define_class_under(mSDLSKK,"Context",rb_cObject);
279
+ cDictionary = rb_define_class_under(mSDLSKK,"Dictionary",rb_cObject);
280
+ cRomKanaRuleTable = rb_define_class_under(mSDLSKK,"RomKanaRuleTable",
281
+ rb_cObject);
282
+ cKeybind = rb_define_class_under(mSDLSKK,"Keybind",rb_cObject);
283
+
284
+ rb_define_module_function(mSDLSKK,"encoding=",skk_set_encoding,1);
285
+ rb_define_module_function(mSDLSKK,"encoding",skk_get_encoding,0);
286
+
287
+ rb_define_singleton_method(cContext,"new",skk_Context_new,4);
288
+ rb_define_method(cContext,"input",skk_Context_input_event,1);
289
+ rb_define_method(cContext,"str",skk_Context_get_str,0);
290
+ rb_define_method(cContext,"render_str",skk_Context_render_str,4);
291
+ rb_define_method(cContext,"render_minibuffer_str",skk_Context_render_minibuffer_str,4);
292
+ rb_define_method(cContext,"get_basic_mode",skk_Context_get_basic_mode,0);
293
+ rb_define_method(cContext,"clear",skk_Context_clear,0);
294
+ rb_define_method(cContext,"clear_text",skk_Context_clear_text,0);
295
+
296
+ rb_define_singleton_method(cDictionary,"new",skk_Dictionary_new,0);
297
+ rb_define_method(cDictionary,"load",skk_Dict_load,2);
298
+ rb_define_method(cDictionary,"save",skk_Dict_save,1);
299
+
300
+ rb_define_singleton_method(cRomKanaRuleTable,"new",
301
+ skk_RomKanaRuleTable_new,1);
302
+
303
+ rb_define_singleton_method(cKeybind,"new",skk_Keybind_new,0);
304
+ rb_define_method(cKeybind,"set_key",skk_Keybind_set_key,2);
305
+ rb_define_method(cKeybind,"set_default_key",skk_Keybind_set_default_key,0);
306
+ rb_define_method(cKeybind,"unset_key",skk_Keybind_unset_key,1);
307
+
308
+ SDLSKK_set_error_func(skk_error_handler);
309
+
310
+ defineConstForSDLSKK();
311
+ }
312
+ #endif /* HAVE_SDLSKK */
@@ -0,0 +1,622 @@
1
+ /*
2
+ Ruby/SDL Ruby extension library for SDL
3
+
4
+ Copyright (C) 2001-2007 Ohbayashi Ippei
5
+
6
+ This library is free software; you can redistribute it and/or
7
+ modify it under the terms of the GNU Lesser General Public
8
+ License as published by the Free Software Foundation; either
9
+ version 2.1 of the License, or (at your option) any later version.
10
+
11
+ This library is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ Lesser General Public License for more details.
15
+
16
+ You should have received a copy of the GNU Lesser General Public
17
+ License along with this library; if not, write to the Free Software
18
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ */
20
+ #ifdef HAVE_SGE
21
+
22
+ #include "rubysdl.h"
23
+ #include <sge.h>
24
+
25
+ static VALUE sdl_get_autoLocking(VALUE mod)
26
+ {
27
+ return BOOL(sge_getLock());
28
+ }
29
+
30
+ static VALUE sdl_set_autoLocking(VALUE mod,VALUE bool)
31
+ {
32
+ if(RTEST(bool))
33
+ sge_Lock_ON();
34
+ else
35
+ sge_Lock_OFF();
36
+ return Qnil;
37
+ }
38
+
39
+
40
+ static VALUE sdl_getPixel(VALUE obj,VALUE x,VALUE y)
41
+ {
42
+ SDL_Surface *surface;
43
+ Data_Get_Struct(obj,SDL_Surface,surface);
44
+ return UINT2NUM( sge_GetPixel(surface,NUM2INT(x),NUM2INT(y)) );
45
+ }
46
+ static VALUE sdl_putPixel(VALUE obj,VALUE x,VALUE y,VALUE color)
47
+ {
48
+ SDL_Surface *surface;
49
+ Data_Get_Struct(obj,SDL_Surface,surface);
50
+ sge_PutPixel(surface,NUM2INT(x),NUM2INT(y),VALUE2COLOR(color,surface->format));
51
+ return Qnil;
52
+ }
53
+ static VALUE sdl_drawLine(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,VALUE color)
54
+ {
55
+ SDL_Surface *surface;
56
+ Data_Get_Struct(obj,SDL_Surface,surface);
57
+ sge_Line( surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
58
+ VALUE2COLOR(color,surface->format) );
59
+ return Qnil;
60
+ }
61
+ static VALUE sdl_drawAALine(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,VALUE color)
62
+ {
63
+ SDL_Surface *surface;
64
+ Data_Get_Struct(obj,SDL_Surface,surface);
65
+ sge_AALine( surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
66
+ VALUE2COLOR(color,surface->format) );
67
+ return Qnil;
68
+ }
69
+ static VALUE sdl_drawLineAlpha(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,VALUE color,VALUE alpha)
70
+ {
71
+ SDL_Surface *surface;
72
+ Data_Get_Struct(obj,SDL_Surface,surface);
73
+ sge_LineAlpha( surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
74
+ VALUE2COLOR(color,surface->format), NUM2UINT(alpha) );
75
+ return Qnil;
76
+ }
77
+ static VALUE sdl_drawAALineAlpha(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,VALUE color,VALUE alpha)
78
+ {
79
+ SDL_Surface *surface;
80
+ Data_Get_Struct(obj,SDL_Surface,surface);
81
+ sge_AALineAlpha( surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
82
+ VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
83
+ return Qnil;
84
+ }
85
+
86
+ static VALUE sdl_drawRect(VALUE obj,VALUE x,VALUE y,VALUE w,VALUE h,VALUE color)
87
+ {
88
+ SDL_Surface *surface;
89
+ Data_Get_Struct(obj,SDL_Surface,surface);
90
+ sge_Rect( surface,NUM2INT(x),NUM2INT(y),NUM2INT(x)+NUM2INT(w),
91
+ NUM2INT(y)+NUM2INT(h),VALUE2COLOR(color,surface->format) );
92
+ return Qnil;
93
+ }
94
+ static VALUE sdl_drawRectAlpha(VALUE obj,VALUE x,VALUE y,VALUE w,VALUE h,VALUE color,VALUE alpha)
95
+ {
96
+ SDL_Surface *surface;
97
+ Data_Get_Struct(obj,SDL_Surface,surface);
98
+ sge_RectAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(x)+NUM2INT(w),
99
+ NUM2INT(y)+NUM2INT(h),VALUE2COLOR(color,surface->format),
100
+ NUM2UINT(alpha) );
101
+ return Qnil;
102
+ }
103
+ static VALUE sdl_drawFilledRectAlpha(VALUE obj,VALUE x,VALUE y,VALUE w,VALUE h,VALUE color,VALUE alpha)
104
+ {
105
+ SDL_Surface *surface;
106
+ Data_Get_Struct(obj,SDL_Surface,surface);
107
+ sge_FilledRectAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(x)+NUM2INT(w),
108
+ NUM2INT(y)+NUM2INT(h),VALUE2COLOR(color,surface->format),
109
+ NUM2UINT(alpha) );
110
+ return Qnil;
111
+ }
112
+ static VALUE sdl_drawCircle(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color)
113
+ {
114
+ SDL_Surface *surface;
115
+ Data_Get_Struct(obj,SDL_Surface,surface);
116
+ sge_Circle( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
117
+ VALUE2COLOR(color,surface->format) );
118
+ return Qnil;
119
+ }
120
+ static VALUE sdl_drawAACircle(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color)
121
+ {
122
+ SDL_Surface *surface;
123
+ Data_Get_Struct(obj,SDL_Surface,surface);
124
+ sge_AACircle( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
125
+ VALUE2COLOR(color,surface->format) );
126
+ return Qnil;
127
+ }
128
+ static VALUE sdl_drawCircleAlpha(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color,VALUE alpha)
129
+ {
130
+ SDL_Surface *surface;
131
+ Data_Get_Struct(obj,SDL_Surface,surface);
132
+ sge_CircleAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
133
+ VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
134
+ return Qnil;
135
+ }
136
+ static VALUE sdl_drawAACircleAlpha(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color,
137
+ VALUE alpha)
138
+ {
139
+ SDL_Surface *surface;
140
+ Data_Get_Struct(obj,SDL_Surface,surface);
141
+ sge_AACircleAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
142
+ VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
143
+ return Qnil;
144
+ }
145
+ static VALUE sdl_drawFilledCircle(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color)
146
+ {
147
+ SDL_Surface *surface;
148
+ Data_Get_Struct(obj,SDL_Surface,surface);
149
+ sge_FilledCircle( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
150
+ VALUE2COLOR(color,surface->format) );
151
+ return Qnil;
152
+ }
153
+ static VALUE sdl_drawAAFilledCircle(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color)
154
+ {
155
+ SDL_Surface *surface;
156
+ Data_Get_Struct(obj,SDL_Surface,surface);
157
+ sge_AAFilledCircle( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
158
+ VALUE2COLOR(color,surface->format) );
159
+ return Qnil;
160
+ }
161
+ static VALUE sdl_drawFilledCircleAlpha(VALUE obj,VALUE x,VALUE y,VALUE r,VALUE color,VALUE alpha)
162
+ {
163
+ SDL_Surface *surface;
164
+ Data_Get_Struct(obj,SDL_Surface,surface);
165
+ sge_FilledCircleAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(r),
166
+ VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
167
+ return Qnil;
168
+ }
169
+ static VALUE sdl_drawEllipse(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
170
+ VALUE color)
171
+ {
172
+ SDL_Surface *surface;
173
+ Data_Get_Struct(obj,SDL_Surface,surface);
174
+ sge_Ellipse( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
175
+ VALUE2COLOR(color,surface->format) );
176
+ return Qnil;
177
+ }
178
+ static VALUE sdl_drawAAEllipse(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
179
+ VALUE color)
180
+ {
181
+ SDL_Surface *surface;
182
+ Data_Get_Struct(obj,SDL_Surface,surface);
183
+ sge_AAEllipse( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
184
+ VALUE2COLOR(color,surface->format) );
185
+ return Qnil;
186
+ }
187
+ static VALUE sdl_drawEllipseAlpha(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
188
+ VALUE color,VALUE alpha)
189
+ {
190
+ SDL_Surface *surface;
191
+ Data_Get_Struct(obj,SDL_Surface,surface);
192
+ sge_EllipseAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
193
+ VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
194
+ return Qnil;
195
+ }
196
+ static VALUE sdl_drawAAEllipseAlpha(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
197
+ VALUE color,VALUE alpha)
198
+ {
199
+ SDL_Surface *surface;
200
+ Data_Get_Struct(obj,SDL_Surface,surface);
201
+ sge_AAEllipseAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
202
+ VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
203
+ return Qnil;
204
+ }
205
+ static VALUE sdl_drawFilledEllipse(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
206
+ VALUE color)
207
+ {
208
+ SDL_Surface *surface;
209
+ Data_Get_Struct(obj,SDL_Surface,surface);
210
+ sge_FilledEllipse( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
211
+ VALUE2COLOR(color,surface->format) );
212
+ return Qnil;
213
+ }
214
+ static VALUE sdl_drawAAFilledEllipse(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
215
+ VALUE color)
216
+ {
217
+ SDL_Surface *surface;
218
+ Data_Get_Struct(obj,SDL_Surface,surface);
219
+ sge_AAFilledEllipse( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
220
+ VALUE2COLOR(color,surface->format) );
221
+ return Qnil;
222
+ }
223
+ static VALUE sdl_drawFilledEllipseAlpha(VALUE obj,VALUE x,VALUE y,VALUE rx,VALUE ry,
224
+ VALUE color,VALUE alpha)
225
+ {
226
+ SDL_Surface *surface;
227
+ Data_Get_Struct(obj,SDL_Surface,surface);
228
+ sge_FilledEllipseAlpha( surface,NUM2INT(x),NUM2INT(y),NUM2INT(rx),NUM2INT(ry),
229
+ VALUE2COLOR(color,surface->format),NUM2UINT(alpha) );
230
+ return Qnil;
231
+ }
232
+
233
+ static VALUE sdl_drawBezier(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,
234
+ VALUE x3,VALUE y3,VALUE x4,VALUE y4,
235
+ VALUE level,VALUE color)
236
+ {
237
+ SDL_Surface *surface;
238
+ Data_Get_Struct(obj,SDL_Surface,surface);
239
+ sge_Bezier(surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
240
+ NUM2INT(x3),NUM2INT(y3),NUM2INT(x4),NUM2INT(y4),
241
+ NUM2INT(level),VALUE2COLOR(color,surface->format));
242
+ return Qnil;
243
+ }
244
+
245
+ static VALUE sdl_drawBezierAlpha(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,
246
+ VALUE x3,VALUE y3,VALUE x4,VALUE y4,
247
+ VALUE level,VALUE color,VALUE alpha)
248
+ {
249
+ SDL_Surface *surface;
250
+ Data_Get_Struct(obj,SDL_Surface,surface);
251
+ sge_BezierAlpha(surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
252
+ NUM2INT(x3),NUM2INT(y3),NUM2INT(x4),NUM2INT(y4),
253
+ NUM2INT(level),VALUE2COLOR(color,surface->format),
254
+ NUM2UINT(alpha));
255
+ return Qnil;
256
+ }
257
+
258
+ static VALUE sdl_drawAABezier(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,
259
+ VALUE x3,VALUE y3,VALUE x4,VALUE y4,
260
+ VALUE level,VALUE color)
261
+ {
262
+ SDL_Surface *surface;
263
+ Data_Get_Struct(obj,SDL_Surface,surface);
264
+ sge_AABezier(surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
265
+ NUM2INT(x3),NUM2INT(y3),NUM2INT(x4),NUM2INT(y4),
266
+ NUM2INT(level),VALUE2COLOR(color,surface->format));
267
+ return Qnil;
268
+ }
269
+
270
+ static VALUE sdl_drawAABezierAlpha(VALUE obj,VALUE x1,VALUE y1,VALUE x2,VALUE y2,
271
+ VALUE x3,VALUE y3,VALUE x4,VALUE y4,
272
+ VALUE level,VALUE color,VALUE alpha)
273
+ {
274
+ SDL_Surface *surface;
275
+ Data_Get_Struct(obj,SDL_Surface,surface);
276
+ sge_AABezierAlpha(surface,NUM2INT(x1),NUM2INT(y1),NUM2INT(x2),NUM2INT(y2),
277
+ NUM2INT(x3),NUM2INT(y3),NUM2INT(x4),NUM2INT(y4),
278
+ NUM2INT(level),VALUE2COLOR(color,surface->format),
279
+ NUM2UINT(alpha));
280
+ return Qnil;
281
+ }
282
+
283
+ static VALUE sdl_rotateScaledSurface(VALUE obj,VALUE angle,VALUE scale,VALUE bgcolor)
284
+ {
285
+ SDL_Surface *surface,*result;
286
+ Data_Get_Struct(obj,SDL_Surface,surface);
287
+ result=sge_rotate_scaled_surface(surface,NUM2INT(angle),NUM2DBL(scale),
288
+ VALUE2COLOR(bgcolor,surface->format) );
289
+ if( result==NULL )
290
+ rb_raise( eSDLError,"Couldn't Create Surface: %s",SDL_GetError() );
291
+ return Data_Wrap_Struct(cSurface,0,sdl_freeSurface,result);
292
+ }
293
+ /* doesn't respect ColorKey */
294
+ static VALUE sdl_rotateXYScaled(VALUE mod,VALUE src,VALUE dst,VALUE x,
295
+ VALUE y,VALUE angle,VALUE xscale,
296
+ VALUE yscale)
297
+ {
298
+ SDL_Surface *srcSurface,*dstSurface;
299
+ if( !rb_obj_is_kind_of(src,cSurface) || !rb_obj_is_kind_of(dst,cSurface) )
300
+ rb_raise(rb_eArgError,"type mismatch(expect Surface)");
301
+ Data_Get_Struct(src,SDL_Surface,srcSurface);
302
+ Data_Get_Struct(dst,SDL_Surface,dstSurface);
303
+ sge_rotate_xyscaled(dstSurface,srcSurface,NUM2INT(x),NUM2INT(y),
304
+ NUM2INT(angle),NUM2DBL(xscale),NUM2DBL(yscale));
305
+ return Qnil;
306
+ }
307
+ static VALUE sdl_rotateScaledBlit(VALUE mod,VALUE src,VALUE dst,VALUE x,
308
+ VALUE y,VALUE angle,VALUE scale)
309
+ {
310
+ SDL_Surface *srcSurface,*dstSurface,*tmpSurface;
311
+ SDL_Rect destRect;
312
+ Uint32 colorkey;
313
+ Uint32 flags;
314
+ int result;
315
+
316
+ if( !rb_obj_is_kind_of(src,cSurface) || !rb_obj_is_kind_of(dst,cSurface) )
317
+ rb_raise(rb_eArgError,"type mismatch(expect Surface)");
318
+ Data_Get_Struct(src,SDL_Surface,srcSurface);
319
+ Data_Get_Struct(dst,SDL_Surface,dstSurface);
320
+ colorkey=srcSurface->format->colorkey;
321
+ flags = srcSurface->flags & ( SDL_RLEACCEL|SDL_SRCCOLORKEY );
322
+ tmpSurface = sge_rotate_scaled_surface(srcSurface,NUM2INT(angle),
323
+ NUM2DBL(scale),colorkey);
324
+ if( tmpSurface==NULL )
325
+ rb_raise(eSDLError,"SDL memory allocate failed :%s",SDL_GetError());
326
+ SDL_SetColorKey(tmpSurface,flags,colorkey);
327
+ destRect.x=NUM2INT(x)-tmpSurface->h/2;
328
+ destRect.y=NUM2INT(y)-tmpSurface->w/2;
329
+ result = SDL_BlitSurface(tmpSurface,NULL,dstSurface,&destRect);
330
+ SDL_FreeSurface(tmpSurface);
331
+ if( result == -1 ){
332
+ rb_raise(eSDLError,"SDL_BlitSurface fail: %s",SDL_GetError());
333
+ }
334
+ return INT2NUM(result);
335
+ }
336
+
337
+ static VALUE sdl_transform(VALUE mod,VALUE src,VALUE dst,VALUE angle,
338
+ VALUE xscale,VALUE yscale,VALUE px,VALUE py,
339
+ VALUE qx,VALUE qy,VALUE flags)
340
+ {
341
+ SDL_Surface *srcSurface,*dstSurface;
342
+ if( !rb_obj_is_kind_of(src,cSurface) || !rb_obj_is_kind_of(dst,cSurface) )
343
+ rb_raise(rb_eArgError,"type mismatch(expect Surface)");
344
+ Data_Get_Struct(src,SDL_Surface,srcSurface);
345
+ Data_Get_Struct(dst,SDL_Surface,dstSurface);
346
+ sge_transform(srcSurface,dstSurface,NUM2DBL(angle),NUM2DBL(xscale),
347
+ NUM2DBL(yscale),NUM2INT(px),NUM2INT(py),NUM2INT(qx),
348
+ NUM2INT(qy),NUM2UINT(flags));
349
+ return Qnil;
350
+ }
351
+
352
+ static VALUE sdl_transformSurface(VALUE obj,VALUE bgcolor,VALUE angle,
353
+ VALUE xscale,VALUE yscale,VALUE flags)
354
+ {
355
+ SDL_Surface *surface,*result;
356
+ Data_Get_Struct(obj,SDL_Surface,surface);
357
+ result = sge_transform_surface(surface,VALUE2COLOR(bgcolor,surface->format),
358
+ NUM2DBL(angle),NUM2DBL(xscale),
359
+ NUM2DBL(yscale),NUM2UINT(flags));
360
+ if( result==NULL )
361
+ rb_raise( eSDLError,"Couldn't Create Surface: %s",SDL_GetError() );
362
+ return Data_Wrap_Struct(cSurface,0,sdl_freeSurface,result);
363
+ }
364
+
365
+ static VALUE sdl_makeCollisionMap(VALUE obj)
366
+ {
367
+ sge_cdata * cdata;
368
+ SDL_Surface *surface;
369
+ Data_Get_Struct(obj,SDL_Surface,surface);
370
+ cdata = sge_make_cmap(surface);
371
+ if( cdata==NULL )
372
+ rb_raise( eSDLError,"Couldn't Create CollisionMap: %s",SDL_GetError() );
373
+ return Data_Wrap_Struct(cCollisionMap,0,sge_destroy_cmap,cdata);
374
+ }
375
+
376
+ static sge_cdata * value_to_collision_map(VALUE value)
377
+ {
378
+ sge_cdata * cdata;
379
+ if( !rb_obj_is_kind_of(value, cCollisionMap) )
380
+ rb_raise(rb_eArgError,"type mismatch(expect CollisionMap)");
381
+ Data_Get_Struct(value, sge_cdata, cdata);
382
+ return cdata;
383
+ }
384
+
385
+ static VALUE sdl_classBoundingBoxCheck(VALUE class,
386
+ VALUE x1, VALUE y1, VALUE w1, VALUE h1,
387
+ VALUE x2, VALUE y2, VALUE w2, VALUE h2)
388
+ {
389
+ return BOOL(_sge_bbcheck
390
+ ((Sint16) NUM2INT(x1), (Sint16) NUM2INT(y1),
391
+ (Sint16) NUM2INT(w1), (Sint16) NUM2INT(h1),
392
+ (Sint16) NUM2INT(x2), (Sint16) NUM2INT(y2),
393
+ (Sint16) NUM2INT(w2), (Sint16) NUM2INT(h2)));
394
+ }
395
+
396
+ static VALUE sdl_collisionCheck(VALUE collisionMap1, VALUE x1, VALUE y1,
397
+ VALUE collisionMap2, VALUE x2, VALUE y2)
398
+ {
399
+ sge_cdata * cdata1 = value_to_collision_map(collisionMap1);
400
+ sge_cdata * cdata2 = value_to_collision_map(collisionMap2);
401
+ int collided;
402
+ collided = sge_cmcheck
403
+ (cdata1, (Sint16) NUM2INT(x1), (Sint16) NUM2INT(y1),
404
+ cdata2, (Sint16) NUM2INT(x2), (Sint16) NUM2INT(y2));
405
+ if(!collided)
406
+ return Qnil;
407
+ return rb_ary_new3(2, INT2NUM(sge_get_cx()), INT2NUM(sge_get_cy()));
408
+ }
409
+
410
+ static VALUE sdl_boundingBoxCheck(VALUE collisionMap1, VALUE x1, VALUE y1,
411
+ VALUE collisionMap2, VALUE x2, VALUE y2)
412
+ {
413
+ sge_cdata * cdata1 = value_to_collision_map(collisionMap1);
414
+ sge_cdata * cdata2 = value_to_collision_map(collisionMap2);
415
+ return BOOL(sge_bbcheck
416
+ (cdata1, (Sint16) NUM2INT(x1), (Sint16) NUM2INT(y1),
417
+ cdata2, (Sint16) NUM2INT(x2), (Sint16) NUM2INT(y2)));
418
+ }
419
+
420
+ static VALUE sdl_set_cdata(VALUE obj, VALUE vx, VALUE vy, VALUE vw, VALUE vh)
421
+ {
422
+ sge_cdata * cdata = value_to_collision_map(obj);
423
+ Sint16 x, y, w, h;
424
+
425
+ x = NUM2INT(vx);
426
+ y = NUM2INT(vy);
427
+ w = NUM2INT(vw);
428
+ h = NUM2INT(vh);
429
+ if( x < 0 || y < 0 || x+w > cdata->w || y+h > cdata->h ){
430
+ rb_raise(eSDLError,"Couldn't clear that area");
431
+ }
432
+ sge_set_cdata(cdata, x, y, w, h );
433
+ return Qnil;
434
+ }
435
+
436
+ static VALUE sdl_unset_cdata(VALUE obj, VALUE vx, VALUE vy, VALUE vw, VALUE vh)
437
+ {
438
+ sge_cdata * cdata = value_to_collision_map(obj);
439
+ Sint16 x, y, w, h;
440
+
441
+ x = NUM2INT(vx);
442
+ y = NUM2INT(vy);
443
+ w = NUM2INT(vw);
444
+ h = NUM2INT(vh);
445
+ if( x < 0 || y < 0 || x+w > cdata->w || y+h > cdata->h ){
446
+ rb_raise(eSDLError,"Couldn't clear that area");
447
+ }
448
+ sge_unset_cdata(cdata, x, y, w, h);
449
+ return Qnil;
450
+ }
451
+
452
+ static VALUE sdl_w_cdata(VALUE obj)
453
+ {
454
+ sge_cdata * cdata = value_to_collision_map(obj);
455
+ return INT2FIX(cdata->w);
456
+ }
457
+
458
+ static VALUE sdl_h_cdata(VALUE obj)
459
+ {
460
+ sge_cdata * cdata = value_to_collision_map(obj);
461
+ return INT2FIX(cdata->h);
462
+ }
463
+
464
+ /* bitmap font */
465
+ static void sdl_bf_close(sge_bmpFont* font)
466
+ {
467
+ if(!rubysdl_is_quit()){
468
+ sge_BF_CloseFont(font);
469
+ }
470
+ }
471
+
472
+ static VALUE sdl_bf_open(VALUE obj, VALUE file, VALUE flags)
473
+ {
474
+ sge_bmpFont* font;
475
+
476
+ font = sge_BF_OpenFont(GETCSTR(file),NUM2UINT(flags));
477
+ if( font == NULL )
478
+ rb_raise(eSDLError,"Couldn't open font: %s", GETCSTR(file));
479
+
480
+ return Data_Wrap_Struct(cBMFont,0,sdl_bf_close,font);
481
+ }
482
+
483
+ static VALUE sdl_bf_setColor(VALUE obj,VALUE r,VALUE g,VALUE b)
484
+ {
485
+ sge_bmpFont* font;
486
+ Data_Get_Struct(obj,sge_bmpFont,font);
487
+
488
+ sge_BF_SetColor(font,NUM2UINT(r),NUM2UINT(g),NUM2UINT(b));
489
+ return Qnil;
490
+ }
491
+
492
+ static VALUE sdl_bf_getHeight(VALUE obj)
493
+ {
494
+ sge_bmpFont* font;
495
+ Data_Get_Struct(obj,sge_bmpFont,font);
496
+ return INT2FIX(sge_BF_GetHeight(font));
497
+ }
498
+
499
+ static VALUE sdl_bf_getWidth(VALUE obj)
500
+ {
501
+ sge_bmpFont* font;
502
+ Data_Get_Struct(obj,sge_bmpFont,font);
503
+ return INT2FIX(sge_BF_GetWidth(font));
504
+ }
505
+
506
+ static VALUE sdl_bf_textSize(VALUE obj, VALUE text)
507
+ {
508
+ sge_bmpFont* font;
509
+ SDL_Rect rect;
510
+ Data_Get_Struct(obj,sge_bmpFont,font);
511
+ rect = sge_BF_TextSize(font, GETCSTR(text));
512
+ return rb_ary_new3(2, INT2FIX(rect.w), INT2FIX(rect.h));
513
+ }
514
+
515
+ static VALUE sdl_bf_textout(VALUE obj,VALUE surface,VALUE string,
516
+ VALUE x, VALUE y)
517
+ {
518
+ sge_bmpFont* font;
519
+ SDL_Surface* target;
520
+
521
+ if(!rb_obj_is_kind_of(surface,cSurface))
522
+ rb_raise( rb_eArgError,"type mismatch(expect Surface)" );
523
+ Data_Get_Struct(obj,sge_bmpFont,font);
524
+ Data_Get_Struct(surface,SDL_Surface,target);
525
+ sge_BF_textout(target,font,GETCSTR(string),NUM2INT(x),NUM2INT(y));
526
+ return Qnil;
527
+ }
528
+
529
+ static void defineConstForSGE()
530
+ {
531
+ rb_define_const(mSDL,"TRANSFORM_AA",UINT2NUM(SGE_TAA));
532
+ rb_define_const(mSDL,"TRANSFORM_SAFE",UINT2NUM(SGE_TSAFE));
533
+ rb_define_const(mSDL,"TRANSFORM_TMAP",UINT2NUM(SGE_TTMAP));
534
+
535
+ rb_define_const(cBMFont,"TRANSPARENT",UINT2NUM(SGE_BFTRANSP));
536
+ rb_define_const(cBMFont,"NOCONVERT",UINT2NUM(SGE_BFNOCONVERT));
537
+ rb_define_const(cBMFont,"SFONT",UINT2NUM(SGE_BFSFONT));
538
+ rb_define_const(cBMFont,"PALETTE",UINT2NUM(SGE_BFPALETTE));
539
+ }
540
+
541
+ void init_sge_video()
542
+ {
543
+ sge_Update_OFF();
544
+ sge_Lock_ON();
545
+
546
+ rb_define_module_function(mSDL,"autoLock",sdl_get_autoLocking,0);
547
+ rb_define_module_function(mSDL,"autoLock=",sdl_set_autoLocking,1);
548
+
549
+ rb_define_method(cSurface,"getPixel",sdl_getPixel,2);
550
+ rb_define_method(cSurface,"putPixel",sdl_putPixel,3);
551
+ rb_define_method(cSurface,"[]",sdl_getPixel,2);
552
+ rb_define_method(cSurface,"[]=",sdl_putPixel,3);
553
+
554
+ /* primitive drawing */
555
+ rb_define_method(cSurface,"drawLine",sdl_drawLine,5);
556
+ rb_define_method(cSurface,"drawRect",sdl_drawRect,5);
557
+ rb_define_method(cSurface,"drawCircle",sdl_drawCircle,4);
558
+ rb_define_method(cSurface,"drawFilledCircle",sdl_drawFilledCircle,4);
559
+ rb_define_method(cSurface,"drawEllispe",sdl_drawEllipse,5);
560
+ rb_define_method(cSurface,"drawFilledEllispe",sdl_drawFilledEllipse,5);
561
+ rb_define_method(cSurface,"drawEllipse",sdl_drawEllipse,5);
562
+ rb_define_method(cSurface,"drawFilledEllipse",sdl_drawFilledEllipse,5);
563
+ rb_define_method(cSurface,"drawBezier",sdl_drawBezier,10);
564
+
565
+ /* antialiased primitive drawing */
566
+ rb_define_method(cSurface,"drawAALine",sdl_drawAALine,5);
567
+ rb_define_method(cSurface,"drawAACircle",sdl_drawAACircle,4);
568
+ rb_define_method(cSurface,"drawAAFilledCircle",sdl_drawAAFilledCircle,4);
569
+ rb_define_method(cSurface,"drawAAEllipse",sdl_drawAAEllipse,5);
570
+ rb_define_method(cSurface,"drawAAFilledEllipse",sdl_drawAAFilledEllipse,5);
571
+ rb_define_method(cSurface,"drawAABezier",sdl_drawAABezier,10);
572
+
573
+ /* primitive drawing with alpha */
574
+ rb_define_method(cSurface,"drawLineAlpha",sdl_drawLineAlpha,6);
575
+ rb_define_method(cSurface,"drawRectAlpha",sdl_drawRectAlpha,6);
576
+ rb_define_method(cSurface,"drawFilledRectAlpha",sdl_drawFilledRectAlpha,6);
577
+ rb_define_method(cSurface,"drawCircleAlpha",sdl_drawCircleAlpha,5);
578
+ rb_define_method(cSurface,"drawFilledCircleAlpha",sdl_drawFilledCircleAlpha,5);
579
+ rb_define_method(cSurface,"drawEllipseAlpha",sdl_drawEllipseAlpha,6);
580
+ rb_define_method(cSurface,"drawFilledEllipseAlpha",sdl_drawFilledEllipseAlpha,6);
581
+ rb_define_method(cSurface,"drawBezierAlpha",sdl_drawBezierAlpha,11);
582
+
583
+ /* antialiased primitive drawing with alpha */
584
+ rb_define_method(cSurface,"drawAALineAlpha",sdl_drawAALineAlpha,6);
585
+ rb_define_method(cSurface,"drawAACircleAlpha",sdl_drawAACircleAlpha,5);
586
+ rb_define_method(cSurface,"drawAAEllipseAlpha",sdl_drawAAEllipseAlpha,6);
587
+ rb_define_method(cSurface,"drawAABezierAlpha",sdl_drawAABezierAlpha,11);
588
+
589
+ /* rotation and scaling */
590
+ rb_define_method(cSurface,"rotateScaledSurface",sdl_rotateScaledSurface,3);
591
+ rb_define_module_function(mSDL,"rotateScaledBlit",sdl_rotateScaledBlit,6);
592
+ rb_define_module_function(mSDL,"rotateXYScaled",sdl_rotateXYScaled,7);
593
+
594
+ rb_define_module_function(mSDL,"transform",sdl_transform,10);
595
+ rb_define_method(cSurface,"transformSurface",sdl_transformSurface,5);
596
+
597
+ /* collision detection */
598
+ rb_define_method(cSurface,"makeCollisionMap", sdl_makeCollisionMap, 0);
599
+
600
+ cCollisionMap = rb_define_class_under(mSDL,"CollisionMap",rb_cObject);
601
+ rb_define_singleton_method(cCollisionMap,"boundingBoxCheck",
602
+ sdl_classBoundingBoxCheck, 8);
603
+ rb_define_method(cCollisionMap,"collisionCheck", sdl_collisionCheck, 5);
604
+ rb_define_method(cCollisionMap,"boundingBoxCheck", sdl_boundingBoxCheck, 5);
605
+ rb_define_method(cCollisionMap,"clear", sdl_unset_cdata, 4);
606
+ rb_define_method(cCollisionMap,"set", sdl_set_cdata, 4);
607
+ rb_define_method(cCollisionMap,"w", sdl_w_cdata, 0);
608
+ rb_define_method(cCollisionMap,"h", sdl_h_cdata, 0);
609
+
610
+ /* bitmap font */
611
+ cBMFont = rb_define_class_under(mSDL,"BMFont",rb_cObject);
612
+ rb_define_singleton_method(cBMFont,"open",sdl_bf_open,2);
613
+
614
+ rb_define_method(cBMFont,"setColor",sdl_bf_setColor,3);
615
+ rb_define_method(cBMFont,"height",sdl_bf_getHeight,0);
616
+ rb_define_method(cBMFont,"width",sdl_bf_getWidth,0);
617
+ rb_define_method(cBMFont,"textSize",sdl_bf_textSize, 1);
618
+ rb_define_method(cBMFont,"textout",sdl_bf_textout,4);
619
+
620
+ defineConstForSGE();
621
+ }
622
+ #endif /* HAVE_SGE */