sdl2-win93 1.0.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 (66) hide show
  1. checksums.yaml +7 -0
  2. data/.dir-locals.el +2 -0
  3. data/.github/workflows/gempush.yml +29 -0
  4. data/.gitignore +14 -0
  5. data/COPYING.txt +165 -0
  6. data/Gemfile +4 -0
  7. data/Gemfile.lock +24 -0
  8. data/Makefile +4 -0
  9. data/README.md +36 -0
  10. data/Rakefile +51 -0
  11. data/doc/po/ja.po +10357 -0
  12. data/ext/sdl2_ext/clipboard.c +61 -0
  13. data/ext/sdl2_ext/color.c +103 -0
  14. data/ext/sdl2_ext/color.h +4 -0
  15. data/ext/sdl2_ext/event.c +1298 -0
  16. data/ext/sdl2_ext/extconf.rb +22 -0
  17. data/ext/sdl2_ext/filesystem.c +63 -0
  18. data/ext/sdl2_ext/gamecontroller.c +408 -0
  19. data/ext/sdl2_ext/gamecontroller.c.m4 +408 -0
  20. data/ext/sdl2_ext/gl.c +351 -0
  21. data/ext/sdl2_ext/gl.c.m4 +351 -0
  22. data/ext/sdl2_ext/hint.c +99 -0
  23. data/ext/sdl2_ext/joystick.c +339 -0
  24. data/ext/sdl2_ext/joystick.c.m4 +339 -0
  25. data/ext/sdl2_ext/key.c +1302 -0
  26. data/ext/sdl2_ext/key.c.m4 +833 -0
  27. data/ext/sdl2_ext/main.c +258 -0
  28. data/ext/sdl2_ext/messagebox.c +233 -0
  29. data/ext/sdl2_ext/mixer.c +1205 -0
  30. data/ext/sdl2_ext/mixer.c.m4 +1205 -0
  31. data/ext/sdl2_ext/mouse.c +286 -0
  32. data/ext/sdl2_ext/rubysdl2_internal.h +127 -0
  33. data/ext/sdl2_ext/timer.c +63 -0
  34. data/ext/sdl2_ext/ttf.c +376 -0
  35. data/ext/sdl2_ext/ttf.c.m4 +376 -0
  36. data/ext/sdl2_ext/video.c +4093 -0
  37. data/ext/sdl2_ext/video.c.m4 +3867 -0
  38. data/lib/sdl2.rb +3 -0
  39. data/lib/sdl2/event.rb +55 -0
  40. data/lib/sdl2/version.rb +8 -0
  41. data/sample/chunk_destroy.rb +16 -0
  42. data/sample/gfxprimitives.rb +54 -0
  43. data/sample/icon.bmp +0 -0
  44. data/sample/memory_test/m1.rb +28 -0
  45. data/sample/memory_test/m2.rb +18 -0
  46. data/sample/memory_test/m3.rb +12 -0
  47. data/sample/message_box.rb +33 -0
  48. data/sample/music_player.rb +137 -0
  49. data/sample/playwave.rb +19 -0
  50. data/sample/primitives.rb +32 -0
  51. data/sample/test_clipboard.rb +16 -0
  52. data/sample/test_controller.rb +62 -0
  53. data/sample/test_joystick.rb +53 -0
  54. data/sample/test_keyboard.rb +52 -0
  55. data/sample/test_mouse.rb +50 -0
  56. data/sample/test_surface.rb +13 -0
  57. data/sample/test_ttf.rb +82 -0
  58. data/sample/test_video.rb +59 -0
  59. data/sample/testgl.rb +175 -0
  60. data/sample/testsprite.rb +296 -0
  61. data/sample/testspriteminimal.rb +75 -0
  62. data/sample/timer.rb +11 -0
  63. data/sample/version.rb +12 -0
  64. data/sample/video_info.rb +64 -0
  65. data/sdl2-win93.gemspec +31 -0
  66. metadata +158 -0
