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,346 @@
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
+ void eventCheck(int pred,char *msg)
23
+ {
24
+ if(!pred)
25
+ rb_raise(eSDLError,"this event is not %s event",msg) ;
26
+ }
27
+
28
+ static VALUE createEventObject(VALUE class)
29
+ {
30
+ SDL_Event *event;
31
+
32
+ return Data_Make_Struct(class,SDL_Event,0,free,event);
33
+ }
34
+
35
+ static VALUE sdl_pollEvent(VALUE obj)
36
+ {
37
+ SDL_Event *event;
38
+
39
+ Data_Get_Struct(obj,SDL_Event,event);
40
+ return INT2NUM(SDL_PollEvent(event));
41
+ }
42
+ static VALUE sdl_waitEvent(VALUE obj)
43
+ {
44
+ SDL_Event *event;
45
+
46
+ Data_Get_Struct(obj,SDL_Event,event);
47
+ if( SDL_WaitEvent(event)==0 )
48
+ rb_raise(eSDLError,"SDL_WaitEvent Failed :%s",SDL_GetError());
49
+ return Qnil;
50
+ }
51
+
52
+ static VALUE sdl_eventType(VALUE obj)
53
+ {
54
+ SDL_Event *event;
55
+
56
+ Data_Get_Struct(obj,SDL_Event,event);
57
+ return INT2FIX(event->type);
58
+ }
59
+
60
+ /* --KeyboardEvent-- */
61
+ static VALUE sdl_eventKeyPressed(VALUE obj)
62
+ {
63
+ SDL_Event *event;
64
+
65
+ Data_Get_Struct(obj,SDL_Event,event);
66
+ eventCheck((event->type == SDL_KEYDOWN)||(event->type == SDL_KEYUP),"key");
67
+ if( event->key.state==SDL_PRESSED )
68
+ return Qtrue;
69
+ else
70
+ return Qfalse;
71
+ }
72
+ static VALUE sdl_eventKeyMod(VALUE obj)
73
+ {
74
+ SDL_Event *event;
75
+
76
+ Data_Get_Struct(obj,SDL_Event,event);
77
+ eventCheck((event->type == SDL_KEYDOWN)||(event->type == SDL_KEYUP),"key");
78
+ return INT2NUM(event->key.keysym.mod);
79
+ }
80
+ static VALUE sdl_eventKeySym(VALUE obj)
81
+ {
82
+ SDL_Event *event;
83
+
84
+ Data_Get_Struct(obj,SDL_Event,event);
85
+ eventCheck((event->type == SDL_KEYDOWN)||(event->type == SDL_KEYUP),"key");
86
+ return INT2FIX(event->key.keysym.sym);
87
+ }
88
+
89
+ /* --ActiveEvent-- */
90
+ static VALUE sdl_eventActiveGained(VALUE obj)
91
+ {
92
+ SDL_Event *event;
93
+
94
+ Data_Get_Struct(obj,SDL_Event,event);
95
+ eventCheck( event->type == SDL_ACTIVEEVENT , "active" );
96
+ return (event->active.gain)?Qtrue:Qfalse;
97
+ }
98
+ static VALUE sdl_eventActiveState(VALUE obj)
99
+ {
100
+ SDL_Event *event;
101
+
102
+ Data_Get_Struct(obj,SDL_Event,event);
103
+ eventCheck( event->type == SDL_ACTIVEEVENT , "active" );
104
+ return INT2NUM(event->active.state);
105
+ }
106
+
107
+ /* --MouseMotionEvent-- */
108
+ static VALUE sdl_eventMouseX(VALUE obj)
109
+ {
110
+ SDL_Event *event;
111
+
112
+ Data_Get_Struct(obj,SDL_Event,event);
113
+ switch (event->type){
114
+ case SDL_MOUSEMOTION:
115
+ return INT2NUM(event->motion.x);
116
+ case SDL_MOUSEBUTTONUP:
117
+ case SDL_MOUSEBUTTONDOWN:
118
+ return INT2NUM(event->button.x);
119
+ default:
120
+ eventCheck(0,"mouse"); /* raise exception */
121
+ }
122
+ return Qnil; /* never reach */
123
+ }
124
+ static VALUE sdl_eventMouseY(VALUE obj)
125
+ {
126
+ SDL_Event *event;
127
+
128
+ Data_Get_Struct(obj,SDL_Event,event);
129
+ switch (event->type){
130
+ case SDL_MOUSEMOTION:
131
+ return INT2NUM(event->motion.y);
132
+ case SDL_MOUSEBUTTONUP:
133
+ case SDL_MOUSEBUTTONDOWN:
134
+ return INT2NUM(event->button.y);
135
+ default:
136
+ eventCheck(0,"mouse"); /* raise exception */
137
+ }
138
+ return Qnil; /* never reach */
139
+ }
140
+ static VALUE sdl_eventMouseXrel(VALUE obj)
141
+ {
142
+ SDL_Event *event;
143
+
144
+ Data_Get_Struct(obj,SDL_Event,event);
145
+ eventCheck(event->type==SDL_MOUSEMOTION,"mouse motion");
146
+ return INT2NUM(event->motion.xrel);
147
+ }
148
+ static VALUE sdl_eventMouseYrel(VALUE obj)
149
+ {
150
+ SDL_Event *event;
151
+
152
+ Data_Get_Struct(obj,SDL_Event,event);
153
+ eventCheck(event->type==SDL_MOUSEMOTION,"mouse motion");
154
+ return INT2NUM(event->motion.yrel);
155
+ }
156
+
157
+ /* --SDL_MouseButtonEvent-- */
158
+ static VALUE sdl_eventMouseButton(VALUE obj)
159
+ {
160
+ SDL_Event *event;
161
+
162
+ Data_Get_Struct(obj,SDL_Event,event);
163
+ eventCheck( (event->type==SDL_MOUSEBUTTONUP)||
164
+ (event->type==SDL_MOUSEBUTTONDOWN) , "mouse button" );
165
+ return INT2NUM( event->button.button );
166
+ }
167
+ static VALUE sdl_eventMousePressed(VALUE obj)
168
+ {
169
+ SDL_Event *event;
170
+
171
+ Data_Get_Struct(obj,SDL_Event,event);
172
+ eventCheck( (event->type==SDL_MOUSEBUTTONUP)||
173
+ ( event->type==SDL_MOUSEBUTTONDOWN) , "mouse button" );
174
+ return (event->button.state==SDL_PRESSED)?Qtrue:Qfalse;
175
+ }
176
+
177
+ static VALUE sdl_eventInfo(VALUE obj)
178
+ {
179
+ SDL_Event *event;
180
+
181
+ Data_Get_Struct(obj,SDL_Event,event);
182
+ switch(event->type){
183
+ case SDL_ACTIVEEVENT:
184
+ return rb_ary_new3(3,INT2FIX(SDL_ACTIVEEVENT),BOOL(event->active.gain),
185
+ INT2FIX(event->active.state));
186
+ case SDL_KEYDOWN:
187
+ case SDL_KEYUP:
188
+ return rb_ary_new3( 4, INT2FIX(event->type),
189
+ BOOL(event->key.state==SDL_PRESSED),
190
+ INT2FIX(event->key.keysym.sym),
191
+ UINT2NUM(event->key.keysym.mod)
192
+ );
193
+ case SDL_MOUSEMOTION:
194
+ return rb_ary_new3( 6, INT2FIX(SDL_MOUSEMOTION),
195
+ INT2FIX(event->motion.state),
196
+ INT2FIX(event->motion.x),
197
+ INT2FIX(event->motion.y),
198
+ INT2FIX(event->motion.xrel),
199
+ INT2FIX(event->motion.yrel)
200
+ );
201
+ case SDL_MOUSEBUTTONDOWN:
202
+ case SDL_MOUSEBUTTONUP:
203
+ return rb_ary_new3( 5, INT2FIX(event->type),
204
+ INT2FIX(event->button.button),
205
+ BOOL(event->button.state==SDL_PRESSED),
206
+ INT2FIX(event->button.x),
207
+ INT2FIX(event->button.y)
208
+ );
209
+ case SDL_JOYAXISMOTION:
210
+ return rb_ary_new3( 4, INT2FIX(SDL_JOYAXISMOTION),
211
+ INT2FIX(event->jaxis.which),
212
+ INT2FIX(event->jaxis.axis),
213
+ INT2FIX(event->jaxis.value)
214
+ );
215
+ case SDL_JOYBALLMOTION:
216
+ return rb_ary_new3( 5, INT2FIX(SDL_JOYBALLMOTION),
217
+ INT2FIX(event->jball.which),
218
+ INT2FIX(event->jball.ball),
219
+ INT2FIX(event->jball.xrel),
220
+ INT2FIX(event->jball.yrel)
221
+ );
222
+ case SDL_JOYHATMOTION:
223
+ return rb_ary_new3( 4, INT2FIX(SDL_JOYHATMOTION),
224
+ INT2FIX(event->jhat.which),
225
+ INT2FIX(event->jhat.hat),
226
+ INT2FIX(event->jhat.value)
227
+ );
228
+ case SDL_JOYBUTTONDOWN:
229
+ case SDL_JOYBUTTONUP:
230
+ return rb_ary_new3( 4, INT2FIX(event->type),
231
+ INT2FIX(event->jbutton.which),
232
+ INT2FIX(event->jbutton.button),
233
+ BOOL(event->jbutton.state==SDL_PRESSED)
234
+ );
235
+ case SDL_QUIT:
236
+ return rb_ary_new3( 1, INT2FIX(SDL_QUIT));
237
+ case SDL_SYSWMEVENT:
238
+ return rb_ary_new3( 1, INT2FIX(SDL_SYSWMEVENT));
239
+ case SDL_VIDEORESIZE:
240
+ return rb_ary_new3( 3, INT2FIX(SDL_VIDEORESIZE),
241
+ INT2FIX(event->resize.w),
242
+ INT2FIX(event->resize.h)
243
+ );
244
+ }
245
+ return Qnil;
246
+ }
247
+
248
+ static VALUE sdl_getAppState(VALUE class)
249
+ {
250
+ return INT2FIX(SDL_GetAppState());
251
+ }
252
+
253
+ static VALUE sdl_enableUNICODE(VALUE class)
254
+ {
255
+ SDL_EnableUNICODE(1);
256
+ return Qnil;
257
+ }
258
+ static VALUE sdl_disableUNICODE(VALUE class)
259
+ {
260
+ SDL_EnableUNICODE(0);
261
+ return Qnil;
262
+ }
263
+ static VALUE sdl_is_enableUNICODE(VALUE class)
264
+ {
265
+ return BOOL(SDL_EnableUNICODE(-1));
266
+ }
267
+
268
+ static void defineConstForEvent()
269
+ {
270
+ rb_define_const(cEvent,"NOEVENT",INT2NUM(SDL_NOEVENT));
271
+ rb_define_const(cEvent,"ACTIVEEVENT",INT2NUM(SDL_ACTIVEEVENT));
272
+ rb_define_const(cEvent,"KEYDOWN",INT2NUM(SDL_KEYDOWN));
273
+ rb_define_const(cEvent,"KEYUP",INT2NUM(SDL_KEYUP));
274
+ rb_define_const(cEvent,"MOUSEMOTION",INT2NUM(SDL_MOUSEMOTION));
275
+ rb_define_const(cEvent,"MOUSEBUTTONDOWN",INT2NUM(SDL_MOUSEBUTTONDOWN));
276
+ rb_define_const(cEvent,"MOUSEBUTTONUP",INT2NUM(SDL_MOUSEBUTTONUP));
277
+ rb_define_const(cEvent,"JOYAXISMOTION",INT2NUM(SDL_JOYAXISMOTION));
278
+ rb_define_const(cEvent,"JOYBALLMOTION",INT2NUM(SDL_JOYBALLMOTION));
279
+ rb_define_const(cEvent,"JOYHATMOTION",INT2NUM(SDL_JOYHATMOTION));
280
+ rb_define_const(cEvent,"JOYBUTTONDOWN",INT2NUM(SDL_JOYBUTTONDOWN));
281
+ rb_define_const(cEvent,"JOYBUTTONUP",INT2NUM(SDL_JOYBUTTONUP));
282
+ rb_define_const(cEvent,"QUIT",INT2NUM(SDL_QUIT));
283
+ rb_define_const(cEvent,"SYSWMEVENT",INT2NUM(SDL_SYSWMEVENT));
284
+ rb_define_const(cEvent,"EVENT_RESERVEDA",INT2NUM(SDL_EVENT_RESERVEDA));
285
+ rb_define_const(cEvent,"EVENT_RESERVEDB",INT2NUM(SDL_EVENT_RESERVEDB));
286
+ rb_define_const(cEvent,"VIDEORESIZE",INT2NUM(SDL_VIDEORESIZE));
287
+ #if SDL_VERSION_ATLEAST(1,2,0)
288
+ rb_define_const(cEvent,"VIDEOEXPOSE",INT2NUM(SDL_VIDEOEXPOSE));
289
+ #else
290
+ rb_define_const(cEvent,"EVENT_RESERVED1",INT2NUM(SDL_EVENT_RESERVED1));
291
+ #endif
292
+ rb_define_const(cEvent,"EVENT_RESERVED2",INT2NUM(SDL_EVENT_RESERVED2));
293
+ rb_define_const(cEvent,"EVENT_RESERVED3",INT2NUM(SDL_EVENT_RESERVED3));
294
+ rb_define_const(cEvent,"EVENT_RESERVED4",INT2NUM(SDL_EVENT_RESERVED4));
295
+ rb_define_const(cEvent,"EVENT_RESERVED5",INT2NUM(SDL_EVENT_RESERVED5));
296
+ rb_define_const(cEvent,"EVENT_RESERVED6",INT2NUM(SDL_EVENT_RESERVED6));
297
+ rb_define_const(cEvent,"EVENT_RESERVED7",INT2NUM(SDL_EVENT_RESERVED7));
298
+ /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
299
+ rb_define_const(cEvent,"USEREVENT",INT2NUM(SDL_USEREVENT));
300
+ /* This last event is only for bounding internal arrays
301
+ It is the number of bits in the event mask datatype -- Uint32
302
+ */
303
+ rb_define_const(cEvent,"NUMEVENTS",INT2NUM(SDL_NUMEVENTS));
304
+
305
+ /* The available application states */
306
+ rb_define_const(cEvent,"APPMOUSEFOCUS",UINT2NUM(SDL_APPMOUSEFOCUS));
307
+ rb_define_const(cEvent,"APPINPUTFOCUS",UINT2NUM(SDL_APPINPUTFOCUS));
308
+ rb_define_const(cEvent,"APPACTIVE",UINT2NUM(SDL_APPACTIVE));
309
+
310
+ }
311
+
312
+
313
+ void init_event()
314
+ {
315
+ cEvent = rb_define_class_under(mSDL,"Event",rb_cObject);
316
+ rb_define_singleton_method(cEvent,"new",createEventObject,0);
317
+
318
+ rb_define_singleton_method(cEvent,"appState",sdl_getAppState,0);
319
+ rb_define_singleton_method(cEvent,"enableUNICODE",sdl_enableUNICODE,0);
320
+ rb_define_singleton_method(cEvent,"disableUNICODE",sdl_disableUNICODE,0);
321
+ rb_define_singleton_method(cEvent,"enableUNICODE?",sdl_is_enableUNICODE,0);
322
+
323
+ rb_define_method(cEvent,"poll",sdl_pollEvent,0);
324
+ rb_define_method(cEvent,"wait",sdl_waitEvent,0);
325
+
326
+ rb_define_method(cEvent,"type",sdl_eventType,0);
327
+
328
+ rb_define_method(cEvent,"keyPress?",sdl_eventKeyPressed,0);
329
+ rb_define_method(cEvent,"keySym",sdl_eventKeySym,0);
330
+ rb_define_method(cEvent,"keyMod",sdl_eventKeyMod,0);
331
+
332
+ rb_define_method(cEvent,"gain?",sdl_eventActiveGained,0);
333
+ rb_define_method(cEvent,"appState",sdl_eventActiveState,0);
334
+
335
+ rb_define_method(cEvent,"mouseX",sdl_eventMouseX,0);
336
+ rb_define_method(cEvent,"mouseY",sdl_eventMouseY,0);
337
+ rb_define_method(cEvent,"mouseXrel",sdl_eventMouseXrel,0);
338
+ rb_define_method(cEvent,"mouseYrel",sdl_eventMouseYrel,0);
339
+
340
+ rb_define_method(cEvent,"mouseButton",sdl_eventMouseButton,0);
341
+ rb_define_method(cEvent,"mousePress?",sdl_eventMousePressed,0);
342
+
343
+ rb_define_method(cEvent,"info",sdl_eventInfo,0);
344
+ defineConstForEvent();
345
+
346
+ }
@@ -0,0 +1,417 @@
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
+
21
+ #ifdef DEF_EVENT2
22
+
23
+ #include "rubysdl.h"
24
+
25
+ typedef VALUE (*createEventObjFunc)(SDL_Event *);
26
+ static createEventObjFunc createEventObj[SDL_NUMEVENTS];
27
+
28
+ static VALUE createNoEvent(SDL_Event *event)
29
+ {
30
+ return Qnil;
31
+ }
32
+
33
+ static VALUE createActiveEvent(SDL_Event *event)
34
+ {
35
+ VALUE obj=rb_obj_alloc(cActiveEvent);
36
+ rb_iv_set(obj,"@gain",BOOL(event->active.gain));
37
+ rb_iv_set(obj,"@state",INT2FIX(event->active.state));
38
+ return obj;
39
+ }
40
+
41
+ static VALUE createKeyEvent(VALUE obj,SDL_Event *event)
42
+ {
43
+ rb_iv_set(obj,"@press",BOOL(event->key.state==SDL_PRESSED));
44
+ rb_iv_set(obj,"@sym",INT2FIX(event->key.keysym.sym));
45
+ rb_iv_set(obj,"@mod",UINT2NUM(event->key.keysym.mod));
46
+ rb_iv_set(obj,"@unicode",UINT2NUM(event->key.keysym.unicode));
47
+ return obj;
48
+ }
49
+
50
+ static VALUE createKeyDownEvent(SDL_Event *event)
51
+ {
52
+ VALUE obj=rb_obj_alloc(cKeyDownEvent);
53
+ return createKeyEvent(obj,event);
54
+ }
55
+
56
+ static VALUE createKeyUpEvent(SDL_Event *event)
57
+ {
58
+ VALUE obj=rb_obj_alloc(cKeyUpEvent);
59
+ return createKeyEvent(obj,event);
60
+ }
61
+
62
+ static VALUE createMouseMotionEvent(SDL_Event *event)
63
+ {
64
+ VALUE obj=rb_obj_alloc(cMouseMotionEvent);
65
+ rb_iv_set(obj,"@state",INT2FIX(event->motion.state));
66
+ rb_iv_set(obj,"@x",INT2FIX(event->motion.x));
67
+ rb_iv_set(obj,"@y",INT2FIX(event->motion.y));
68
+ rb_iv_set(obj,"@xrel",INT2FIX(event->motion.xrel));
69
+ rb_iv_set(obj,"@yrel",INT2FIX(event->motion.yrel));
70
+ return obj;
71
+ }
72
+
73
+ static VALUE createMouseButtonEvent(VALUE obj,SDL_Event *event)
74
+ {
75
+ rb_iv_set(obj,"@button",INT2FIX(event->button.button));
76
+ rb_iv_set(obj,"@press",BOOL(event->button.state==SDL_PRESSED));
77
+ rb_iv_set(obj,"@x",INT2FIX(event->button.x));
78
+ rb_iv_set(obj,"@y",INT2FIX(event->button.y));
79
+ return obj;
80
+ }
81
+
82
+ static VALUE createMouseButtonDownEvent(SDL_Event *event)
83
+ {
84
+ VALUE obj=rb_obj_alloc(cMouseButtonDownEvent);
85
+ return createMouseButtonEvent(obj,event);
86
+ }
87
+
88
+ static VALUE createMouseButtonUpEvent(SDL_Event *event)
89
+ {
90
+ VALUE obj=rb_obj_alloc(cMouseButtonUpEvent);
91
+ return createMouseButtonEvent(obj,event);
92
+ }
93
+
94
+ static VALUE createJoyAxisEvent(SDL_Event *event)
95
+ {
96
+ VALUE obj=rb_obj_alloc(cJoyAxisEvent);
97
+ rb_iv_set(obj,"@which",INT2FIX(event->jaxis.which));
98
+ rb_iv_set(obj,"@axis",INT2FIX(event->jaxis.axis));
99
+ rb_iv_set(obj,"@value",INT2FIX(event->jaxis.value));
100
+ return obj;
101
+ }
102
+
103
+ static VALUE createJoyBallEvent(SDL_Event *event)
104
+ {
105
+ VALUE obj=rb_obj_alloc(cJoyBallEvent);
106
+ rb_iv_set(obj,"@which",INT2FIX(event->jball.which));
107
+ rb_iv_set(obj,"@ball",INT2FIX(event->jball.ball));
108
+ rb_iv_set(obj,"@xrel",INT2FIX(event->jball.xrel));
109
+ rb_iv_set(obj,"@yrel",INT2FIX(event->jball.yrel));
110
+ return obj;
111
+ }
112
+
113
+ static VALUE createJoyHatEvent(SDL_Event *event)
114
+ {
115
+ VALUE obj=rb_obj_alloc(cJoyHatEvent);
116
+ rb_iv_set(obj,"@which",INT2FIX(event->jhat.which));
117
+ rb_iv_set(obj,"@hat",INT2FIX(event->jhat.hat));
118
+ rb_iv_set(obj,"@value",INT2FIX(event->jhat.value));
119
+ return obj;
120
+ }
121
+
122
+ static VALUE createJoyButtonEvent(VALUE obj,SDL_Event *event)
123
+ {
124
+ rb_iv_set(obj,"@which",INT2FIX(event->jbutton.which));
125
+ rb_iv_set(obj,"@button",INT2FIX(event->jbutton.button));
126
+ rb_iv_set(obj,"@press",BOOL(event->jbutton.state==SDL_PRESSED));
127
+ return obj;
128
+ }
129
+ static VALUE createJoyButtonUpEvent(SDL_Event *event)
130
+ {
131
+ VALUE obj=rb_obj_alloc(cJoyButtonUpEvent);
132
+ return createJoyButtonEvent(obj,event);
133
+ }
134
+
135
+ static VALUE createJoyButtonDownEvent(SDL_Event *event)
136
+ {
137
+ VALUE obj=rb_obj_alloc(cJoyButtonDownEvent);
138
+ return createJoyButtonEvent(obj,event);
139
+ }
140
+
141
+ static VALUE createQuitEvent(SDL_Event *event)
142
+ {
143
+ VALUE obj=rb_obj_alloc(cQuitEvent);
144
+ return obj;
145
+ }
146
+
147
+ static VALUE createSysWMEvent(SDL_Event *event)
148
+ {
149
+ VALUE obj=rb_obj_alloc(cSysWMEvent);
150
+ return obj;
151
+ }
152
+
153
+ static VALUE createVideoResizeEvent(SDL_Event *event)
154
+ {
155
+ VALUE obj=rb_obj_alloc(cVideoResizeEvent);
156
+ rb_iv_set(obj,"@w",INT2FIX(event->resize.w));
157
+ rb_iv_set(obj,"@h",INT2FIX(event->resize.h));
158
+ return obj;
159
+ }
160
+
161
+ static VALUE createVideoExposeEvent(SDL_Event *event)
162
+ {
163
+ return rb_obj_alloc(cVideoExposeEvent);
164
+ }
165
+
166
+ static VALUE sdl_event2_poll(VALUE class)
167
+ {
168
+ SDL_Event event;
169
+ if( SDL_PollEvent(&event)==1)
170
+ return createEventObj[event.type](&event);
171
+ else
172
+ return Qnil;
173
+ }
174
+ static VALUE sdl_event2_wait(VALUE class)
175
+ {
176
+ SDL_Event event;
177
+ if( SDL_WaitEvent(&event)==1)
178
+ return createEventObj[event.type](&event);
179
+ else
180
+ rb_raise(eSDLError,"Event handling error");
181
+ }
182
+ static VALUE sdl_event2_pump(VALUE class)
183
+ {
184
+ SDL_PumpEvents();
185
+ return Qnil;
186
+ }
187
+
188
+ static VALUE sdl_event2_new(VALUE class)
189
+ {
190
+ return rb_obj_alloc(class);
191
+ }
192
+
193
+ static VALUE sdl_event2_push(VALUE class,VALUE event)
194
+ {
195
+ SDL_Event e;
196
+ VALUE eventClass=CLASS_OF(event);
197
+ if(eventClass==cActiveEvent){
198
+ e.type=SDL_ACTIVEEVENT;
199
+ e.active.gain=rb_iv_get(event,"@gain");
200
+ e.active.state=NUM2INT(rb_iv_get(event,"@state"));
201
+ }else if(eventClass==cKeyDownEvent){
202
+ e.type=SDL_KEYDOWN;
203
+ e.key.state=(rb_iv_get(event,"@press"))?SDL_PRESSED:SDL_RELEASED;
204
+ e.key.keysym.sym=NUM2INT(rb_iv_get(event,"@sym"));
205
+ e.key.keysym.mod=NUM2UINT(rb_iv_get(event,"@mod"));
206
+ e.key.keysym.unicode = NUM2UINT( rb_iv_get(event,"@unicode") );
207
+ }else if(eventClass==cKeyUpEvent){
208
+ e.type=SDL_KEYUP;
209
+ e.key.state=(rb_iv_get(event,"@press"))?SDL_PRESSED:SDL_RELEASED;
210
+ e.key.keysym.sym=NUM2INT(rb_iv_get(event,"@sym"));
211
+ e.key.keysym.mod=NUM2UINT(rb_iv_get(event,"@mod"));
212
+ e.key.keysym.unicode = NUM2UINT( rb_iv_get(event,"@unicode") );
213
+ }else if(eventClass==cMouseMotionEvent){
214
+ e.type=SDL_MOUSEMOTION;
215
+ e.motion.state=NUM2INT(rb_iv_get(event,"@state"));
216
+ e.motion.x=NUM2INT(rb_iv_get(event,"@x"));
217
+ e.motion.y=NUM2INT(rb_iv_get(event,"@y"));
218
+ e.motion.xrel=NUM2INT(rb_iv_get(event,"@xrel"));
219
+ e.motion.yrel=NUM2INT(rb_iv_get(event,"@yrel"));
220
+ }else if(eventClass==cMouseButtonDownEvent){
221
+ e.type=SDL_MOUSEBUTTONDOWN;
222
+ e.button.button=NUM2INT(rb_iv_get(event,"@button"));
223
+ e.button.state=(rb_iv_get(event,"@press"))?SDL_PRESSED:SDL_RELEASED;
224
+ e.button.x=NUM2INT(rb_iv_get(event,"@x"));
225
+ e.button.y=NUM2INT(rb_iv_get(event,"@y"));
226
+ }else if(eventClass==cMouseButtonUpEvent){
227
+ e.type=SDL_MOUSEBUTTONUP;
228
+ e.button.button=NUM2INT(rb_iv_get(event,"@button"));
229
+ e.button.state=(rb_iv_get(event,"@press"))?SDL_PRESSED:SDL_RELEASED;
230
+ e.button.x=NUM2INT(rb_iv_get(event,"@x"));
231
+ e.button.y=NUM2INT(rb_iv_get(event,"@y"));\
232
+ }else if(eventClass==cJoyAxisEvent){
233
+ e.type=SDL_JOYAXISMOTION;
234
+ e.jaxis.which=NUM2INT(rb_iv_get(event,"@which"));
235
+ e.jaxis.axis=NUM2INT(rb_iv_get(event,"@axis"));
236
+ e.jaxis.value=NUM2INT(rb_iv_get(event,"@value"));
237
+ }else if(eventClass==cJoyBallEvent){
238
+ e.type=SDL_JOYBALLMOTION;
239
+ e.jball.which=NUM2INT(rb_iv_get(event,"@which"));
240
+ e.jball.ball=NUM2INT(rb_iv_get(event,"@ball"));
241
+ e.jball.xrel=NUM2INT(rb_iv_get(event,"@xrel"));
242
+ e.jball.yrel=NUM2INT(rb_iv_get(event,"@yrel"));
243
+ }else if(eventClass==cJoyHatEvent){
244
+ e.type=SDL_JOYHATMOTION;
245
+ e.jhat.which=NUM2INT(rb_iv_get(event,"@which"));
246
+ e.jhat.hat=NUM2INT(rb_iv_get(event,"@hat"));
247
+ e.jhat.value=NUM2INT(rb_iv_get(event,"@value"));
248
+ }else if(eventClass==cJoyButtonUpEvent){
249
+ e.type=SDL_JOYBUTTONUP;
250
+ e.jbutton.which=NUM2INT(rb_iv_get(event,"@which"));
251
+ e.jbutton.button=NUM2INT(rb_iv_get(event,"@button"));
252
+ e.jbutton.state=(rb_iv_get(event,"@press"))?SDL_PRESSED:SDL_RELEASED;
253
+ }else if(eventClass==cJoyButtonDownEvent){
254
+ e.type=SDL_JOYBUTTONDOWN;
255
+ e.jbutton.which=NUM2INT(rb_iv_get(event,"@which"));
256
+ e.jbutton.button=NUM2INT(rb_iv_get(event,"@button"));
257
+ e.jbutton.state=(rb_iv_get(event,"@press"))?SDL_PRESSED:SDL_RELEASED;
258
+ }else if(eventClass==cQuitEvent){
259
+ e.type=SDL_QUIT;
260
+ }else if(eventClass==cSysWMEvent){
261
+ e.type=SDL_SYSWMEVENT;
262
+ }else if(eventClass==cVideoResizeEvent){
263
+ e.type=SDL_VIDEORESIZE;
264
+ e.resize.w=NUM2INT(rb_iv_get(event,"@w"));
265
+ e.resize.h=NUM2INT(rb_iv_get(event,"@h"));
266
+ }else if(eventClass==cVideoExposeEvent){
267
+ e.type=SDL_VIDEOEXPOSE;
268
+ }else {
269
+ rb_raise(eSDLError,"This object couldn't be pushed");
270
+ }
271
+ if(SDL_PushEvent(&e)==-1)
272
+ rb_raise(eSDLError,"the event couldn't be pushed");
273
+ return Qnil;
274
+ }
275
+ static VALUE sdl_event2_getAppState(VALUE class)
276
+ {
277
+ return INT2FIX(SDL_GetAppState());
278
+ }
279
+
280
+ static VALUE sdl_event2_enableUNICODE(VALUE class)
281
+ {
282
+ SDL_EnableUNICODE(1);
283
+ return Qnil;
284
+ }
285
+ static VALUE sdl_event2_disableUNICODE(VALUE class)
286
+ {
287
+ SDL_EnableUNICODE(0);
288
+ return Qnil;
289
+ }
290
+ static VALUE sdl_event2_is_enableUNICODE(VALUE class)
291
+ {
292
+ return BOOL(SDL_EnableUNICODE(-1));
293
+ }
294
+
295
+ void init_event2(void)
296
+ {
297
+ int i;
298
+
299
+ cEvent2=rb_define_class_under(mSDL,"Event2",rb_cObject);
300
+ rb_define_singleton_method(cEvent2,"poll",sdl_event2_poll,0);
301
+ rb_define_singleton_method(cEvent2,"wait",sdl_event2_wait,0);
302
+ rb_define_singleton_method(cEvent2, "pump",sdl_event2_pump, 0);
303
+ /*rb_define_attr(cEvent2,"type",1,0);*/
304
+ rb_define_singleton_method(cEvent2,"new",sdl_event2_new,0);
305
+ rb_define_singleton_method(cEvent2,"push",sdl_event2_push,1);
306
+ rb_define_singleton_method(cEvent2,"appState",sdl_event2_getAppState,0);
307
+ rb_define_singleton_method(cEvent2,"enableUNICODE",sdl_event2_enableUNICODE,0);
308
+ rb_define_singleton_method(cEvent2,"disableUNICODE",sdl_event2_disableUNICODE,0);
309
+ rb_define_singleton_method(cEvent2,"enableUNICODE?",sdl_event2_is_enableUNICODE,0);
310
+ cActiveEvent=rb_define_class_under(cEvent2,"Active",cEvent2);
311
+ rb_define_attr(cActiveEvent,"gain",1,1);
312
+ rb_define_attr(cActiveEvent,"state",1,1);
313
+
314
+ cKeyDownEvent=rb_define_class_under(cEvent2,"KeyDown",cEvent2);
315
+ rb_define_attr(cKeyDownEvent,"press",1,1);
316
+ rb_define_attr(cKeyDownEvent,"sym",1,1);
317
+ rb_define_attr(cKeyDownEvent,"mod",1,1);
318
+ rb_define_attr(cKeyDownEvent,"unicode",1,1);
319
+
320
+ cKeyUpEvent=rb_define_class_under(cEvent2,"KeyUp",cEvent2);
321
+ rb_define_attr(cKeyUpEvent,"press",1,1);
322
+ rb_define_attr(cKeyUpEvent,"sym",1,1);
323
+ rb_define_attr(cKeyUpEvent,"mod",1,1);
324
+ rb_define_attr(cKeyUpEvent,"unicode",1,1);
325
+
326
+ cMouseMotionEvent=rb_define_class_under(cEvent2,"MouseMotion",cEvent2);
327
+ rb_define_attr(cMouseMotionEvent,"state",1,1);
328
+ rb_define_attr(cMouseMotionEvent,"x",1,1);
329
+ rb_define_attr(cMouseMotionEvent,"y",1,1);
330
+ rb_define_attr(cMouseMotionEvent,"xrel",1,1);
331
+ rb_define_attr(cMouseMotionEvent,"yrel",1,1);
332
+
333
+ cMouseButtonDownEvent=rb_define_class_under(cEvent2,"MouseButtonDown",cEvent2);
334
+ rb_define_attr(cMouseButtonDownEvent,"button",1,1);
335
+ rb_define_attr(cMouseButtonDownEvent,"press",1,1);
336
+ rb_define_attr(cMouseButtonDownEvent,"x",1,1);
337
+ rb_define_attr(cMouseButtonDownEvent,"y",1,1);
338
+
339
+ cMouseButtonUpEvent=rb_define_class_under(cEvent2,"MouseButtonUp",cEvent2);
340
+ rb_define_attr(cMouseButtonUpEvent,"button",1,1);
341
+ rb_define_attr(cMouseButtonUpEvent,"press",1,1);
342
+ rb_define_attr(cMouseButtonUpEvent,"x",1,1);
343
+ rb_define_attr(cMouseButtonUpEvent,"y",1,1);
344
+
345
+ cJoyAxisEvent=rb_define_class_under(cEvent2,"JoyAxis",cEvent2);
346
+ rb_define_attr(cJoyAxisEvent,"which",1,1);
347
+ rb_define_attr(cJoyAxisEvent,"axis",1,1);
348
+ rb_define_attr(cJoyAxisEvent,"value",1,1);
349
+
350
+ cJoyBallEvent=rb_define_class_under(cEvent2,"JoyBall",cEvent2);
351
+ rb_define_attr(cJoyBallEvent,"which",1,1);
352
+ rb_define_attr(cJoyBallEvent,"ball",1,1);
353
+ rb_define_attr(cJoyBallEvent,"xrel",1,1);
354
+ rb_define_attr(cJoyBallEvent,"yrel",1,1);
355
+
356
+ cJoyHatEvent=rb_define_class_under(cEvent2,"JoyHat",cEvent2);
357
+ rb_define_attr(cJoyHatEvent,"which",1,1);
358
+ rb_define_attr(cJoyHatEvent,"hat",1,1);
359
+ rb_define_attr(cJoyHatEvent,"value",1,1);
360
+
361
+ cJoyButtonUpEvent=rb_define_class_under(cEvent2,"JoyButtonUp",cEvent2);
362
+ rb_define_attr(cJoyButtonUpEvent,"which",1,1);
363
+ rb_define_attr(cJoyButtonUpEvent,"button",1,1);
364
+ rb_define_attr(cJoyButtonUpEvent,"press",1,1);
365
+
366
+ cJoyButtonDownEvent=rb_define_class_under(cEvent2,"JoyButtonDown",cEvent2);
367
+ rb_define_attr(cJoyButtonDownEvent,"which",1,1);
368
+ rb_define_attr(cJoyButtonDownEvent,"button",1,1);
369
+ rb_define_attr(cJoyButtonDownEvent,"press",1,1);
370
+
371
+ cQuitEvent=rb_define_class_under(cEvent2,"Quit",cEvent2);
372
+
373
+ cSysWMEvent=rb_define_class_under(cEvent2,"SysWM",cEvent2);
374
+
375
+ cVideoResizeEvent=rb_define_class_under(cEvent2,"VideoResize",cEvent2);
376
+ rb_define_attr(cVideoResizeEvent,"w",1,1);
377
+ rb_define_attr(cVideoResizeEvent,"h",1,1);
378
+
379
+ cVideoExposeEvent=rb_define_class_under(cEvent2,"VideoExpose",cEvent2);
380
+
381
+ for(i=0;i<SDL_NUMEVENTS;++i)
382
+ createEventObj[i]=createNoEvent;
383
+ createEventObj[SDL_ACTIVEEVENT]=createActiveEvent;
384
+ createEventObj[SDL_KEYDOWN]=createKeyDownEvent;
385
+ createEventObj[SDL_KEYUP]=createKeyUpEvent;
386
+ createEventObj[SDL_MOUSEMOTION]=createMouseMotionEvent;
387
+ createEventObj[SDL_MOUSEBUTTONDOWN]=createMouseButtonDownEvent;
388
+ createEventObj[SDL_MOUSEBUTTONUP]=createMouseButtonUpEvent;
389
+ createEventObj[SDL_JOYAXISMOTION]=createJoyAxisEvent;
390
+ createEventObj[SDL_JOYBALLMOTION]=createJoyBallEvent;
391
+ createEventObj[SDL_JOYHATMOTION]=createJoyHatEvent;
392
+ createEventObj[SDL_JOYBUTTONDOWN]=createJoyButtonDownEvent;
393
+ createEventObj[SDL_JOYBUTTONUP]=createJoyButtonUpEvent;
394
+ createEventObj[SDL_QUIT]=createQuitEvent;
395
+ createEventObj[SDL_SYSWMEVENT]=createSysWMEvent;
396
+ createEventObj[SDL_VIDEORESIZE]=createVideoResizeEvent;
397
+ createEventObj[SDL_VIDEOEXPOSE]=createVideoExposeEvent;
398
+
399
+ }
400
+ /*
401
+ Active;
402
+ KeyDown;
403
+ KeyUp;
404
+ MouseMotion;
405
+ MouseButtonDown;
406
+ MouseButtonUp;
407
+ JoyAxis;
408
+ JoyBall;
409
+ JoyHat;
410
+ JoyButtonUp;
411
+ JoyButtonDown;
412
+ Quit;
413
+ SysWM;
414
+ VideoResize;
415
+ */
416
+
417
+ #endif /* DEF_EVENT2 */