sfml3-rb 0.0.1 → 0.2.2

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 (191) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +342 -0
  3. data/README.md +51 -14
  4. data/TODO.md +199 -0
  5. data/ext/audio/audio_enums.c +131 -0
  6. data/ext/audio/audio_enums.h +18 -0
  7. data/ext/audio/effect_processor.c +233 -0
  8. data/ext/audio/effect_processor.h +25 -0
  9. data/ext/audio/listener.c +83 -0
  10. data/ext/audio/listener.h +8 -0
  11. data/ext/audio/music.c +174 -0
  12. data/ext/audio/music.h +14 -0
  13. data/ext/audio/sound.c +139 -0
  14. data/ext/audio/sound.h +14 -0
  15. data/ext/audio/sound_buffer.c +274 -0
  16. data/ext/audio/sound_buffer.h +18 -0
  17. data/ext/audio/sound_buffer_recorder.c +109 -0
  18. data/ext/audio/sound_buffer_recorder.h +14 -0
  19. data/ext/audio/sound_recorder.c +268 -0
  20. data/ext/audio/sound_recorder.h +14 -0
  21. data/ext/audio/sound_source.h +13 -0
  22. data/ext/audio/sound_source.inc +271 -0
  23. data/ext/audio/sound_source_cone.c +138 -0
  24. data/ext/audio/sound_source_cone.h +20 -0
  25. data/ext/audio/sound_stream.c +294 -0
  26. data/ext/audio/sound_stream.h +14 -0
  27. data/ext/{exceptions.c → core/exceptions.c} +10 -8
  28. data/ext/{ext → core}/exceptions.h +3 -3
  29. data/ext/core/foreign_thread.c +149 -0
  30. data/ext/core/foreign_thread.h +31 -0
  31. data/ext/core/macros.h +8 -0
  32. data/ext/{ext → core}/sfml.h +5 -3
  33. data/ext/core/unicode.c +46 -0
  34. data/ext/core/unicode.h +25 -0
  35. data/ext/ext.c +125 -14
  36. data/ext/extconf.rb +51 -6
  37. data/ext/graphics/blend_mode.c +261 -0
  38. data/ext/graphics/blend_mode.h +18 -0
  39. data/ext/graphics/circle.c +319 -0
  40. data/ext/{ext/klass/drawable → graphics}/circle.h +3 -3
  41. data/ext/graphics/color.c +318 -0
  42. data/ext/graphics/color.h +37 -0
  43. data/ext/{drawable.c → graphics/drawable.c} +11 -11
  44. data/ext/graphics/drawable.h +10 -0
  45. data/ext/graphics/enums.c +123 -0
  46. data/ext/graphics/enums.h +20 -0
  47. data/ext/graphics/font.c +148 -0
  48. data/ext/graphics/font.h +14 -0
  49. data/ext/graphics/glyph.c +60 -0
  50. data/ext/graphics/glyph.h +14 -0
  51. data/ext/graphics/image.c +205 -0
  52. data/ext/graphics/image.h +16 -0
  53. data/ext/graphics/polygon.c +300 -0
  54. data/ext/graphics/polygon.h +10 -0
  55. data/ext/graphics/rect.c +287 -0
  56. data/ext/graphics/rect.h +30 -0
  57. data/ext/graphics/rectangle.c +302 -0
  58. data/ext/graphics/rectangle.h +10 -0
  59. data/ext/graphics/render_state.c +204 -0
  60. data/ext/graphics/render_state.h +18 -0
  61. data/ext/graphics/render_target.inc +181 -0
  62. data/ext/graphics/render_texture.c +182 -0
  63. data/ext/graphics/render_texture.h +14 -0
  64. data/ext/graphics/shader.c +540 -0
  65. data/ext/graphics/shader.h +14 -0
  66. data/ext/graphics/shape.c +311 -0
  67. data/ext/graphics/shape.h +10 -0
  68. data/ext/graphics/sprite.c +249 -0
  69. data/ext/graphics/sprite.h +10 -0
  70. data/ext/graphics/stencil_mode.c +211 -0
  71. data/ext/graphics/stencil_mode.h +18 -0
  72. data/ext/graphics/target.c +133 -0
  73. data/ext/graphics/target.h +40 -0
  74. data/ext/graphics/text.c +344 -0
  75. data/ext/graphics/text.h +10 -0
  76. data/ext/graphics/texture.c +379 -0
  77. data/ext/graphics/texture.h +16 -0
  78. data/ext/graphics/transform.c +372 -0
  79. data/ext/graphics/transform.h +35 -0
  80. data/ext/{transformable.c → graphics/transformable.c} +168 -144
  81. data/ext/{ext/klass → graphics}/transformable.h +3 -3
  82. data/ext/graphics/vertex.c +179 -0
  83. data/ext/graphics/vertex.h +23 -0
  84. data/ext/graphics/vertex_array.c +127 -0
  85. data/ext/graphics/vertex_array.h +10 -0
  86. data/ext/graphics/vertex_buffer.c +211 -0
  87. data/ext/graphics/vertex_buffer.h +14 -0
  88. data/ext/{view.c → graphics/view.c} +168 -169
  89. data/ext/{ext/klass → graphics}/view.h +3 -3
  90. data/ext/network/ftp.c +405 -0
  91. data/ext/network/ftp.h +20 -0
  92. data/ext/network/http.c +243 -0
  93. data/ext/network/http.h +18 -0
  94. data/ext/network/ip_address.c +164 -0
  95. data/ext/network/ip_address.h +20 -0
  96. data/ext/network/network_enums.c +298 -0
  97. data/ext/network/network_enums.h +26 -0
  98. data/ext/network/packet.c +189 -0
  99. data/ext/network/packet.h +14 -0
  100. data/ext/network/socket_selector.c +142 -0
  101. data/ext/network/socket_selector.h +14 -0
  102. data/ext/network/tcp_listener.c +115 -0
  103. data/ext/network/tcp_listener.h +14 -0
  104. data/ext/network/tcp_socket.c +199 -0
  105. data/ext/network/tcp_socket.h +17 -0
  106. data/ext/network/udp_socket.c +190 -0
  107. data/ext/network/udp_socket.h +14 -0
  108. data/ext/ports.rb +97 -21
  109. data/ext/system/buffer.c +77 -0
  110. data/ext/system/buffer.h +14 -0
  111. data/ext/system/clock.c +100 -0
  112. data/ext/{ext/klass → system}/clock.h +3 -3
  113. data/ext/system/input_stream.c +229 -0
  114. data/ext/system/input_stream.h +23 -0
  115. data/ext/system/sleep.c +16 -0
  116. data/ext/system/sleep.h +8 -0
  117. data/ext/system/time.c +218 -0
  118. data/ext/system/time.h +18 -0
  119. data/ext/system/vec2.c +251 -0
  120. data/ext/system/vec2.h +55 -0
  121. data/ext/system/vec3.c +219 -0
  122. data/ext/system/vec3.h +18 -0
  123. data/ext/window/clipboard.c +89 -0
  124. data/ext/window/clipboard.h +8 -0
  125. data/ext/window/context.c +70 -0
  126. data/ext/window/context.h +8 -0
  127. data/ext/window/context_settings.c +220 -0
  128. data/ext/window/context_settings.h +18 -0
  129. data/ext/window/cursor.c +56 -0
  130. data/ext/window/cursor.h +14 -0
  131. data/ext/window/event.c +216 -0
  132. data/ext/window/event.h +14 -0
  133. data/ext/{event_name.c → window/event_name.c} +2 -2
  134. data/ext/window/event_name.h +8 -0
  135. data/ext/window/input_enums.c +261 -0
  136. data/ext/window/input_enums.h +36 -0
  137. data/ext/window/joystick.c +60 -0
  138. data/ext/window/joystick.h +8 -0
  139. data/ext/{keyboard.c → window/keyboard.c} +74 -2
  140. data/ext/window/keyboard.h +12 -0
  141. data/ext/window/mouse.c +70 -0
  142. data/ext/window/mouse.h +8 -0
  143. data/ext/window/sensor.c +30 -0
  144. data/ext/window/sensor.h +8 -0
  145. data/ext/window/touch.c +49 -0
  146. data/ext/window/touch.h +8 -0
  147. data/ext/window/video_mode.c +133 -0
  148. data/ext/window/video_mode.h +14 -0
  149. data/ext/window/vulkan.c +44 -0
  150. data/ext/window/vulkan.h +8 -0
  151. data/ext/window/window.c +414 -0
  152. data/ext/{ext/klass → window}/window.h +3 -3
  153. data/lib/sfml/version.rb +4 -2
  154. data/lib/sfml.rb +2 -0
  155. metadata +163 -56
  156. data/ext/circle.c +0 -198
  157. data/ext/clock.c +0 -65
  158. data/ext/color.c +0 -43
  159. data/ext/event.c +0 -148
  160. data/ext/ext/klass/color.h +0 -26
  161. data/ext/ext/klass/drawable/image.h +0 -4
  162. data/ext/ext/klass/drawable/polygon.h +0 -4
  163. data/ext/ext/klass/drawable/rectangle.h +0 -4
  164. data/ext/ext/klass/drawable/sprite.h +0 -4
  165. data/ext/ext/klass/drawable/texture.h +0 -4
  166. data/ext/ext/klass/event/event_name.h +0 -8
  167. data/ext/ext/klass/event.h +0 -12
  168. data/ext/ext/klass/keyboard.h +0 -8
  169. data/ext/ext/klass/render_state.h +0 -16
  170. data/ext/ext/klass/target.h +0 -18
  171. data/ext/ext/klass/transform.h +0 -17
  172. data/ext/ext/klass/video_mode.h +0 -12
  173. data/ext/ext/module/drawable/drawable.h +0 -10
  174. data/ext/ext/module/transform.h +0 -18
  175. data/ext/ext/module.h +0 -10
  176. data/ext/ext/rect.h +0 -16
  177. data/ext/ext/style_name.h +0 -11
  178. data/ext/ext/vec2.h +0 -38
  179. data/ext/image.c +0 -5
  180. data/ext/polygon.c +0 -5
  181. data/ext/rect.c +0 -26
  182. data/ext/rectangle.c +0 -5
  183. data/ext/render_state.c +0 -109
  184. data/ext/sprite.c +0 -5
  185. data/ext/style_name.c +0 -15
  186. data/ext/target.c +0 -106
  187. data/ext/texture.c +0 -5
  188. data/ext/transform.c +0 -107
  189. data/ext/vec2.c +0 -42
  190. data/ext/video_mode.c +0 -78
  191. data/ext/window.c +0 -274