@@ -0,0 +1,61 @@
1
+ #include "rubysdl2_internal.h"
2
+ #include <SDL_clipboard.h>
3
+
4
+ /*
5
+ * Document-module: SDL2::Clipboard
6
+ *
7
+ * This module has clipboard manipulating functions.
8
+ *
9
+ */
10
+
11
+ /*
12
+ * Get the text from the clipboard.
13
+ *
14
+ * @return [String] a string in the clipboard
15
+ * @return [nil] if the clipboard is empty
16
+ */
17
+ static VALUE Clipboard_s_text(VALUE self)
18
+ {
19
+ if (SDL_HasClipboardText()) {
20
+ char* text = SDL_GetClipboardText();
21
+ VALUE str;
22
+ if (!text)
23
+ SDL_ERROR();
24
+ str = utf8str_new_cstr(text);
25
+ SDL_free(text);
26
+ return str;
27
+ } else {
28
+ return Qnil;
29
+ }
30
+ }
31
+
32
+ /*
33
+ * @overload text=(text)
34
+ * Set the text in the clipboard.
35
+ *
36
+ * @param text [String] a new text
37
+ * @return [String] text
38
+ */
39
+ static VALUE Clipboard_s_set_text(VALUE self, VALUE text)
40
+ {
41
+ HANDLE_ERROR(SDL_SetClipboardText(StringValueCStr(text)));
42
+ return text;
43
+ }
44
+
45
+ /*
46
+ * Return true if the clipboard has any text.
47
+ *
48
+ */
49
+ static VALUE Clipboard_s_has_text_p(VALUE self)
50
+ {
51
+ return INT2BOOL(SDL_HasClipboardText());
52
+ }
53
+
54
+ void rubysdl2_init_clipboard(void)
55
+ {
56
+ VALUE mClipBoard = rb_define_module_under(mSDL2, "Clipboard");
57
+
58
+ rb_define_module_function(mClipBoard, "text", Clipboard_s_text, 0);
59
+ rb_define_module_function(mClipBoard, "text=", Clipboard_s_set_text, 1);
60
+ rb_define_module_function(mClipBoard, "has_text?", Clipboard_s_has_text_p, 0);
61
+ }
@@ -0,0 +1,103 @@
1
+ /*
2
+ PORTIONS OF THIS ARE BASED ON
3
+ https://raw.githubusercontent.com/wvanbergen/oily_png/master/ext/oily_png/color.{c,h}
4
+
5
+ Original Version Copyright (c) 2010-2014 Willem van Bergen
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining
8
+ a copy of this software and associated documentation files (the
9
+ "Software"), to deal in the Software without restriction, including
10
+ without limitation the rights to use, copy, modify, merge, publish,
11
+ distribute, sublicense, and/or sell copies of the Software, and to
12
+ permit persons to whom the Software is furnished to do so, subject to
13
+ the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be
16
+ included in all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+ */
26
+
27
+ #include <math.h>
28
+ #include "rubysdl2_internal.h"
29
+
30
+ typedef uint32_t PIXEL; // Pixels use 32 bits unsigned integers
31
+ typedef unsigned char BYTE; // Bytes use 8 bits unsigned integers
32
+
33
+ #define R_BYTE(pixel) ((BYTE) (((pixel) & (PIXEL) 0xff000000) >> 24))
34
+ #define G_BYTE(pixel) ((BYTE) (((pixel) & (PIXEL) 0x00ff0000) >> 16))
35
+ #define B_BYTE(pixel) ((BYTE) (((pixel) & (PIXEL) 0x0000ff00) >> 8))
36
+ #define A_BYTE(pixel) ((BYTE) (((pixel) & (PIXEL) 0x000000ff)))
37
+
38
+ #define BUILD_PIXEL(r, g, b, a) (((PIXEL) (r) << 24) + ((PIXEL) (g) << 16) + ((PIXEL) (b) << 8) + (PIXEL) (a))
39
+
40
+ VALUE Color_s_r(VALUE self, VALUE value) {
41
+ return INT2FIX(R_BYTE(NUM2UINT(value)));
42
+ }
43
+
44
+ VALUE Color_s_g(VALUE self, VALUE value) {
45
+ return INT2FIX(G_BYTE(NUM2UINT(value)));
46
+ }
47
+
48
+ VALUE Color_s_b(VALUE self, VALUE value) {
49
+ return INT2FIX(B_BYTE(NUM2UINT(value)));
50
+ }
51
+
52
+ VALUE Color_s_a(VALUE self, VALUE value) {
53
+ return INT2FIX(A_BYTE(NUM2UINT(value)));
54
+ }
55
+
56
+ VALUE Color_s_rgb(VALUE self, VALUE r, VALUE g, VALUE b) {
57
+ return UINT2NUM(BUILD_PIXEL(FIX2INT(r),
58
+ FIX2INT(g),
59
+ FIX2INT(b),
60
+ 0xFF));
61
+ }
62
+
63
+ VALUE Color_s_rgba(VALUE self, VALUE r, VALUE g, VALUE b, VALUE a) {
64
+ return UINT2NUM(BUILD_PIXEL(FIX2INT(r),
65
+ FIX2INT(g),
66
+ FIX2INT(b),
67
+ FIX2INT(a)));
68
+ }
69
+
70
+
71
+ SDL_Color rubysdl2_Color_to_SDL_Color(VALUE rgba)
72
+ {
73
+ SDL_Color color;
74
+ if (rgba == Qnil) {
75
+ color.r = color.g = color.b = 0; color.a = 255;
76
+ return color;
77
+ } else {
78
+ PIXEL pixel = NUM2UINT(rgba);
79
+ color.r = R_BYTE(pixel);
80
+ color.g = G_BYTE(pixel);
81
+ color.b = B_BYTE(pixel);
82
+ color.a = A_BYTE(pixel);
83
+ return color;
84
+ }
85
+
86
+ }
87
+
88
+ void rubysdl2_init_color(void) {
89
+ VALUE cColor = rb_define_module_under(mSDL2, "Color");
90
+ rb_define_singleton_method(cColor, "rgb", Color_s_rgb, 3);
91
+ rb_define_singleton_method(cColor, "rgba", Color_s_rgba, 4);
92
+ rb_define_singleton_method(cColor, "r", Color_s_r, 1);
93
+ rb_define_singleton_method(cColor, "g", Color_s_g, 1);
94
+ rb_define_singleton_method(cColor, "b", Color_s_b, 1);
95
+ rb_define_singleton_method(cColor, "a", Color_s_a, 1);
96
+
97
+ rb_define_const(cColor, "WHITE", UINT2NUM(0xFFFFFFFF));
98
+ rb_define_const(cColor, "BLACK", UINT2NUM(0x000000FF));
99
+ rb_define_const(cColor, "RED", UINT2NUM(0xFF0000FF));
100
+ rb_define_const(cColor, "GREEN", UINT2NUM(0x00FF00FF));
101
+ rb_define_const(cColor, "BLUE", UINT2NUM(0x0000FFFF));
102
+ }
103
+
@@ -0,0 +1,4 @@
1
+ #pragma once
2
+ #include <SDL_pixels.h>
3
+
4
+
@@ -0,0 +1,1298 @@
1
+ #include "rubysdl2_internal.h"
2
+ #include <SDL_events.h>
3
+ #include <SDL_version.h>
4
+
5
+ static VALUE cEvent;
6
+ static VALUE cEvQuit;
7
+ static VALUE cEvWindow;
8
+ static VALUE cEvSysWM;
9
+ static VALUE cEvKeyboard;
10
+ static VALUE cEvKeyDown;
11
+ static VALUE cEvKeyUp;
12
+ static VALUE cEvTextEditing;
13
+ static VALUE cEvTextInput;
14
+ static VALUE cEvMouseButton;
15
+ static VALUE cEvMouseButtonDown;
16
+ static VALUE cEvMouseButtonUp;
17
+ static VALUE cEvMouseMotion;
18
+ static VALUE cEvMouseWheel;
19
+ static VALUE cEvJoyAxisMotion;
20
+ static VALUE cEvJoyBallMotion;
21
+ static VALUE cEvJoyButton;
22
+ static VALUE cEvJoyButtonDown;
23
+ static VALUE cEvJoyButtonUp;
24
+ static VALUE cEvJoyHatMotion;
25
+ static VALUE cEvJoyDevice;
26
+ static VALUE cEvJoyDeviceAdded;
27
+ static VALUE cEvJoyDeviceRemoved;
28
+ static VALUE cEvControllerAxisMotion;
29
+ static VALUE cEvControllerButton;
30
+ static VALUE cEvControllerButtonDown;
31
+ static VALUE cEvControllerButtonUp;
32
+ static VALUE cEvControllerDevice;
33
+ static VALUE cEvControllerDeviceAdded;
34
+ static VALUE cEvControllerDeviceRemoved;
35
+ static VALUE cEvControllerDeviceRemapped;
36
+ static VALUE cEvTouchFinger;
37
+ static VALUE cEvFingerDown;
38
+ static VALUE cEvFingerUp;
39
+ static VALUE cEvFingerMotion;
40
+ static VALUE cEvMultigesture;
41
+ /* static VALUE cEvUser; */
42
+ /* static VALUE cEvDrop; */
43
+
44
+ /* TODO:
45
+ - easy
46
+ SDL_FlushEvent{,s}
47
+ SDL_HasEvent{,s}
48
+ SDL_PumpEvent
49
+ SDL_PeepEvents
50
+ SDL_DropEvent
51
+ SDL_QuitRequested
52
+ - difficult
53
+ SDL_PushEvent
54
+ SDL_WaitEvent{,Timeout}
55
+ SDL_UserEvent, SDL_RegisterEvents
56
+ */
57
+
58
+ static VALUE event_type_to_class[SDL_LASTEVENT];
59
+
60
+ /*
61
+ * Document-class: SDL2::Event
62
+ *
63
+ * This class represents SDL's events.
64
+ *
65
+ * All events are represented by the instance of subclasses of this class.
66
+ *
67
+ * # Introduction of event subsystem
68
+ * Event handling allows your application to receive input from the user. Event handling is
69
+ * initialized (along with video) with a call to:
70
+ *
71
+ * SDL2.init(SDL2::INIT_VIDEO|SDL2::INIT_EVENTS)
72
+ *
73
+ * Internally, SDL stores all the events waiting to be handled in an event queue.
74
+ * Using methods like {SDL2::Event.poll}, you can observe and handle input events.
75
+ *
76
+ * The queue is conceptually a sequence of objects of SDL2::Event.
77
+ * You can read an event from the queue with {SDL2::Event.poll} and
78
+ * you can process the information from the object.
79
+ *
80
+ * Note: peep and wait will be implemented later.
81
+ *
82
+ * @attribute [rw] type
83
+ * SDL's internal event type enum
84
+ * @return [Integer]
85
+ *
86
+ * @attribute [rw] timestamp
87
+ * timestamp of the event
88
+ * @return [Integer]
89
+ */
90
+ static VALUE Event_new(SDL_Event* ev)
91
+ {
92
+ SDL_Event* e = ALLOC(SDL_Event);
93
+ *e = *ev;
94
+ return Data_Wrap_Struct(event_type_to_class[ev->type], 0, free, e);
95
+ }
96
+
97
+ static VALUE Event_s_allocate(VALUE klass)
98
+ {
99
+ SDL_Event* e;
100
+ VALUE event_type = rb_iv_get(klass, "event_type");
101
+ if (event_type == Qnil)
102
+ rb_raise(rb_eArgError, "Cannot allocate %s", rb_class2name(klass));
103
+
104
+ e = ALLOC(SDL_Event);
105
+ memset(e, 0, sizeof(SDL_Event));
106
+ e->common.type = NUM2INT(event_type);
107
+ return Data_Wrap_Struct(klass, 0, free, e);
108
+ }
109
+
110
+ /*
111
+ * Poll for currently pending events.
112
+ *
113
+ * @return [SDL2::Event] next event from the queue
114
+ * @return [nil] the queue is empty
115
+ */
116
+ static VALUE Event_s_poll(VALUE self)
117
+ {
118
+ SDL_Event ev;
119
+ if (SDL_PollEvent(&ev)) {
120
+ return Event_new(&ev);
121
+ } else {
122
+ return Qnil;
123
+ }
124
+ }
125
+
126
+ /*
127
+ * Get whether the event is enabled.
128
+ *
129
+ * This method is available for subclasses of SDL2::Event corresponding to
130
+ * SDL's event types.
131
+ *
132
+ * @see .enabled=
133
+ */
134
+ static VALUE Event_s_enabled_p(VALUE self)
135
+ {
136
+ VALUE event_type = rb_iv_get(self, "event_type");
137
+ if (event_type == Qnil) {
138
+ rb_warn("You cannot enable %s directly", rb_class2name(self));
139
+ return Qfalse;
140
+ }
141
+ return INT2BOOL(SDL_EventState(NUM2INT(event_type), SDL_QUERY) == SDL_ENABLE);
142
+ }
143
+
144
+ /*
145
+ * @overload enable=(bool)
146
+ * Set wheter the event is enable
147
+ *
148
+ * This method is only available for subclasses of SDL2::Event corresponding to
149
+ * SDL's event types.
150
+ *
151
+ * @example disable mouse wheel events
152
+ * SDL2::Event::MouseWheel.enable = false
153
+ *
154
+ * @param [Boolean] bool true for enabling the event.
155
+ * @return [Boolean]
156
+ * @see SDL2::Event.enabled?
157
+ *
158
+ */
159
+ static VALUE Event_s_set_enable(VALUE self, VALUE val)
160
+ {
161
+ VALUE event_type = rb_iv_get(self, "event_type");
162
+ if (event_type == Qnil)
163
+ rb_raise(rb_eArgError, "You cannot enable %s directly", rb_class2name(self));
164
+ SDL_EventState(NUM2INT(event_type), RTEST(val) ? SDL_ENABLE : SDL_DISABLE);
165
+ return val;
166
+ }
167
+
168
+ static void set_string(char* field, VALUE str, int maxlength)
169
+ {
170
+ StringValueCStr(str);
171
+ if (RSTRING_LEN(str) > maxlength)
172
+ rb_raise(rb_eArgError, "string length must be less than %d", maxlength);
173
+ strcpy(field, RSTRING_PTR(str));
174
+ }
175
+
176
+ #define EVENT_READER(classname, name, field, c2ruby) \
177
+ static VALUE Ev##classname##_##name(VALUE self) \
178
+ { \
179
+ SDL_Event* ev; \
180
+ Data_Get_Struct(self, SDL_Event, ev); \
181
+ return c2ruby(ev->field); \
182
+ } \
183
+
184
+ #define EVENT_WRITER(classname, name, field, ruby2c) \
185
+ static VALUE Ev##classname##_set_##name(VALUE self, VALUE val) \
186
+ { \
187
+ SDL_Event* ev; \
188
+ Data_Get_Struct(self, SDL_Event, ev); \
189
+ ev->field = ruby2c(val); \
190
+ return Qnil; \
191
+ }
192
+
193
+ #define EVENT_ACCESSOR(classname, name, field, ruby2c, c2ruby) \
194
+ EVENT_READER(classname, name, field, c2ruby) \
195
+ EVENT_WRITER(classname, name, field, ruby2c)
196
+
197
+ #define EVENT_ACCESSOR_UINT(classname, name, field) \
198
+ EVENT_ACCESSOR(classname, name, field, NUM2UINT, UINT2NUM)
199
+
200
+ #define EVENT_ACCESSOR_UINT8(classname, name, field) \
201
+ EVENT_ACCESSOR(classname, name, field, NUM2UCHAR, UCHAR2NUM)
202
+
203
+ #define EVENT_ACCESSOR_INT(classname, name, field) \
204
+ EVENT_ACCESSOR(classname, name, field, NUM2INT, INT2NUM)
205
+
206
+ #define EVENT_ACCESSOR_DBL(classname, name, field) \
207
+ EVENT_ACCESSOR(classname, name, field, NUM2DBL, DBL2NUM)
208
+
209
+ #define EVENT_ACCESSOR_BOOL(classname, name, field) \
210
+ EVENT_ACCESSOR(classname, name, field, RTEST, INT2BOOL)
211
+
212
+
213
+ EVENT_READER(Event, type, common.type, INT2NUM);
214
+ EVENT_ACCESSOR_UINT(Event, timestamp, common.timestamp);
215
+ /* @return [String] inspection string */
216
+ static VALUE Event_inspect(VALUE self)
217
+ {
218
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
219
+ return rb_sprintf("<%s: type=%u timestamp=%u>",
220
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp);
221
+ }
222
+
223
+ /*
224
+ * Return the object of {SDL2::Window} corresponding to the window_id attribute.
225
+ *
226
+ * Some subclasses of SDL2::Event have window_id attribute to point the
227
+ * window which creates the event. The type of the window_id attribute
228
+ * is integer, and you need to convert it with {SDL2::Window.find_by_id}
229
+ * to get the {SDL2::Window} object. This method returns the {SDL2::Window}
230
+ * object.
231
+ *
232
+ * @return [SDL2::Window] the window which creates the event.
233
+ * @raise [NoMethodError] raised if the window_id attribute is not present.
234
+ */
235
+ static VALUE Event_window(VALUE self)
236
+ {
237
+ VALUE window_id = rb_funcall(self, rb_intern("window_id"), 0);
238
+ return find_window_by_id(NUM2UINT(window_id));
239
+ }
240
+
241
+ /*
242
+ * Document-class: SDL2::Event::Quit
243
+ *
244
+ * This class represents the quit requested event.
245
+ *
246
+ * This event occurs when a user try to close window, command-Q on OS X,
247
+ * or any other quit request by a user. Normally if your application
248
+ * receive this event, the application should exit. But the application
249
+ * can query something to the users like "save", or ignore it.
250
+ */
251
+
252
+ /*
253
+ * Document-class: SDL2::Event::Window
254
+ *
255
+ * This class represents window event. This type of event occurs when
256
+ * window state is changed.
257
+ *
258
+ * @attribute [rw] window_id
259
+ * the associate window id
260
+ * @return [Integer]
261
+ *
262
+ * @attribute [rw] event
263
+ * event type, one of the following:
264
+ *
265
+ * * SDL2::Event::Window::NONE - (never used)
266
+ * * SDL2::Event::Window::SHOWN - window has been shown
267
+ * * SDL2::Event::Window::HIDDEN - window has been hidden
268
+ * * SDL2::Event::Window::EXPOSED - window has been exposed and should be redrawn
269
+ * * SDL2::Event::Window::MOVED - window has been moved to data1, data2
270
+ * * SDL2::Event::Window::RESIZED - window has been resized to data1xdata2;
271
+ * this is event is always preceded by SIZE_CHANGED
272
+ * * SDL2::Event::Window::SIZE_CHANGED -
273
+ * window size has changed, either as a result of an API call or through
274
+ * the system or user changing the window size;
275
+ * this event is followed by
276
+ * RESIZED if the size was changed by an external event,
277
+ * i.e. the user or the window manager
278
+ * * SDL2::Event::Window::MINIMIZED - window has been minimized
279
+ * * SDL2::Event::Window::MAXIMIZED - window has been maximized
280
+ * * SDL2::Event::Window::RESTORED - window has been restored to normal size and position
281
+ * * SDL2::Event::Window::ENTER - window has gained mouse focus
282
+ * * SDL2::Event::Window::LEAVE - window has lost mouse focus
283
+ * * SDL2::Event::Window::FOCUS_GAINED - window has gained keyboard focus
284
+ * * SDL2::Event::Window::FOCUS_LOST -window has lost keyboard focus
285
+ * * SDL2::Event::Window::CLOSE -
286
+ * the window manager requests that the window be closed
287
+ *
288
+ * @return [Integer]
289
+ *
290
+ * @attribute data1
291
+ * event dependent data
292
+ * @return [Integer]
293
+ *
294
+ * @attribute data2
295
+ * event dependent data
296
+ * @return [Integer]
297
+ *
298
+ */
299
+ EVENT_ACCESSOR_UINT(Window, window_id, window.windowID);
300
+ EVENT_ACCESSOR_UINT(Window, event, window.event);
301
+ EVENT_ACCESSOR_INT(Window, data1, window.data1);
302
+ EVENT_ACCESSOR_INT(Window, data2, window.data2);
303
+
304
+ /* @return [String] inspection string */
305
+ static VALUE EvWindow_inspect(VALUE self)
306
+ {
307
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
308
+ return rb_sprintf("<%s: type=%u timestamp=%u window_id=%u event=%u data1=%d data2=%d>",
309
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
310
+ ev->window.windowID, ev->window.event,
311
+ ev->window.data1, ev->window.data2);
312
+ }
313
+
314
+ /*
315
+ * Document-class: SDL2::Event::Keyboard
316
+ *
317
+ * This class represents keyboard event.
318
+ *
319
+ * You don't handle the instance
320
+ * of this class directly, but you handle the instances of
321
+ * two subclasses of this subclasses:
322
+ * {SDL2::Event::KeyDown} and {SDL2::Event::KeyUp}.
323
+ *
324
+ * @attribute [rw] window_id
325
+ * the associate window id
326
+ * @return [Integer]
327
+ *
328
+ * @attribute pressed
329
+ * key is pressed
330
+ * @return [Integer]
331
+ *
332
+ * @attribute repeat
333
+ * key repeat
334
+ * @return [Integer]
335
+ *
336
+ * @attribute scancode
337
+ * physical key code
338
+ * @return [Integer]
339
+ * @see SDL2::Key::Scan
340
+ *
341
+ * @attribute sym
342
+ * virtual key code
343
+ * @return [Integer]
344
+ * @see SDL2::Key
345
+ *
346
+ * @attribute mod
347
+ * current key modifier
348
+ * @return [Integer]
349
+ * @see SDL2::Key::Mod
350
+ *
351
+ */
352
+ EVENT_ACCESSOR_UINT(Keyboard, window_id, key.windowID);
353
+ EVENT_ACCESSOR_BOOL(Keyboard, pressed, key.state);
354
+ EVENT_ACCESSOR_BOOL(Keyboard, repeat, key.repeat);
355
+ EVENT_ACCESSOR_UINT(Keyboard, scancode, key.keysym.scancode);
356
+ EVENT_ACCESSOR_UINT(Keyboard, sym, key.keysym.sym);
357
+ EVENT_ACCESSOR_UINT(Keyboard, mod, key.keysym.mod);
358
+ /* @return [String] inspection string */
359
+ static VALUE EvKeyboard_inspect(VALUE self)
360
+ {
361
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
362
+ return rb_sprintf("<%s: type=%u timestamp=%u"
363
+ " window_id=%u state=%u repeat=%u"
364
+ " scancode=%u sym=%u mod=%u>",
365
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
366
+ ev->key.windowID, ev->key.state, ev->key.repeat,
367
+ ev->key.keysym.scancode, ev->key.keysym.sym, ev->key.keysym.mod);
368
+ }
369
+
370
+
371
+ /*
372
+ * Document-class: SDL2::Event::KeyDown
373
+ *
374
+ * This class represents a key down event.
375
+ */
376
+
377
+ /*
378
+ * Document-class: SDL2::Event::KeyUp
379
+ *
380
+ * This class represents a key up event.
381
+ */
382
+
383
+ /*
384
+ * Document-class: SDL2::Event::TextEditing
385
+ *
386
+ * This class represents text editing event.
387
+ *
388
+ * @attribute window_id
389
+ * the associate window id
390
+ * @return [Integer]
391
+ *
392
+ * @attribute text
393
+ * the editing text
394
+ * @return [String]
395
+ *
396
+ * @attribute start
397
+ * the start cursor of selected editing text
398
+ * @return [Integer]
399
+ *
400
+ * @attribute length
401
+ * the length of selected editing text
402
+ * @return [Integer]
403
+ */
404
+ EVENT_ACCESSOR_UINT(TextEditing, window_id, edit.windowID);
405
+ EVENT_ACCESSOR_INT(TextEditing, start, edit.start);
406
+ EVENT_ACCESSOR_INT(TextEditing, length, edit.length);
407
+ EVENT_READER(TextEditing, text, edit.text, utf8str_new_cstr);
408
+ static VALUE EvTextEditing_set_text(VALUE self, VALUE str)
409
+ {
410
+ SDL_Event* ev;
411
+ Data_Get_Struct(self, SDL_Event, ev);
412
+ set_string(ev->edit.text, str, 30);
413
+ return str;
414
+ }
415
+
416
+ /* @return [String] inspection string */
417
+ static VALUE EvTextEditing_inspect(VALUE self)
418
+ {
419
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
420
+ return rb_sprintf("<%s: type=%u timestamp=%u"
421
+ " window_id=%u text=%s start=%d length=%d>",
422
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
423
+ ev->edit.windowID, ev->edit.text, ev->edit.start, ev->edit.length);
424
+ }
425
+
426
+
427
+ /*
428
+ * Document-class: SDL2::Event::TextInput
429
+ *
430
+ * This class represents text input events.
431
+ *
432
+ * @attribute window_id
433
+ * the associate window id
434
+ * @return [Integer]
435
+ *
436
+ * @attribute text
437
+ * the input text
438
+ * @return [String]
439
+ */
440
+ EVENT_ACCESSOR_UINT(TextInput, window_id, text.windowID);
441
+ EVENT_READER(TextInput, text, text.text, utf8str_new_cstr);
442
+ static VALUE EvTextInput_set_text(VALUE self, VALUE str)
443
+ {
444
+ SDL_Event* ev;
445
+ Data_Get_Struct(self, SDL_Event, ev);
446
+ set_string(ev->text.text, str, 30);
447
+ return str;
448
+ }
449
+
450
+ /* @return [String] inspection string */
451
+ static VALUE EvTextInput_inspect(VALUE self)
452
+ {
453
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
454
+ return rb_sprintf("<%s: type=%u timestamp=%u window_id=%u text=%s>",
455
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
456
+ ev->text.windowID, ev->text.text);
457
+ }
458
+
459
+ /*
460
+ * Document-class: SDL2::Event::MouseButton
461
+ *
462
+ * This class represents mouse button events.
463
+ *
464
+ * You don't handle the instance
465
+ * of this class directly, but you handle the instances of
466
+ * two subclasses of this subclasses:
467
+ * {SDL2::Event::MouseButtonDown} and {SDL2::Event::MouseButtonUp}.
468
+ *
469
+ * @attribute window_id
470
+ * the window id with mouse focus
471
+ * @return [Integer]
472
+ *
473
+ * @attribute which
474
+ * the mouse index
475
+ * @return [Integer]
476
+ *
477
+ * @attribute button
478
+ * the mouse button index
479
+ * @return [Integer]
480
+ *
481
+ * @attribute pressed
482
+ * button is pressed or not
483
+ * @return [Boolean]
484
+ *
485
+ * @attribute clicks
486
+ * 1 for single click, 2 for double click
487
+ *
488
+ * This attribute is available after SDL 2.0.2
489
+ * @return [Integer]
490
+ *
491
+ * @attribute x
492
+ * the x coordinate of the mouse pointer, relative to window
493
+ * @return [Integer]
494
+ *
495
+ * @attribute y
496
+ * the y coordinate of the mouse pointer, relative to window
497
+ * @return [Integer]
498
+ */
499
+ EVENT_ACCESSOR_UINT(MouseButton, window_id, button.windowID);
500
+ EVENT_ACCESSOR_UINT(MouseButton, which, button.which);
501
+ EVENT_ACCESSOR_UINT8(MouseButton, button, button.button);
502
+ EVENT_ACCESSOR_BOOL(MouseButton, pressed, button.state);
503
+ #if SDL_VERSION_ATLEAST(2,0,2)
504
+ EVENT_ACCESSOR_UINT8(MouseButton, clicks, button.clicks);
505
+ #endif
506
+ EVENT_ACCESSOR_INT(MouseButton, x, button.x);
507
+ EVENT_ACCESSOR_INT(MouseButton, y, button.y);
508
+ /* @return [String] inspection string */
509
+ static VALUE EvMouseButton_inspect(VALUE self)
510
+ {
511
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
512
+ return rb_sprintf("<%s: type=%u timestamp=%u"
513
+ " window_id=%u which=%u button=%hhu pressed=%s"
514
+ #if SDL_VERSION_ATLEAST(2,0,2)
515
+ " clicks=%hhu"
516
+ #endif
517
+ " x=%d y=%d>",
518
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
519
+ ev->button.windowID, ev->button.which,
520
+ ev->button.button, INT2BOOLCSTR(ev->button.state),
521
+ #if SDL_VERSION_ATLEAST(2,0,2)
522
+ ev->button.clicks,
523
+ #endif
524
+ ev->button.x, ev->button.y);
525
+ }
526
+
527
+ /*
528
+ * Document-class: SDL2::Event::MouseButtonDown
529
+ * This class represents mouse button press events.
530
+ */
531
+ /*
532
+ * Document-class: SDL2::Event::MouseButtonUp
533
+ * This class represents mouse button release events.
534
+ */
535
+
536
+ /*
537
+ * Document-class: SDL2::Event::MouseMotion
538
+ *
539
+ * This class represents mouse motion events.
540
+ *
541
+ * @attribute window_id
542
+ * the window id with mouse focus
543
+ * @return [Integer]
544
+ *
545
+ * @attribute which
546
+ * the mouse index
547
+ * @return [Integer]
548
+ *
549
+ * @attribute state
550
+ * the current mouse state
551
+ * @return [Integer]
552
+ * @todo use SDL2::Mouse::State
553
+ *
554
+ * @attribute x
555
+ * the x coordinate of the mouse pointer, relative to window
556
+ * @return [Integer]
557
+ *
558
+ * @attribute y
559
+ * the y coordinate of the mouse pointer, relative to window
560
+ * @return [Integer]
561
+ *
562
+ * @attribute xrel
563
+ * the relative motion in the x direction
564
+ * @return [Integer]
565
+ *
566
+ * @attribute yrel
567
+ * the relative motion in the y direction
568
+ * @return [Integer]
569
+ */
570
+ EVENT_ACCESSOR_UINT(MouseMotion, window_id, motion.windowID);
571
+ EVENT_ACCESSOR_UINT(MouseMotion, which, motion.which);
572
+ EVENT_ACCESSOR_UINT(MouseMotion, state, motion.state);
573
+ EVENT_ACCESSOR_INT(MouseMotion, x, motion.x);
574
+ EVENT_ACCESSOR_INT(MouseMotion, y, motion.y);
575
+ EVENT_ACCESSOR_INT(MouseMotion, xrel, motion.xrel);
576
+ EVENT_ACCESSOR_INT(MouseMotion, yrel, motion.yrel);
577
+ /* @return [String] inspection string */
578
+ static VALUE EvMouseMotion_inspect(VALUE self)
579
+ {
580
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
581
+ return rb_sprintf("<%s: type=%u timestamp=%u"
582
+ " window_id=%u which=%u state=%u"
583
+ " x=%d y=%d xrel=%d yrel=%d>",
584
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
585
+ ev->motion.windowID, ev->motion.which, ev->motion.state,
586
+ ev->motion.x, ev->motion.y, ev->motion.xrel, ev->motion.yrel);
587
+ }
588
+
589
+ /*
590
+ * Document-class: SDL2::Event::MouseWheel
591
+ *
592
+ * This class represents mouse wheel events.
593
+ *
594
+ * @attribute window_id
595
+ * the window id with mouse focus
596
+ * @return [Integer]
597
+ *
598
+ * @attribute which
599
+ * the mouse index
600
+ * @return [Integer]
601
+ *
602
+ * @attribute x
603
+ * the amount of scrolled horizontally, positive to the right and negative
604
+ * to the left
605
+ * @return [Integer]
606
+ *
607
+ * @attribute y
608
+ * the amount of scrolled vertically, positve away from the user and negative
609
+ * toward the user
610
+ * @return [Integer]
611
+ */
612
+ EVENT_ACCESSOR_UINT(MouseWheel, window_id, wheel.windowID);
613
+ EVENT_ACCESSOR_UINT(MouseWheel, which, wheel.which);
614
+ EVENT_ACCESSOR_INT(MouseWheel, x, wheel.x);
615
+ EVENT_ACCESSOR_INT(MouseWheel, y, wheel.y);
616
+ /* @return [String] inspection string */
617
+ static VALUE EvMouseWheel_inspect(VALUE self)
618
+ {
619
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
620
+ return rb_sprintf("<%s: type=%u timestamp=%u"
621
+ " window_id=%u which=%u x=%d y=%d>",
622
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
623
+ ev->wheel.windowID, ev->wheel.which, ev->wheel.x, ev->wheel.y);
624
+ }
625
+
626
+ /*
627
+ * Document-class: SDL2::Event::JoyButton
628
+ *
629
+ * This class represents joystick button events.
630
+ *
631
+ * You don't handle the instance
632
+ * of this class directly, but you handle the instances of
633
+ * two subclasses of this subclasses:
634
+ * {SDL2::Event::JoyButtonDown} and {SDL2::Event::JoyButtonUp}.
635
+ *
636
+ * @attribute which
637
+ * the joystick index
638
+ * @return [Integer]
639
+ *
640
+ * @attribute button
641
+ * the joystick button index
642
+ * @return [Integer]
643
+ *
644
+ * @attribute pressed
645
+ * button is pressed or not
646
+ * @return [Boolean]
647
+ *
648
+ */
649
+ EVENT_ACCESSOR_INT(JoyButton, which, jbutton.which);
650
+ EVENT_ACCESSOR_UINT8(JoyButton, button, jbutton.button);
651
+ EVENT_ACCESSOR_BOOL(JoyButton, pressed, jbutton.state);
652
+ /* @return [String] inspection string */
653
+ static VALUE EvJoyButton_inspect(VALUE self)
654
+ {
655
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
656
+ return rb_sprintf("<%s: type=%u timestamp=%u"
657
+ " which=%d button=%u pressed=%s>",
658
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
659
+ ev->jbutton.which, ev->jbutton.button,
660
+ INT2BOOLCSTR(ev->jbutton.state));
661
+ }
662
+ /*
663
+ * Document-class: SDL2::Event::JoyButtonDown
664
+ *
665
+ * This class represents the joystick button press events.
666
+ */
667
+
668
+ /*
669
+ * Document-class: SDL2::Event::JoyButtonUp
670
+ *
671
+ * This class represents the joystick button release events.
672
+ */
673
+
674
+ /*
675
+ * Document-class: SDL2::Event::JoyAxisMotion
676
+ *
677
+ * This class represents the joystick axis motion events.
678
+ *
679
+ * @attribute which
680
+ * the joystick index
681
+ * @return [Integer]
682
+ *
683
+ * @attribute axis
684
+ * the axis index
685
+ * @return [Integer]
686
+ *
687
+ * @attribute value
688
+ * the axis value (range: -32768 to -32767, 0 for newtral)
689
+ * @return [Integer]
690
+ */
691
+ EVENT_ACCESSOR_INT(JoyAxisMotion, which, jaxis.which);
692
+ EVENT_ACCESSOR_UINT8(JoyAxisMotion, axis, jaxis.axis);
693
+ EVENT_ACCESSOR_INT(JoyAxisMotion, value, jaxis.value);
694
+ /* @return [Stirng] inspection string */
695
+ static VALUE EvJoyAxisMotion_inspect(VALUE self)
696
+ {
697
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
698
+ return rb_sprintf("<%s: type=%u timestamp=%u"
699
+ " which=%d axis=%u value=%d>",
700
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
701
+ ev->jaxis.which, ev->jaxis.axis, ev->jaxis.value);
702
+ }
703
+
704
+ /*
705
+ * Document-class: SDL2::Event::JoyBallMotion
706
+ *
707
+ * This class represents the joystick trackball motion events.
708
+ *
709
+ * @attribute which
710
+ * the joystick index
711
+ * @return [Integer]
712
+ *
713
+ * @attribute ball
714
+ * the joystick trackball index
715
+ * @return [Integer]
716
+ *
717
+ * @attribute xrel
718
+ * the relative motion in the x direction
719
+ * @return [Integer]
720
+ *
721
+ * @attribute yrel
722
+ * the relative motion in the y direction
723
+ * @return [Integer]
724
+ */
725
+ EVENT_ACCESSOR_INT(JoyBallMotion, which, jball.which);
726
+ EVENT_ACCESSOR_UINT8(JoyBallMotion, ball, jball.ball);
727
+ EVENT_ACCESSOR_INT(JoyBallMotion, xrel, jball.xrel);
728
+ EVENT_ACCESSOR_INT(JoyBallMotion, yrel, jball.yrel);
729
+ /* @return [String] inspection string */
730
+ static VALUE EvJoyBallMotion_inspect(VALUE self)
731
+ {
732
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
733
+ return rb_sprintf("<%s: type=%u timestamp=%u"
734
+ " which=%d ball=%u xrel=%d yrel=%d>",
735
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
736
+ ev->jball.which, ev->jball.ball, ev->jball.xrel, ev->jball.yrel);
737
+ }
738
+
739
+ /*
740
+ * Document-class: SDL2::Event::JoyHatMotion
741
+ *
742
+ * This class represents the joystick hat position change events.
743
+ *
744
+ * @attribute which
745
+ * the joystick index
746
+ * @return [Integer]
747
+ *
748
+ * @attribute hat
749
+ * the joystick hat index
750
+ * @return [Integer]
751
+ *
752
+ * @attribute value
753
+ * the hat position value, same value as {SDL2::Joystick#hat}.
754
+ * @return [Integer]
755
+ */
756
+ EVENT_ACCESSOR_INT(JoyHatMotion, which, jhat.which);
757
+ EVENT_ACCESSOR_UINT8(JoyHatMotion, hat, jhat.hat);
758
+ EVENT_ACCESSOR_UINT8(JoyHatMotion, value, jhat.value);
759
+ /* @return [String] inspection string */
760
+ static VALUE EvJoyHatMotion_inspect(VALUE self)
761
+ {
762
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
763
+ return rb_sprintf("<%s: type=%u timestamp=%u which=%d hat=%u value=%u>",
764
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
765
+ ev->jhat.which, ev->jhat.hat, ev->jhat.value);
766
+ }
767
+
768
+ /*
769
+ * Document-class: SDL2::Event::JoyDevice
770
+ *
771
+ * This class represents joystick device events
772
+ * ({SDL2::Event::JoyDeviceAdded joystick connected events} and
773
+ * {SDL2::Event::JoyDeviceRemoved joystick disconnected events}).
774
+ */
775
+ EVENT_ACCESSOR_INT(JoyDevice, which, jdevice.which);
776
+ /* @return [String] inspection string */
777
+ static VALUE EvJoyDevice_inspect(VALUE self)
778
+ {
779
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
780
+ return rb_sprintf("<%s: type=%u timestamp=%u which=%d>",
781
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
782
+ ev->jdevice.which);
783
+ }
784
+
785
+ /*
786
+ * Document-class: SDL2::Event::JoyDeviceAdded
787
+ *
788
+ * This class represents joystick device connected events.
789
+ */
790
+ /*
791
+ * Document-class: SDL2::Event::JoyDeviceRemoved
792
+ *
793
+ * This class represents joystick device disconnected events.
794
+ */
795
+
796
+
797
+ /*
798
+ * Document-class: SDL2::Event::ControllerAxisMotion
799
+ *
800
+ * This class represents the {SDL2::GameController controller} axis motion events.
801
+ *
802
+ * @attribute which
803
+ * the controller index
804
+ * @return [Integer]
805
+ *
806
+ * @attribute axis
807
+ * the axis index
808
+ * @return [Integer]
809
+ *
810
+ * @attribute value
811
+ * the axis value (range: -32768 to -32767, 0 for newtral)
812
+ * @return [Integer]
813
+ */
814
+ EVENT_ACCESSOR_INT(ControllerAxis, which, caxis.which);
815
+ EVENT_ACCESSOR_UINT8(ControllerAxis, axis, caxis.axis);
816
+ EVENT_ACCESSOR_INT(ControllerAxis, value, caxis.value);
817
+ /* @return [String] inspection string */
818
+ static VALUE ControllerAxis_inspect(VALUE self)
819
+ {
820
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
821
+ return rb_sprintf("<%s: type=%u timestamp=%u"
822
+ " which=%d axis=%s value=%d>",
823
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
824
+ ev->caxis.which, SDL_GameControllerGetStringForAxis(ev->caxis.axis),
825
+ ev->caxis.value);
826
+ }
827
+
828
+ /*
829
+ * Document-class: SDL2::Event::ControllerButton
830
+ *
831
+ * This class represents the {SDL2::GameController controller} button events.
832
+ *
833
+ * You don't handle the instance
834
+ * of this class directly, but you handle the instances of
835
+ * two subclasses of this subclasses:
836
+ * {SDL2::Event::ControllerButtonDown} and {SDL2::Event::ControllerButtonUp}.
837
+ *
838
+ * @attribute which
839
+ * the controller index
840
+ * @return [Integer]
841
+ *
842
+ * @attribute button
843
+ * the controller button index
844
+ * @return [Integer]
845
+ *
846
+ * @attribute pressed
847
+ * button is pressed or not
848
+ * @return [Boolean]
849
+ *
850
+ */
851
+ EVENT_ACCESSOR_INT(ControllerButton, which, cbutton.which);
852
+ EVENT_ACCESSOR_UINT8(ControllerButton, button, cbutton.button);
853
+ EVENT_ACCESSOR_BOOL(ControllerButton, pressed, cbutton.state);
854
+ /* @return [String] inspection string */
855
+ static VALUE ControllerButton_inspect(VALUE self)
856
+ {
857
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
858
+ return rb_sprintf("<%s: type=%u timestamp=%u"
859
+ " which=%d button=%s state=%s>",
860
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
861
+ ev->cbutton.which,
862
+ SDL_GameControllerGetStringForButton(ev->cbutton.button),
863
+ INT2BOOLCSTR(ev->cbutton.state));
864
+ }
865
+ /*
866
+ * Document-class: SDL2::Event::ControllerButtonDown
867
+ *
868
+ * This class represents the {SDL2::GameController controller} button press events.
869
+ */
870
+
871
+ /*
872
+ * Document-class: SDL2::Event::ControllerButtonUp
873
+ *
874
+ * This class represents the {SDL2::GameController controller} button release events.
875
+ */
876
+
877
+ /*
878
+ * Document-class: SDL2::Event::ControllerDevice
879
+ *
880
+ * This class represents {SDL2::GameController controller} device events (connected/disconnected/remapped).
881
+ *
882
+ * The event of this event doesn't occur. Only the event of the following subclasses
883
+ * occur in Ruby/SDL2.
884
+ *
885
+ * * {SDL2::Event::ControllerDeviceAdded}
886
+ * * {SDL2::Event::ControllerDeviceRemoved}
887
+ * * {SDL2::Event::ControllerDeviceRemapped}
888
+ *
889
+ * @attribute which
890
+ * the controller index
891
+ * @return [Integer]
892
+ */
893
+ EVENT_ACCESSOR_INT(ControllerDevice, which, cdevice.which);
894
+ /* @return [String] inspection string */
895
+ static VALUE ControllerDevice_inspect(VALUE self)
896
+ {
897
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
898
+ return rb_sprintf("<%s: type=%u timestamp=%u which=%d>",
899
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
900
+ ev->cdevice.which);
901
+ }
902
+
903
+ /*
904
+ * Document-class: SDL2::Event::ControllerDeviceAdded
905
+ *
906
+ * This class represents {SDL2::GameController controller} device connected events.
907
+ */
908
+ /*
909
+ * Document-class: SDL2::Event::ControllerDeviceRemoved
910
+ *
911
+ * This class represents {SDL2::GameController controller} device disconnected events.
912
+ */
913
+ /*
914
+ * Document-class: SDL2::Event::ControllerDeviceRemapped
915
+ *
916
+ * This class represents {SDL2::GameController controller} device remapped events.
917
+ */
918
+
919
+ /*
920
+ * Document-class: SDL2::Event::TouchFinger
921
+ *
922
+ * This class represents touch finger events.
923
+ *
924
+ * You don't handle the instance
925
+ * of this class directly, but you handle the instances of
926
+ * two subclasses of this subclasses:
927
+ * {SDL2::Event::FingerMotion}, {SDL2::Event::FingerDown}, and {SDL2::Event::FingerUp}.
928
+ *
929
+ * @attribute touch_id
930
+ * the touch device id
931
+ * @return [Integer]
932
+ *
933
+ * @attribute finger_id
934
+ * the finger id
935
+ * @return [Integer]
936
+ *
937
+ * @attribute x
938
+ * the x-axis location of the touch event, normalized (0...1)
939
+ * @return [Float]
940
+ *
941
+ * @attribute y
942
+ * the y-axis location of the touch event, normalized (0...1)
943
+ * @return [Float]
944
+ *
945
+ * @attribute pressure
946
+ * the quantity of pressure applied, normalized (0...1)
947
+ * @return [Float]
948
+ */
949
+ EVENT_ACCESSOR_INT(TouchFinger, touch_id, tfinger.touchId);
950
+ EVENT_ACCESSOR_INT(TouchFinger, finger_id, tfinger.fingerId);
951
+ EVENT_ACCESSOR_DBL(TouchFinger, x, tfinger.x);
952
+ EVENT_ACCESSOR_DBL(TouchFinger, y, tfinger.y);
953
+ EVENT_ACCESSOR_DBL(TouchFinger, pressure, tfinger.pressure);
954
+ /* @return [String] inspection string */
955
+ static VALUE EvTouchFinger_inspect(VALUE self)
956
+ {
957
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
958
+ return rb_sprintf("<%s: type=%u timestamp=%u"
959
+ " touch_id=%d finger_id=%d"
960
+ " x=%f y=%f pressure=%f>",
961
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
962
+ (int)ev->tfinger.touchId, (int)ev->tfinger.fingerId,
963
+ ev->tfinger.x, ev->tfinger.y, ev->tfinger.pressure);
964
+ }
965
+
966
+ /*
967
+ * Document-class: SDL2::Event::FingerUp
968
+ * This class represents finger touch events.
969
+ */
970
+ /*
971
+ * Document-class: SDL2::Event::FingerDown
972
+ * This class represents finger release events.
973
+ */
974
+
975
+ /*
976
+ * Document-class: SDL2::Event::FingerMotion
977
+ *
978
+ * This class represents touch move events.
979
+ *
980
+ * @attribute dx
981
+ * the distance moved in the x-axis, normalized (0...1)
982
+ * @return [Float]
983
+ *
984
+ * @attribute dy
985
+ * the distance moved in the y-axis, normalized (0...1)
986
+ * @return [Float]
987
+ *
988
+ */
989
+ EVENT_ACCESSOR_DBL(FingerMotion, dx, tfinger.dx);
990
+ EVENT_ACCESSOR_DBL(FingerMotion, dy, tfinger.dy);
991
+ /* @return [String] inspection string */
992
+ static VALUE EvFingerMotion_inspect(VALUE self)
993
+ {
994
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
995
+ return rb_sprintf("<%s: type=%u timestamp=%u"
996
+ " touch_id=%d finger_id=%d"
997
+ " x=%f y=%f pressure=%f"
998
+ " dy=%f dx=%f>",
999
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
1000
+ (int) ev->tfinger.touchId, (int) ev->tfinger.fingerId,
1001
+ ev->tfinger.x, ev->tfinger.y, ev->tfinger.pressure,
1002
+ ev->tfinger.dx, ev->tfinger.dx);
1003
+ }
1004
+
1005
+
1006
+ /*
1007
+ * Document-class: SDL2::Event::Multigesture
1008
+ *
1009
+ * This class represents multiple finger gesture events.
1010
+ *
1011
+ *
1012
+ * @attribute touch_id
1013
+ * the touch device id
1014
+ * @return [Integer]
1015
+ *
1016
+ * @attribute d_theta
1017
+ * rotation of fingers
1018
+ * @return [Float]
1019
+ *
1020
+ * @attribute d_dist
1021
+ * amount of fingers pinched
1022
+ * @return [Float]
1023
+ *
1024
+ * @attribute x
1025
+ * the x-axis location of the touch event, normalized (0...1)
1026
+ * @return [Float]
1027
+ *
1028
+ * @attribute y
1029
+ * the y-axis location of the touch event, normalized (0...1)
1030
+ * @return [Float]
1031
+ *
1032
+ * @attribute num_fingers
1033
+ * number of fingers involved
1034
+ * @return [Integer]
1035
+ */
1036
+ EVENT_ACCESSOR_INT(Multigesture, touch_id, mgesture.touchId);
1037
+ EVENT_ACCESSOR_DBL(Multigesture, x, mgesture.x);
1038
+ EVENT_ACCESSOR_DBL(Multigesture, y, mgesture.y);
1039
+ EVENT_ACCESSOR_DBL(Multigesture, d_theta, mgesture.dTheta);
1040
+ EVENT_ACCESSOR_DBL(Multigesture, d_dist, mgesture.dDist);
1041
+ EVENT_ACCESSOR_INT(Multigesture, num_fingers, mgesture.numFingers);
1042
+ /* @return [String] inspection string */
1043
+ static VALUE EvMultigesture_inspect(VALUE self)
1044
+ {
1045
+ SDL_Event* ev; Data_Get_Struct(self, SDL_Event, ev);
1046
+ return rb_sprintf("<%s: type=%u timestamp=%u"
1047
+ " touch_id=%d d_theta=%f d_dist=%f"
1048
+ " x=%f y=%f num_fingers=%d>",
1049
+ rb_obj_classname(self), ev->common.type, ev->common.timestamp,
1050
+ (int)ev->mgesture.touchId, ev->mgesture.dTheta, ev->mgesture.dDist,
1051
+ ev->mgesture.x, ev->mgesture.y, ev->mgesture.numFingers);
1052
+ }
1053
+
1054
+
1055
+ /*
1056
+ * Document-class: SDL2::Event::SysWM
1057
+ *
1058
+ * This class represents video driver dependent system events.
1059
+ *
1060
+ * This event is disabled by default. You can enable it with {SDL2::Event.enable=}.
1061
+ * This event is now useless because now there is no way to get
1062
+ * driver dependent information from this event class.
1063
+ * You are encouraged to avoid this event.
1064
+ *
1065
+ */
1066
+ static void connect_event_class(SDL_EventType type, VALUE klass)
1067
+ {
1068
+ event_type_to_class[type] = klass;
1069
+ rb_iv_set(klass, "event_type", INT2NUM(type));
1070
+ }
1071
+
1072
+ static void init_event_type_to_class(void)
1073
+ {
1074
+ int i;
1075
+ for (i=0; i<SDL_LASTEVENT; ++i)
1076
+ event_type_to_class[i] = cEvent;
1077
+
1078
+ connect_event_class(SDL_QUIT, cEvQuit);
1079
+ connect_event_class(SDL_WINDOWEVENT, cEvWindow);
1080
+ connect_event_class(SDL_KEYDOWN, cEvKeyDown);
1081
+ connect_event_class(SDL_KEYUP, cEvKeyUp);
1082
+ connect_event_class(SDL_TEXTEDITING, cEvTextEditing);
1083
+ connect_event_class(SDL_TEXTINPUT, cEvTextInput);
1084
+ connect_event_class(SDL_MOUSEBUTTONDOWN, cEvMouseButtonDown);
1085
+ connect_event_class(SDL_MOUSEBUTTONUP, cEvMouseButtonUp);
1086
+ connect_event_class(SDL_MOUSEMOTION, cEvMouseMotion);
1087
+ connect_event_class(SDL_MOUSEWHEEL, cEvMouseWheel);
1088
+ connect_event_class(SDL_JOYBUTTONDOWN, cEvJoyButtonDown);
1089
+ connect_event_class(SDL_JOYBUTTONUP, cEvJoyButtonUp);
1090
+ connect_event_class(SDL_JOYAXISMOTION, cEvJoyAxisMotion);
1091
+ connect_event_class(SDL_JOYBALLMOTION, cEvJoyBallMotion);
1092
+ connect_event_class(SDL_JOYDEVICEADDED, cEvJoyDeviceAdded);
1093
+ connect_event_class(SDL_JOYDEVICEREMOVED, cEvJoyDeviceRemoved);
1094
+ connect_event_class(SDL_JOYHATMOTION, cEvJoyHatMotion);
1095
+ connect_event_class(SDL_CONTROLLERAXISMOTION, cEvControllerAxisMotion);
1096
+ connect_event_class(SDL_CONTROLLERBUTTONDOWN, cEvControllerButtonDown);
1097
+ connect_event_class(SDL_CONTROLLERBUTTONUP, cEvControllerButtonUp);
1098
+ connect_event_class(SDL_CONTROLLERDEVICEADDED, cEvControllerDeviceAdded);
1099
+ connect_event_class(SDL_CONTROLLERDEVICEREMOVED, cEvControllerDeviceRemoved);
1100
+ connect_event_class(SDL_CONTROLLERDEVICEREMAPPED, cEvControllerDeviceRemapped);
1101
+ connect_event_class(SDL_FINGERDOWN, cEvFingerDown);
1102
+ connect_event_class(SDL_FINGERUP, cEvFingerUp);
1103
+ connect_event_class(SDL_FINGERMOTION, cEvFingerMotion);
1104
+ connect_event_class(SDL_MULTIGESTURE, cEvMultigesture);
1105
+ }
1106
+
1107
+ #define DEFINE_EVENT_READER(classname, classvar, name) \
1108
+ rb_define_method(classvar, #name, Ev##classname##_##name, 0)
1109
+
1110
+ #define DEFINE_EVENT_WRITER(classname, classvar, name) \
1111
+ rb_define_method(classvar, #name "=", Ev##classname##_set_##name, 1)
1112
+
1113
+ #define DEFINE_EVENT_ACCESSOR(classname, classvar, name) \
1114
+ do { \
1115
+ DEFINE_EVENT_READER(classname, classvar, name); \
1116
+ DEFINE_EVENT_WRITER(classname, classvar, name); \
1117
+ } while(0)
1118
+
1119
+ void rubysdl2_init_event(void)
1120
+ {
1121
+ cEvent = rb_define_class_under(mSDL2, "Event", rb_cObject);
1122
+ rb_define_alloc_func(cEvent, Event_s_allocate);
1123
+ rb_define_singleton_method(cEvent, "poll", Event_s_poll, 0);
1124
+ rb_define_singleton_method(cEvent, "enabled?", Event_s_enabled_p, 0);
1125
+ rb_define_singleton_method(cEvent, "enable=", Event_s_set_enable, 1);
1126
+
1127
+ cEvQuit = rb_define_class_under(cEvent, "Quit", cEvent);
1128
+ cEvWindow = rb_define_class_under(cEvent, "Window", cEvent);
1129
+ cEvSysWM = rb_define_class_under(cEvent, "SysWM", cEvent);
1130
+ cEvKeyboard = rb_define_class_under(cEvent, "Keyboard", cEvent);
1131
+ cEvKeyUp = rb_define_class_under(cEvent, "KeyUp", cEvKeyboard);
1132
+ cEvKeyDown = rb_define_class_under(cEvent, "KeyDown", cEvKeyboard);
1133
+ cEvTextEditing = rb_define_class_under(cEvent, "TextEditing", cEvent);
1134
+ cEvTextInput = rb_define_class_under(cEvent, "TextInput", cEvent);
1135
+ cEvMouseButton = rb_define_class_under(cEvent, "MouseButton", cEvent);
1136
+ cEvMouseButtonDown = rb_define_class_under(cEvent, "MouseButtonDown", cEvMouseButton);
1137
+ cEvMouseButtonUp = rb_define_class_under(cEvent, "MouseButtonUp", cEvMouseButton);
1138
+ cEvMouseMotion = rb_define_class_under(cEvent, "MouseMotion", cEvent);
1139
+ cEvMouseWheel = rb_define_class_under(cEvent, "MouseWheel", cEvent);
1140
+ cEvJoyButton = rb_define_class_under(cEvent, "JoyButton", cEvent);
1141
+ cEvJoyButtonDown = rb_define_class_under(cEvent, "JoyButtonDown", cEvJoyButton);
1142
+ cEvJoyButtonUp = rb_define_class_under(cEvent, "JoyButtonUp", cEvJoyButton);
1143
+ cEvJoyAxisMotion = rb_define_class_under(cEvent, "JoyAxisMotion", cEvent);
1144
+ cEvJoyBallMotion = rb_define_class_under(cEvent, "JoyBallMotion", cEvent);
1145
+ cEvJoyHatMotion = rb_define_class_under(cEvent, "JoyHatMotion", cEvent);
1146
+ cEvJoyDevice = rb_define_class_under(cEvent, "JoyDevice", cEvent);
1147
+ cEvJoyDeviceAdded = rb_define_class_under(cEvent, "JoyDeviceAdded", cEvJoyDevice);
1148
+ cEvJoyDeviceRemoved = rb_define_class_under(cEvent, "JoyDeviceRemoved", cEvJoyDevice);
1149
+ cEvControllerAxisMotion = rb_define_class_under(cEvent, "ControllerAxisMotion", cEvent);
1150
+ cEvControllerButton = rb_define_class_under(cEvent, "ControllerButton", cEvent);
1151
+ cEvControllerButtonDown = rb_define_class_under(cEvent, "ControllerButtonDown", cEvControllerButton);
1152
+ cEvControllerButtonUp = rb_define_class_under(cEvent, "ControllerButtonUp", cEvControllerButton);
1153
+ cEvControllerDevice = rb_define_class_under(cEvent, "ControllerDevice", cEvent);
1154
+ cEvControllerDeviceAdded = rb_define_class_under(cEvent, "ControllerDeviceAdded", cEvControllerDevice);
1155
+ cEvControllerDeviceRemoved = rb_define_class_under(cEvent, "ControllerDeviceRemoved", cEvControllerDevice);
1156
+ cEvControllerDeviceRemapped = rb_define_class_under(cEvent, "ControllerDeviceRemapped", cEvControllerDevice);
1157
+ cEvTouchFinger = rb_define_class_under(cEvent, "TouchFinger", cEvent);
1158
+ cEvFingerUp = rb_define_class_under(cEvent, "FingerUp", cEvTouchFinger);
1159
+ cEvFingerDown = rb_define_class_under(cEvent, "FingerDown", cEvTouchFinger);
1160
+ cEvFingerMotion = rb_define_class_under(cEvent, "FingerMotion", cEvTouchFinger);
1161
+ cEvMultigesture = rb_define_class_under(cEvent, "Multigesture", cEvent);
1162
+
1163
+
1164
+ DEFINE_EVENT_READER(Event, cEvent, type);
1165
+ DEFINE_EVENT_ACCESSOR(Event, cEvent, timestamp);
1166
+ rb_define_method(cEvent, "inspect", Event_inspect, 0);
1167
+ rb_define_method(cEvent, "window", Event_window, 0);
1168
+
1169
+ DEFINE_EVENT_ACCESSOR(Window, cEvWindow, window_id);
1170
+ DEFINE_EVENT_ACCESSOR(Window, cEvWindow, event);
1171
+ DEFINE_EVENT_ACCESSOR(Window, cEvWindow, data1);
1172
+ DEFINE_EVENT_ACCESSOR(Window, cEvWindow, data2);
1173
+ rb_define_method(cEvWindow, "inspect", EvWindow_inspect, 0);
1174
+ #define DEFINE_EVENT_ID_CONST(t) \
1175
+ rb_define_const(cEvWindow, #t, INT2NUM(SDL_WINDOWEVENT_##t))
1176
+ DEFINE_EVENT_ID_CONST(NONE);
1177
+ DEFINE_EVENT_ID_CONST(SHOWN);
1178
+ DEFINE_EVENT_ID_CONST(HIDDEN);
1179
+ DEFINE_EVENT_ID_CONST(EXPOSED);
1180
+ DEFINE_EVENT_ID_CONST(MOVED);
1181
+ DEFINE_EVENT_ID_CONST(RESIZED);
1182
+ DEFINE_EVENT_ID_CONST(SIZE_CHANGED);
1183
+ DEFINE_EVENT_ID_CONST(MINIMIZED);
1184
+ DEFINE_EVENT_ID_CONST(MAXIMIZED);
1185
+ DEFINE_EVENT_ID_CONST(RESTORED);
1186
+ DEFINE_EVENT_ID_CONST(ENTER);
1187
+ DEFINE_EVENT_ID_CONST(LEAVE);
1188
+ DEFINE_EVENT_ID_CONST(FOCUS_GAINED);
1189
+ DEFINE_EVENT_ID_CONST(FOCUS_LOST);
1190
+ DEFINE_EVENT_ID_CONST(CLOSE);
1191
+
1192
+
1193
+ DEFINE_EVENT_ACCESSOR(Keyboard, cEvKeyboard, window_id);
1194
+ DEFINE_EVENT_ACCESSOR(Keyboard, cEvKeyboard, pressed);
1195
+ DEFINE_EVENT_ACCESSOR(Keyboard, cEvKeyboard, repeat);
1196
+ DEFINE_EVENT_ACCESSOR(Keyboard, cEvKeyboard, scancode);
1197
+ DEFINE_EVENT_ACCESSOR(Keyboard, cEvKeyboard, sym);
1198
+ DEFINE_EVENT_ACCESSOR(Keyboard, cEvKeyboard, mod);
1199
+ rb_define_alias(cEvKeyboard, "pressed?", "pressed");
1200
+ rb_define_alias(cEvKeyboard, "repeat?", "repeat");
1201
+ rb_define_method(cEvKeyboard, "inspect", EvKeyboard_inspect, 0);
1202
+
1203
+ DEFINE_EVENT_ACCESSOR(TextEditing, cEvTextEditing, window_id);
1204
+ DEFINE_EVENT_ACCESSOR(TextEditing, cEvTextEditing, text);
1205
+ DEFINE_EVENT_ACCESSOR(TextEditing, cEvTextEditing, start);
1206
+ DEFINE_EVENT_ACCESSOR(TextEditing, cEvTextEditing, length);
1207
+ rb_define_method(cEvTextEditing, "inspect", EvTextEditing_inspect, 0);
1208
+
1209
+ DEFINE_EVENT_ACCESSOR(TextInput, cEvTextInput, window_id);
1210
+ DEFINE_EVENT_ACCESSOR(TextInput, cEvTextInput, text);
1211
+ rb_define_method(cEvTextInput, "inspect", EvTextInput_inspect, 0);
1212
+
1213
+ DEFINE_EVENT_ACCESSOR(MouseButton, cEvMouseButton, window_id);
1214
+ DEFINE_EVENT_ACCESSOR(MouseButton, cEvMouseButton, which);
1215
+ DEFINE_EVENT_ACCESSOR(MouseButton, cEvMouseButton, button);
1216
+ DEFINE_EVENT_ACCESSOR(MouseButton, cEvMouseButton, pressed);
1217
+ #if SDL_VERSION_ATLEAST(2,0,2)
1218
+ DEFINE_EVENT_ACCESSOR(MouseButton, cEvMouseButton, clicks);
1219
+ #endif
1220
+ DEFINE_EVENT_ACCESSOR(MouseButton, cEvMouseButton, x);
1221
+ DEFINE_EVENT_ACCESSOR(MouseButton, cEvMouseButton, y);
1222
+ rb_define_alias(cEvMouseButton, "pressed?", "pressed");
1223
+ rb_define_method(cEvMouseButton, "inspect", EvMouseButton_inspect, 0);
1224
+
1225
+ DEFINE_EVENT_ACCESSOR(MouseMotion, cEvMouseMotion, window_id);
1226
+ DEFINE_EVENT_ACCESSOR(MouseMotion, cEvMouseMotion, which);
1227
+ DEFINE_EVENT_ACCESSOR(MouseMotion, cEvMouseMotion, state);
1228
+ DEFINE_EVENT_ACCESSOR(MouseMotion, cEvMouseMotion, x);
1229
+ DEFINE_EVENT_ACCESSOR(MouseMotion, cEvMouseMotion, y);
1230
+ DEFINE_EVENT_ACCESSOR(MouseMotion, cEvMouseMotion, xrel);
1231
+ DEFINE_EVENT_ACCESSOR(MouseMotion, cEvMouseMotion, yrel);
1232
+ rb_define_method(cEvMouseMotion, "inspect", EvMouseMotion_inspect, 0);
1233
+
1234
+ DEFINE_EVENT_ACCESSOR(MouseWheel, cEvMouseWheel, window_id);
1235
+ DEFINE_EVENT_ACCESSOR(MouseWheel, cEvMouseWheel, which);
1236
+ DEFINE_EVENT_ACCESSOR(MouseWheel, cEvMouseWheel, x);
1237
+ DEFINE_EVENT_ACCESSOR(MouseWheel, cEvMouseWheel, y);
1238
+ rb_define_method(cEvMouseWheel, "inspect", EvMouseWheel_inspect, 0);
1239
+
1240
+ DEFINE_EVENT_ACCESSOR(JoyButton, cEvJoyButton, which);
1241
+ DEFINE_EVENT_ACCESSOR(JoyButton, cEvJoyButton, button);
1242
+ DEFINE_EVENT_ACCESSOR(JoyButton, cEvJoyButton, pressed);
1243
+ rb_define_alias(cEvJoyButton, "pressed?", "pressed");
1244
+ rb_define_method(cEvJoyButton, "inspect", EvJoyButton_inspect, 0);
1245
+
1246
+ DEFINE_EVENT_ACCESSOR(JoyAxisMotion, cEvJoyAxisMotion, which);
1247
+ DEFINE_EVENT_ACCESSOR(JoyAxisMotion, cEvJoyAxisMotion, axis);
1248
+ DEFINE_EVENT_ACCESSOR(JoyAxisMotion, cEvJoyAxisMotion, value);
1249
+ rb_define_method(cEvJoyAxisMotion, "inspect", EvJoyAxisMotion_inspect, 0);
1250
+
1251
+ DEFINE_EVENT_ACCESSOR(JoyBallMotion, cEvJoyBallMotion, which);
1252
+ DEFINE_EVENT_ACCESSOR(JoyBallMotion, cEvJoyBallMotion, ball);
1253
+ DEFINE_EVENT_ACCESSOR(JoyBallMotion, cEvJoyBallMotion, xrel);
1254
+ DEFINE_EVENT_ACCESSOR(JoyBallMotion, cEvJoyBallMotion, yrel);
1255
+ rb_define_method(cEvJoyBallMotion, "inspect", EvJoyBallMotion_inspect, 0);
1256
+
1257
+ DEFINE_EVENT_ACCESSOR(JoyHatMotion, cEvJoyHatMotion, which);
1258
+ DEFINE_EVENT_ACCESSOR(JoyHatMotion, cEvJoyHatMotion, hat);
1259
+ DEFINE_EVENT_ACCESSOR(JoyHatMotion, cEvJoyHatMotion, value);
1260
+ rb_define_method(cEvJoyHatMotion, "inspect", EvJoyHatMotion_inspect, 0);
1261
+
1262
+ DEFINE_EVENT_ACCESSOR(JoyDevice, cEvJoyDevice, which);
1263
+ rb_define_method(cEvJoyDevice, "inspect", EvJoyDevice_inspect, 0);
1264
+
1265
+ DEFINE_EVENT_ACCESSOR(ControllerAxis, cEvControllerAxisMotion, which);
1266
+ DEFINE_EVENT_ACCESSOR(ControllerAxis, cEvControllerAxisMotion, axis);
1267
+ DEFINE_EVENT_ACCESSOR(ControllerAxis, cEvControllerAxisMotion, value);
1268
+ rb_define_method(cEvControllerAxisMotion, "inspect", ControllerAxis_inspect, 0);
1269
+
1270
+ DEFINE_EVENT_ACCESSOR(ControllerButton, cEvControllerButton, which);
1271
+ DEFINE_EVENT_ACCESSOR(ControllerButton, cEvControllerButton, button);
1272
+ DEFINE_EVENT_ACCESSOR(ControllerButton, cEvControllerButton, pressed);
1273
+ rb_define_method(cEvControllerButton, "inspect", ControllerButton_inspect, 0);
1274
+
1275
+ DEFINE_EVENT_ACCESSOR(ControllerDevice, cEvControllerDevice, which);
1276
+ rb_define_method(cEvControllerDevice, "inspect", ControllerDevice_inspect, 0);
1277
+
1278
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, touch_id);
1279
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, finger_id);
1280
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, x);
1281
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, y);
1282
+ DEFINE_EVENT_ACCESSOR(TouchFinger, cEvTouchFinger, pressure);
1283
+ rb_define_method(cEvTouchFinger, "inspect", EvTouchFinger_inspect, 0);
1284
+
1285
+ DEFINE_EVENT_ACCESSOR(FingerMotion, cEvFingerMotion, dx);
1286
+ DEFINE_EVENT_ACCESSOR(FingerMotion, cEvFingerMotion, dy);
1287
+ rb_define_method(cEvFingerMotion, "inspect", EvFingerMotion_inspect, 0);
1288
+
1289
+ DEFINE_EVENT_ACCESSOR(Multigesture, cEvMultigesture, touch_id);
1290
+ DEFINE_EVENT_ACCESSOR(Multigesture, cEvMultigesture, d_theta);
1291
+ DEFINE_EVENT_ACCESSOR(Multigesture, cEvMultigesture, d_dist);
1292
+ DEFINE_EVENT_ACCESSOR(Multigesture, cEvMultigesture, x);
1293
+ DEFINE_EVENT_ACCESSOR(Multigesture, cEvMultigesture, y);
1294
+ DEFINE_EVENT_ACCESSOR(Multigesture, cEvMultigesture, num_fingers);
1295
+ rb_define_method(cEvMultigesture, "inspect", EvMultigesture_inspect, 0);
1296
+
1297
+ init_event_type_to_class();
1298
+ }