data/ext/target.c DELETED
@@ -1,106 +0,0 @@
1
- #include "ext/klass/target.h"
2
-
3
- #include <stdio.h>
4
- #include <stdlib.h>
5
- #include <ext/klass/drawable/circle.h>
6
- #include <ext/klass/render_state.h>
7
-
8
- #include "ext/module/transform.h"
9
- #include "ext/klass/transformable.h"
10
- #include "ext/klass/view.h"
11
- #include "ext/klass/window.h"
12
- #include "ext/vec2.h"
13
- #include "ext/rect.h"
14
- #include "ext/module.h"
15
- #include "ext/sfml.h"
16
-
17
- static VALUE rb_cTarget;
18
-
19
- static Target *RenderTarget_create(sfRenderWindow *c_window) {
20
- Target *target = malloc(sizeof(Target));
21
-
22
- target->window = c_window;
23
-
24
- return target;
25
- }
26
-
27
- static void RenderTarget_free(void *ptr) {
28
- free(ptr);
29
- }
30
-
31
- static VALUE RenderTarget_new(VALUE klass, VALUE rb_window) {
32
- VALUE self;
33
- Target *target;
34
-
35
- if (!rb_obj_is_kind_of(rb_window, Get_Klass_Window())) {
36
- rb_raise(rb_eArgError, "Expected a Window object");
37
- }
38
-
39
- target = RenderTarget_create(Get_Window_Struct(rb_window));
40
- self = Data_Wrap_Struct(klass, 0, RenderTarget_free, target);
41
-
42
- VALUE argv[1] = {rb_window};
43
- rb_obj_call_init(self, 1, argv);
44
-
45
- return self;
46
- }
47
-
48
- static VALUE RenderTarget_init(VALUE self, VALUE rb_window) {
49
- return self;
50
- }
51
-
52
- static VALUE RenderTarget_draw(VALUE self, VALUE rb_drawable, VALUE rb_state) {
53
- Target *target = Get_Target_Struct(self);
54
-
55
- if (rb_obj_is_kind_of(rb_drawable, Get_Klass_Circle())) {
56
- sfRenderWindow_drawCircleShape(target->window, Get_Circle_Struct(rb_drawable), Get_RenderState_Struct(rb_state));
57
- } else {
58
- rb_funcall(rb_drawable, rb_intern("draw"), 2, self, rb_state);
59
- }
60
-
61
- return self;
62
- }
63
-
64
- static VALUE RenderTarget_set_view(VALUE self, VALUE rb_view) {
65
- if (!rb_obj_is_kind_of(rb_view, Get_Klass_View())) {
66
- rb_raise(rb_eArgError, "Expected a View object");
67
- }
68
-
69
- sfRenderWindow_setView(((Target *) Get_Target_Struct(self))->window, Get_View_Struct(rb_view));
70
-
71
- return Qnil;
72
- }
73
-
74
- static VALUE RenderTarget_get_view(VALUE self) {
75
- return Get_Casting_View(sfView_copy(sfRenderWindow_getView(((Target *) Get_Target_Struct(self))->window)));
76
- }
77
-
78
- void Init_Target(VALUE rb_module) {
79
- rb_cTarget = rb_define_class_under(rb_module, "Target", rb_cObject);
80
-
81
- rb_define_singleton_method(rb_cTarget, "new", RenderTarget_new, 1);
82
-
83
- // methods
84
- rb_define_method(rb_cTarget, "initialize", RenderTarget_init, 1);
85
- rb_define_method(rb_cTarget, "draw", RenderTarget_draw, 2);
86
-
87
- // setters
88
- rb_define_method(rb_cTarget, "view=", RenderTarget_set_view, 1);
89
-
90
- // getters
91
- rb_define_method(rb_cTarget, "view", RenderTarget_get_view, 0);
92
- }
93
-
94
- VALUE Get_Klass_Target(void) {
95
- return rb_cTarget;
96
- }
97
-
98
- void *Get_Target_Struct(VALUE self) {
99
- Target *ptr;
100
- Data_Get_Struct(self, Target, ptr);
101
- return ptr;
102
- }
103
-
104
- VALUE Get_New_Target(VALUE rb_window) {
105
- return RenderTarget_new(Get_Klass_Target(), rb_window);
106
- }
data/ext/texture.c DELETED
@@ -1,5 +0,0 @@
1
- //
2
- // Created by Sealtiel on 03/06/2022.
3
- //
4
-
5
- #include "ext/klass/drawable/texture.h"
data/ext/transform.c DELETED
@@ -1,107 +0,0 @@
1
- #include "ext/module/transform.h"
2
-
3
- #include <ruby.h>
4
- #include <stdio.h>
5
-
6
- #include "ext/vec2.h"
7
- #include "ext/rect.h"
8
- #include "ext/module.h"
9
- #include "ext/sfml.h"
10
-
11
-
12
- static VALUE rb_mTransform;
13
-
14
- VALUE Transform_combine(VALUE self, VALUE rb_arr_a, VALUE rb_arr_b) {
15
- sfTransform transform_a, transform_b;
16
- float matrix_a[MATRIX_LENGTH], matrix_b[MATRIX_LENGTH];
17
-
18
- Transform_ArrayToMatrix(rb_arr_a, matrix_a);
19
- Transform_ArrayToMatrix(rb_arr_b, matrix_b);
20
-
21
- Transform_SwapMatrix(matrix_a, transform_a.matrix);
22
- Transform_SwapMatrix(matrix_b, transform_b.matrix);
23
-
24
- sfTransform_combine(&transform_a, &transform_b);
25
-
26
- return Transform_MatrixToArray(transform_a.matrix);
27
- }
28
-
29
- VALUE Transform_inverse(VALUE self, VALUE rb_matrix) {
30
- sfTransform transform;
31
- float matrix[MATRIX_LENGTH];
32
-
33
- Transform_ArrayToMatrix(rb_matrix, matrix);
34
- Transform_SwapMatrix(matrix, transform.matrix);
35
-
36
- return Transform_MatrixToArray(sfTransform_getInverse(&transform).matrix);
37
- }
38
-
39
- void Init_Transform(VALUE rb_module) {
40
- rb_mTransform = rb_define_module_under(rb_module, "Transform");
41
-
42
- rb_define_module_function(rb_mTransform, "combine", Transform_combine, 2);
43
- rb_define_module_function(rb_mTransform, "inverse", Transform_inverse, 1);
44
- }
45
-
46
- VALUE Transform_MatrixToArray(float *c_matrix) {
47
- VALUE rb_arr;
48
- size_t i;
49
-
50
- if (c_matrix == NULL) {
51
- return Qnil;
52
- }
53
-
54
- rb_arr = rb_ary_new();
55
-
56
- for (i = 0; i < MATRIX_LENGTH; i++) {
57
- rb_ary_push(rb_arr, DBL2NUM(c_matrix[i]));
58
- }
59
-
60
- return rb_arr;
61
- }
62
-
63
- void Transform_ArrayToMatrix(VALUE rb_matrix, float *c_matrix) {
64
- size_t i;
65
-
66
- if (c_matrix == NULL) {
67
- return;
68
- }
69
-
70
- if (rb_array_len(rb_matrix) != MATRIX_LENGTH) {
71
- return;
72
- }
73
-
74
- for (i = 0; i < MATRIX_LENGTH; i++) {
75
- c_matrix[i] = NUM2DBL(rb_ary_entry(rb_matrix, (long) i));
76
- }
77
- }
78
-
79
- void Transform_SwapMatrix(const float *c_matrix_a, float *c_matrix_b) {
80
- size_t i;
81
-
82
- if (c_matrix_a == NULL || c_matrix_b == NULL) {
83
- return;
84
- }
85
-
86
- for (i = 0; i < MATRIX_LENGTH; i++) {
87
- c_matrix_b[i] = c_matrix_a[i];
88
- }
89
- }
90
-
91
- sfTransform Transform_ArrayToTransform(VALUE rb_matrix) {
92
- float c_matrix[MATRIX_LENGTH];
93
- sfTransform transform;
94
-
95
- Transform_ArrayToMatrix(rb_matrix, c_matrix);
96
- Transform_SwapMatrix(c_matrix, transform.matrix);
97
-
98
- return transform;
99
- }
100
-
101
- VALUE Transform_TransformToArray(sfTransform c_transform) {
102
- float c_matrix[MATRIX_LENGTH];
103
-
104
- Transform_SwapMatrix(c_transform.matrix, c_matrix);
105
-
106
- return Transform_MatrixToArray(c_matrix);
107
- }
data/ext/vec2.c DELETED
@@ -1,42 +0,0 @@
1
- #include "ext/vec2.h"
2
-
3
- #include <stdio.h>
4
- #include <stdlib.h>
5
-
6
- #include "ext/exceptions.h"
7
-
8
- VALUE vec2_new(float x, float y) {
9
- VALUE rb_vec;
10
-
11
- rb_vec = rb_ary_new();
12
-
13
- rb_ary_store(rb_vec, 0, DBL2NUM(x));
14
- rb_ary_store(rb_vec, 1, DBL2NUM(y));
15
-
16
- return rb_vec;
17
- }
18
-
19
- void vec2_check(VALUE rb_arr) {
20
- if (rb_array_len(rb_arr) != 2) {
21
- raise_invalid_argument_class(rb_cArray);
22
- }
23
- }
24
-
25
- VALUE vec2f_new_from_c(sfVector2f c_vec) {
26
- return VEC2_C2RB(c_vec);
27
- }
28
-
29
- sfVector2i vec2i_new_from_ruby(VALUE rb_arr) {
30
- sfVector2i vec = VEC2_RB2C_T(int, rb_arr);
31
- return vec;
32
- }
33
-
34
- sfVector2u vec2u_new_from_ruby(VALUE rb_arr) {
35
- sfVector2u vec = VEC2_RB2C_T(unsigned, rb_arr);
36
- return vec;
37
- }
38
-
39
- sfVector2f vec2f_new_from_ruby(VALUE rb_arr) {
40
- sfVector2f vec = VEC2_RB2C_T(float, rb_arr);
41
- return vec;
42
- }
data/ext/video_mode.c DELETED
@@ -1,78 +0,0 @@
1
- #include "ext/klass/video_mode.h"
2
-
3
- #include <ruby.h>
4
- #include <stdio.h>
5
-
6
- #include "ext/sfml.h"
7
- #include "ext/module.h"
8
-
9
- static VALUE rb_cMode;
10
-
11
- static sfVideoMode *VideoMode_create(unsigned width, unsigned heigth, unsigned bitsPerPixel) {
12
- sfVideoMode *mode = malloc(sizeof(sfVideoMode));
13
-
14
- mode->size.x = width;
15
- mode->size.y = heigth;
16
- mode->bitsPerPixel = bitsPerPixel;
17
-
18
- return mode;
19
- }
20
-
21
- static void VideoMode_free(void *ptr) {
22
- free(ptr);
23
- }
24
-
25
- static VALUE VideoMode_new(VALUE klass, VALUE rb_width, VALUE rb_height, VALUE rb_bits) {
26
- VALUE self;
27
- sfVideoMode *ptr;
28
-
29
- VALUE argv[] = {rb_width, rb_height, rb_bits};
30
-
31
- ptr = VideoMode_create(NUM2INT(rb_width), NUM2INT(rb_height), NUM2INT(rb_bits));
32
- self = Data_Wrap_Struct(klass, 0, VideoMode_free, ptr);
33
-
34
- rb_obj_call_init(self, 3, argv);
35
-
36
- return self;
37
- }
38
-
39
- static VALUE VideoMode_init(VALUE self, VALUE rb_width, VALUE rb_height, VALUE rb_bits) {
40
- rb_iv_set(self, "@width", rb_width);
41
- rb_iv_set(self, "@height", rb_height);
42
- rb_iv_set(self, "@bits", rb_bits);
43
-
44
- return self;
45
- }
46
-
47
- static VALUE VideoMode_is_available(VALUE self) {
48
- sfVideoMode *ptr = Get_Mode_Struct(self);
49
-
50
- if (sfVideoMode_isValid(*ptr)) {
51
- return Qtrue;
52
- }
53
-
54
- return Qfalse;
55
- }
56
-
57
- void Init_VideoMode(VALUE rb_module) {
58
- rb_cMode = rb_define_class_under(rb_module, "VideoMode", rb_cObject);
59
-
60
- rb_define_singleton_method(rb_cMode, "new", VideoMode_new, 3);
61
-
62
- // methods
63
- rb_define_method(rb_cMode, "initialize", VideoMode_init, 3);
64
- rb_define_method(rb_cMode, "available?", VideoMode_is_available, 0);
65
- rb_define_attr(rb_cMode, "width", 1, 0);
66
- rb_define_attr(rb_cMode, "height", 1, 0);
67
- rb_define_attr(rb_cMode, "bits", 1, 0);
68
- }
69
-
70
- void *Get_Mode_Struct(VALUE self) {
71
- sfVideoMode *ptr;
72
- Data_Get_Struct(self, sfVideoMode, ptr);
73
- return ptr;
74
- }
75
-
76
- VALUE Get_Klass_Mode() {
77
- return rb_cMode;
78
- }
data/ext/window.c DELETED
@@ -1,274 +0,0 @@
1
- #include "ext/klass/window.h"
2
-
3
- #include <stdio.h>
4
-
5
- #include "ext/klass/render_state.h"
6
- #include "ext/module/drawable/drawable.h"
7
- #include "ext/klass/drawable/circle.h"
8
- #include "ext/klass/target.h"
9
- #include "ext/klass/view.h"
10
- #include "ext/klass/video_mode.h"
11
- #include "ext/klass/event.h"
12
- #include "ext/klass/color.h"
13
- #include "ext/exceptions.h"
14
- #include "ext/style_name.h"
15
- #include "ext/vec2.h"
16
- #include "ext/module.h"
17
- #include "ext/sfml.h"
18
-
19
- static VALUE rb_cWindow;
20
-
21
- static sfRenderWindow *Window_create(sfVideoMode *mode, const char *title) {
22
- return sfRenderWindow_create(*mode, title, sfDefaultStyle, sfWindowed, NULL);
23
- }
24
-
25
- static void Window_free(void *ptr) {
26
- sfRenderWindow_destroy((sfRenderWindow *) ptr);
27
- }
28
-
29
- static VALUE Window_new(int argc, VALUE *argv, VALUE klass) {
30
- VALUE self, rb_video_mode, rb_title;
31
- sfRenderWindow *window;
32
-
33
- if (argc > 2) {
34
- raise_invalid_arguments_excepted(2, argc);
35
- }
36
-
37
- rb_video_mode = argv[0];
38
- rb_title = argv[1];
39
-
40
- if (!rb_obj_is_kind_of(rb_video_mode, Get_Klass_Mode())) {
41
- raise_invalid_argument_class(Get_Klass_Mode());
42
- rb_raise(rb_eArgError, "wrong object, expected a VideoMode");
43
- }
44
-
45
- window = Window_create(Get_Mode_Struct(rb_video_mode), RSTRING_PTR(rb_title));
46
- self = Data_Wrap_Struct(klass, 0, Window_free, window);
47
-
48
- rb_obj_call_init(self, argc, argv);
49
-
50
- return self;
51
- }
52
-
53
- static VALUE Window_init(int argc, VALUE *argv, VALUE self) {
54
- return self;
55
- }
56
-
57
- static VALUE Window_is_open(VALUE self) {
58
- return BOOL2RB(sfRenderWindow_isOpen(Get_Window_Struct(self)));
59
- }
60
-
61
- static VALUE Window_close(VALUE self) {
62
- sfRenderWindow_close(Get_Window_Struct(self));
63
- return self;
64
- }
65
-
66
- static VALUE Window_clear(int argc, VALUE *argv, VALUE self) {
67
- sfColor color = sfBlack;
68
-
69
- if (argc > 1) {
70
- raise_invalid_arguments_excepted(1, argc);
71
- }
72
-
73
- if (argc == 1) {
74
- color_check(argv[0]);
75
- color = color_new_from_rb(argv[0]);
76
- }
77
-
78
- sfRenderWindow_clear(Get_Window_Struct(self), color);
79
-
80
- return self;
81
- }
82
-
83
- static VALUE Window_display(VALUE self) {
84
- sfRenderWindow_display(Get_Window_Struct(self));
85
- return self;
86
- }
87
-
88
- static VALUE Window_poll_event(VALUE self, VALUE rb_event) {
89
- if (!rb_obj_is_kind_of(rb_event, Get_Klass_Event())) {
90
- raise_invalid_argument_class(Get_Klass_Event());
91
- }
92
-
93
- return BOOL2RB(sfRenderWindow_pollEvent(Get_Window_Struct(self), Get_Event_Struct(rb_event)));
94
- }
95
-
96
- static VALUE Window_wait_event(VALUE self, VALUE rb_event) {
97
- if (!rb_obj_is_kind_of(rb_event, Get_Klass_Event())) {
98
- raise_invalid_argument_class(Get_Klass_Event());
99
- }
100
-
101
- return BOOL2RB(sfRenderWindow_waitEvent(Get_Window_Struct(self), sfTime_Zero, Get_Event_Struct(rb_event)));
102
- }
103
-
104
- static VALUE Window_get_position(VALUE self) {
105
- return VEC2_C2RB(sfRenderWindow_getPosition(Get_Window_Struct(self)));
106
- }
107
-
108
- static VALUE Window_set_position(VALUE self, VALUE rb_arr) {
109
- sfRenderWindow_setPosition(Get_Window_Struct(self), vec2i_new_from_ruby(rb_arr));
110
- return self;
111
- }
112
-
113
- static VALUE Window_set_frame_rate(VALUE self, VALUE rb_limit) {
114
- sfRenderWindow_setFramerateLimit(Get_Window_Struct(self), NUM2INT(rb_limit));
115
- return self;
116
- }
117
-
118
- static VALUE Window_set_size(VALUE self, VALUE rb_size) {
119
- sfRenderWindow_setSize(Get_Window_Struct(self), vec2u_new_from_ruby(rb_size));
120
- return self;
121
- }
122
-
123
- static VALUE Window_set_title(VALUE self, VALUE rb_title) {
124
- sfRenderWindow_setTitle(Get_Window_Struct(self), RSTRING_PTR(rb_title));
125
- return self;
126
- }
127
-
128
- static VALUE Window_set_icon(VALUE self, VALUE rb_icon) {
129
- return self;
130
- }
131
-
132
- static VALUE Window_set_visible(VALUE self, VALUE rb_visible) {
133
- sfRenderWindow_setVisible(Get_Window_Struct(self), RTEST(rb_visible));
134
- return self;
135
-
136
- }
137
-
138
- static VALUE Window_set_vertical_sync_enabled(VALUE self, VALUE rb_enable) {
139
- sfRenderWindow_setVerticalSyncEnabled(Get_Window_Struct(self), RTEST(rb_enable));
140
- return self;
141
- }
142
-
143
- static VALUE Window_set_mouse_cursor_visible(VALUE self, VALUE rb_visible) {
144
- sfRenderWindow_setMouseCursorVisible(Get_Window_Struct(self), RTEST(rb_visible));
145
- return self;
146
- }
147
-
148
- static VALUE Window_set_mouse_cursor_grabbed(VALUE self, VALUE rb_grabbed) {
149
- sfRenderWindow_setMouseCursorGrabbed(Get_Window_Struct(self), RTEST(rb_grabbed));
150
- return self;
151
- }
152
-
153
- static VALUE Window_set_mouse_cursor(VALUE self, VALUE rb_cursor) {
154
- raise_method_no_implemented(NULL);
155
- return self;
156
- }
157
-
158
- static VALUE Window_set_key_repeat_enabled(VALUE self, VALUE rb_enabled) {
159
- sfRenderWindow_setKeyRepeatEnabled(Get_Window_Struct(self), RTEST(rb_enabled));
160
- return self;
161
- }
162
-
163
- static VALUE Window_set_joystick_threshold(VALUE self, VALUE rb_threshold) {
164
- sfRenderWindow_setJoystickThreshold(Get_Window_Struct(self), RTEST(rb_threshold));
165
- return self;
166
- }
167
-
168
- static VALUE Window_request_focus(VALUE self) {
169
- sfRenderWindow_requestFocus(Get_Window_Struct(self));
170
- return self;
171
- }
172
-
173
-
174
- static VALUE Window_has_focus(VALUE self) {
175
- return BOOL2RB(sfRenderWindow_hasFocus(Get_Window_Struct(self)));
176
- }
177
-
178
- static VALUE Window_draw(int argc, VALUE *argv, VALUE self) {
179
- VALUE rb_drawable;
180
- sfRenderStates *states;
181
- sfRenderWindow *window;
182
-
183
- if (argc == 0 || argc > 2) {
184
- raise_invalid_arguments_excepted(-1, argc);
185
- }
186
-
187
- rb_drawable = argv[0];
188
- window = Get_Window_Struct(self);
189
- states = NULL;
190
-
191
- if (argc == 2) {
192
- VALUE rb_state = argv[1];
193
-
194
- if (rb_obj_is_kind_of(rb_state, Get_Klass_RenderState())) {
195
- states = Get_RenderState_Struct(rb_state);
196
- } else {
197
- raise_invalid_argument_class(Get_Klass_RenderState());
198
- }
199
- }
200
-
201
- if (rb_obj_is_kind_of(rb_drawable, Get_Klass_Circle())) {
202
- sfRenderWindow_drawCircleShape(window, Get_Circle_Struct(rb_drawable), states);
203
- } else {
204
- rb_funcall(rb_drawable, rb_intern("draw"), 2, Get_New_Target(self), Get_New_RenderState());
205
- }
206
-
207
- return self;
208
- }
209
-
210
- static VALUE Window_set_view(VALUE self, VALUE rb_view) {
211
- if (!rb_obj_is_kind_of(rb_view, Get_Klass_View())) {
212
- rb_raise(rb_eArgError, "invalid object, expected a View object");
213
- }
214
-
215
- sfRenderWindow_setView(Get_Window_Struct(self), Get_View_Struct(rb_view));
216
-
217
- return self;
218
- }
219
-
220
- static VALUE Window_get_view(VALUE self) {
221
- return Get_Casting_View(sfView_copy(sfRenderWindow_getView(Get_Window_Struct(self))));
222
- }
223
-
224
- static VALUE Window_get_default_view(VALUE self) {
225
- return Get_Casting_View(sfView_copy((sfRenderWindow_getDefaultView(Get_Window_Struct(self)))));
226
- }
227
-
228
- void Init_Window(VALUE rb_module) {
229
- rb_cWindow = rb_define_class_under(rb_module, "Window", rb_cObject);
230
-
231
- rb_define_singleton_method(rb_cWindow, "new", Window_new, -1);
232
-
233
- // methods
234
- rb_define_method(rb_cWindow, "initialize", Window_init, -1);
235
- rb_define_method(rb_cWindow, "is_open?", Window_is_open, 0);
236
- rb_define_method(rb_cWindow, "close!", Window_close, 0);
237
- rb_define_method(rb_cWindow, "clear", Window_clear, -1);
238
- rb_define_method(rb_cWindow, "display", Window_display, 0);
239
- rb_define_method(rb_cWindow, "poll_event!", Window_poll_event, 1);
240
- rb_define_method(rb_cWindow, "wait_event!", Window_wait_event, 1);
241
-
242
- // setters
243
- rb_define_method(rb_cWindow, "frame_rate=", Window_set_frame_rate, 1);
244
- rb_define_method(rb_cWindow, "size=", Window_set_size, 1);
245
- rb_define_method(rb_cWindow, "title=", Window_set_title, 1);
246
- rb_define_method(rb_cWindow, "icon=", Window_set_icon, 1);
247
- rb_define_method(rb_cWindow, "visible=", Window_set_visible, 1);
248
- rb_define_method(rb_cWindow, "vertical_sync_enabled=", Window_set_vertical_sync_enabled, 1);
249
- rb_define_method(rb_cWindow, "cursor_visible=", Window_set_mouse_cursor_visible, 1);
250
- rb_define_method(rb_cWindow, "cursor_grabbed=", Window_set_mouse_cursor_grabbed, 1);
251
- rb_define_method(rb_cWindow, "mouse_cursor=", Window_set_mouse_cursor, 1);
252
- rb_define_method(rb_cWindow, "key_repeat_enabled=", Window_set_key_repeat_enabled, 1);
253
- rb_define_method(rb_cWindow, "joystick_threshold=", Window_set_joystick_threshold, 1);
254
- rb_define_method(rb_cWindow, "position=", Window_set_position, 1);
255
- rb_define_method(rb_cWindow, "view=", Window_set_view, 1);
256
-
257
- // getters
258
- rb_define_method(rb_cWindow, "request_focus", Window_request_focus, 0);
259
- rb_define_method(rb_cWindow, "focus?", Window_has_focus, 0);
260
- rb_define_method(rb_cWindow, "draw", Window_draw, -1);
261
- rb_define_method(rb_cWindow, "position", Window_get_position, 0);
262
- rb_define_method(rb_cWindow, "view", Window_get_view, 0);
263
- rb_define_method(rb_cWindow, "default_view", Window_get_default_view, 0);
264
- }
265
-
266
- void *Get_Window_Struct(VALUE self) {
267
- sfRenderWindow *ptr;
268
- Data_Get_Struct(self, sfRenderWindow, ptr);
269
- return ptr;
270
- }
271
-
272
- VALUE Get_Klass_Window() {
273
- return rb_cWindow;
274
- }