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
@@ -0,0 +1,211 @@
1
+ #include "graphics/vertex_buffer.h"
2
+
3
+ #include <ruby.h>
4
+ #include <stdlib.h>
5
+ #include <string.h>
6
+
7
+ #include "graphics/drawable.h"
8
+ #include "graphics/target.h"
9
+ #include "graphics/render_state.h"
10
+ #include "graphics/vertex.h"
11
+ #include "graphics/enums.h"
12
+ #include "core/exceptions.h"
13
+ #include "core/macros.h"
14
+
15
+ static VALUE rb_cVertexBuffer;
16
+
17
+ static const char* usage_names[] = {"stream", "dynamic", "static"};
18
+
19
+ static void VertexBuffer_free(void* ptr) {
20
+ sfVertexBuffer_destroy(ptr);
21
+ }
22
+
23
+ static const rb_data_type_t VertexBuffer_data_type = {
24
+ .wrap_struct_name = "SFML::VertexBuffer",
25
+ .function = {.dmark = NULL, .dfree = VertexBuffer_free, .dsize = NULL},
26
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY};
27
+
28
+ static VALUE VertexBuffer_wrap(VALUE klass, sfVertexBuffer* buffer) {
29
+ if (buffer == NULL) {
30
+ rb_raise(rb_eRuntimeError, "failed to create vertex buffer");
31
+ }
32
+
33
+ return TypedData_Wrap_Struct(klass, &VertexBuffer_data_type, buffer);
34
+ }
35
+
36
+ sfVertexBuffer* Get_VertexBuffer_Struct(VALUE self) {
37
+ sfVertexBuffer* ptr;
38
+ TypedData_Get_Struct(self, sfVertexBuffer, &VertexBuffer_data_type, ptr);
39
+ return ptr;
40
+ }
41
+
42
+ static sfVertexBufferUsage usage_from_rb(VALUE rb_usage) {
43
+ size_t i;
44
+
45
+ if (RB_INTEGER_TYPE_P(rb_usage)) {
46
+ return (sfVertexBufferUsage)NUM2INT(rb_usage);
47
+ }
48
+
49
+ if (SYMBOL_P(rb_usage)) {
50
+ const char* name = rb_id2name(SYM2ID(rb_usage));
51
+
52
+ for (i = 0; i < 3; i++) {
53
+ if (strcmp(name, usage_names[i]) == 0) {
54
+ return (sfVertexBufferUsage)i;
55
+ }
56
+ }
57
+ }
58
+
59
+ rb_raise(rb_eArgError, "unknown vertex buffer usage");
60
+ return sfVertexBufferStatic;
61
+ }
62
+
63
+ static VALUE VertexBuffer_new(int argc, VALUE* argv, VALUE klass) {
64
+ VALUE rb_count, rb_primitive, rb_usage;
65
+ size_t count = 0;
66
+ sfPrimitiveType primitive = sfPoints;
67
+ sfVertexBufferUsage usage = sfVertexBufferStatic;
68
+
69
+ rb_scan_args(argc, argv, "03", &rb_count, &rb_primitive, &rb_usage);
70
+
71
+ if (!NIL_P(rb_count)) {
72
+ count = (size_t)NUM2SIZET(rb_count);
73
+ }
74
+
75
+ if (!NIL_P(rb_primitive)) {
76
+ primitive = primitive_type_from_rb(rb_primitive);
77
+ }
78
+
79
+ if (!NIL_P(rb_usage)) {
80
+ usage = usage_from_rb(rb_usage);
81
+ }
82
+
83
+ return VertexBuffer_wrap(klass, sfVertexBuffer_create(count, primitive, usage));
84
+ }
85
+
86
+ static VALUE VertexBuffer_copy(VALUE self) {
87
+ return VertexBuffer_wrap(Get_Klass_VertexBuffer(),
88
+ sfVertexBuffer_copy(Get_VertexBuffer_Struct(self)));
89
+ }
90
+
91
+ static VALUE VertexBuffer_get_vertex_count(VALUE self) {
92
+ return SIZET2NUM(sfVertexBuffer_getVertexCount(Get_VertexBuffer_Struct(self)));
93
+ }
94
+
95
+ static VALUE VertexBuffer_update(int argc, VALUE* argv, VALUE self) {
96
+ VALUE rb_vertices, rb_offset;
97
+ unsigned int offset = 0;
98
+ size_t count;
99
+ sfVertex* vertices;
100
+ bool result;
101
+
102
+ rb_scan_args(argc, argv, "11", &rb_vertices, &rb_offset);
103
+
104
+ if (!NIL_P(rb_offset)) {
105
+ offset = (unsigned int)NUM2UINT(rb_offset);
106
+ }
107
+
108
+ vertices = vertices_from_rb(rb_vertices, &count);
109
+
110
+ result =
111
+ sfVertexBuffer_update(Get_VertexBuffer_Struct(self), vertices, (unsigned int)count, offset);
112
+
113
+ xfree(vertices);
114
+
115
+ return BOOL2RB(result);
116
+ }
117
+
118
+ static VALUE VertexBuffer_update_from(VALUE self, VALUE rb_other) {
119
+ if (!rb_obj_is_kind_of(rb_other, rb_cVertexBuffer)) {
120
+ raise_invalid_argument_class(rb_cVertexBuffer);
121
+ }
122
+
123
+ return BOOL2RB(sfVertexBuffer_updateFromVertexBuffer(Get_VertexBuffer_Struct(self),
124
+ Get_VertexBuffer_Struct(rb_other)));
125
+ }
126
+
127
+ /* Exchanges the two buffers' contents in place, so anything already holding
128
+ either object sees the swap. */
129
+ static VALUE VertexBuffer_swap(VALUE self, VALUE rb_other) {
130
+ if (!rb_obj_is_kind_of(rb_other, rb_cVertexBuffer)) {
131
+ raise_invalid_argument_class(rb_cVertexBuffer);
132
+ }
133
+
134
+ sfVertexBuffer_swap(Get_VertexBuffer_Struct(self), Get_VertexBuffer_Struct(rb_other));
135
+
136
+ return self;
137
+ }
138
+
139
+ static VALUE VertexBuffer_get_primitive_type(VALUE self) {
140
+ return ID2SYM(rb_intern(
141
+ primitive_type_name(sfVertexBuffer_getPrimitiveType(Get_VertexBuffer_Struct(self)))));
142
+ }
143
+
144
+ static VALUE VertexBuffer_set_primitive_type(VALUE self, VALUE rb_type) {
145
+ sfVertexBuffer_setPrimitiveType(Get_VertexBuffer_Struct(self), primitive_type_from_rb(rb_type));
146
+ return rb_type;
147
+ }
148
+
149
+ static VALUE VertexBuffer_get_usage(VALUE self) {
150
+ return ID2SYM(rb_intern(usage_names[sfVertexBuffer_getUsage(Get_VertexBuffer_Struct(self))]));
151
+ }
152
+
153
+ static VALUE VertexBuffer_set_usage(VALUE self, VALUE rb_usage) {
154
+ sfVertexBuffer_setUsage(Get_VertexBuffer_Struct(self), usage_from_rb(rb_usage));
155
+ return rb_usage;
156
+ }
157
+
158
+ static VALUE VertexBuffer_get_native_handle(VALUE self) {
159
+ return UINT2NUM(sfVertexBuffer_getNativeHandle(Get_VertexBuffer_Struct(self)));
160
+ }
161
+
162
+ static VALUE VertexBuffer_bind(VALUE self) {
163
+ sfVertexBuffer_bind(Get_VertexBuffer_Struct(self));
164
+ return self;
165
+ }
166
+
167
+ static VALUE VertexBuffer_is_available(VALUE klass) {
168
+ return BOOL2RB(sfVertexBuffer_isAvailable());
169
+ }
170
+
171
+ static VALUE VertexBuffer_draw(VALUE self, VALUE rb_target, VALUE rb_state) {
172
+ if (!rb_obj_is_kind_of(rb_target, Get_Klass_Target())) {
173
+ raise_invalid_argument_class(Get_Klass_Target());
174
+ }
175
+
176
+ if (!rb_obj_is_kind_of(rb_state, Get_Klass_RenderState())) {
177
+ raise_invalid_argument_class(Get_Klass_RenderState());
178
+ }
179
+
180
+ TARGET_DRAW(Get_Target_Struct(rb_target), sfRenderWindow_drawVertexBuffer,
181
+ sfRenderTexture_drawVertexBuffer, Get_VertexBuffer_Struct(self),
182
+ Get_RenderState_Struct(rb_state));
183
+
184
+ return Qnil;
185
+ }
186
+
187
+ void Init_VertexBuffer(VALUE rb_module) {
188
+ rb_cVertexBuffer = rb_define_class_under(rb_module, "VertexBuffer", rb_cObject);
189
+
190
+ rb_include_module(rb_cVertexBuffer, Get_Module_Drawable());
191
+
192
+ rb_define_singleton_method(rb_cVertexBuffer, "new", VertexBuffer_new, -1);
193
+ rb_define_singleton_method(rb_cVertexBuffer, "available?", VertexBuffer_is_available, 0);
194
+
195
+ rb_define_method(rb_cVertexBuffer, "copy", VertexBuffer_copy, 0);
196
+ rb_define_method(rb_cVertexBuffer, "vertex_count", VertexBuffer_get_vertex_count, 0);
197
+ rb_define_method(rb_cVertexBuffer, "update", VertexBuffer_update, -1);
198
+ rb_define_method(rb_cVertexBuffer, "update_from", VertexBuffer_update_from, 1);
199
+ rb_define_method(rb_cVertexBuffer, "swap", VertexBuffer_swap, 1);
200
+ rb_define_method(rb_cVertexBuffer, "primitive", VertexBuffer_get_primitive_type, 0);
201
+ rb_define_method(rb_cVertexBuffer, "primitive=", VertexBuffer_set_primitive_type, 1);
202
+ rb_define_method(rb_cVertexBuffer, "usage", VertexBuffer_get_usage, 0);
203
+ rb_define_method(rb_cVertexBuffer, "usage=", VertexBuffer_set_usage, 1);
204
+ rb_define_method(rb_cVertexBuffer, "native_handle", VertexBuffer_get_native_handle, 0);
205
+ rb_define_method(rb_cVertexBuffer, "bind", VertexBuffer_bind, 0);
206
+ rb_define_method(rb_cVertexBuffer, "draw", VertexBuffer_draw, 2);
207
+ }
208
+
209
+ VALUE Get_Klass_VertexBuffer(void) {
210
+ return rb_cVertexBuffer;
211
+ }
@@ -0,0 +1,14 @@
1
+ #ifndef SFML_RB_GRAPHICS_VERTEX_BUFFER_H
2
+ #define SFML_RB_GRAPHICS_VERTEX_BUFFER_H
3
+
4
+ #include <ruby.h>
5
+
6
+ #include "core/sfml.h"
7
+
8
+ void Init_VertexBuffer(VALUE rb_module);
9
+
10
+ VALUE Get_Klass_VertexBuffer(void);
11
+
12
+ sfVertexBuffer* Get_VertexBuffer_Struct(VALUE self);
13
+
14
+ #endif // SFML_RB_GRAPHICS_VERTEX_BUFFER_H
@@ -1,170 +1,169 @@
1
- #include "ext/klass/view.h"
2
-
3
- #include <stdio.h>
4
-
5
- #include "ext/module/transform.h"
6
- #include "ext/klass/transformable.h"
7
- #include "ext/klass/color.h"
8
- #include "ext/vec2.h"
9
- #include "ext/rect.h"
10
- #include "ext/module.h"
11
- #include "ext/sfml.h"
12
-
13
- static VALUE rb_cView;
14
-
15
- static sfView *View_create() {
16
- return sfView_create();
17
- }
18
-
19
- static void View_free(void *ptr) {
20
- sfView_destroy(ptr);
21
- }
22
-
23
- static VALUE View_new_from(VALUE klass, sfView *c_view) {
24
- VALUE self;
25
- sfView *view;
26
-
27
- if (c_view != NULL) {
28
- view = c_view;
29
- } else {
30
- view = View_create();
31
- }
32
-
33
- self = Data_Wrap_Struct(klass, 0, View_free, view);
34
-
35
- rb_obj_call_init(self, 0, NULL);
36
-
37
- return self;
38
- }
39
-
40
- static VALUE View_new(VALUE klass) {
41
- return View_new_from(klass, NULL);
42
- }
43
-
44
- static VALUE View_init(VALUE self) {
45
- return self;
46
- }
47
-
48
- static VALUE View_set_position(VALUE self, VALUE rb_position) {
49
- sfView *view = Get_View_Struct(self);
50
- sfVector2f position = VEC2_RB2C(rb_position);
51
- sfVector2f size = sfView_getSize(view);
52
-
53
- sfFloatRect rect = {{position.x, position.y}, {size.x, size.y}};
54
-
55
- sfView_setViewport(Get_View_Struct(self), rect);
56
-
57
- return self;
58
- }
59
-
60
-
61
- static VALUE View_set_rotation(VALUE self, VALUE rb_rotation) {
62
- sfView_setRotation(Get_View_Struct(self), NUM2DBL(rb_rotation));
63
- return self;
64
- }
65
-
66
-
67
- static VALUE View_set_size(VALUE self, VALUE rb_scale) {
68
- sfView_setSize(Get_View_Struct(self), vec2f_new_from_ruby(rb_scale));
69
- return self;
70
- }
71
-
72
-
73
- static VALUE View_set_center(VALUE self, VALUE rb_origin) {
74
- sfVector2f origin = VEC2_RB2C(rb_origin);
75
- sfView_setCenter(Get_View_Struct(self), origin);
76
- return self;
77
- }
78
-
79
- static VALUE View_set_viewport(VALUE self, VALUE rb_viewport) {
80
- sfFloatRect viewport = RECT_RB2C(rb_viewport);
81
- sfView_setViewport(Get_View_Struct(self), viewport);
82
-
83
- return self;
84
- }
85
-
86
- static VALUE View_get_position(VALUE self) {
87
- sfFloatRect viewport = sfView_getViewport(Get_View_Struct(self));
88
- return vec2_new(viewport.position.x, viewport.position.y);
89
- }
90
-
91
-
92
- static VALUE View_get_rotation(VALUE self) {
93
- return DBL2NUM(sfView_getRotation(Get_View_Struct(self)));
94
- }
95
-
96
-
97
- static VALUE View_get_size(VALUE self) {
98
- return vec2f_new_from_c(sfView_getSize(Get_View_Struct(self)));
99
- }
100
-
101
-
102
- static VALUE View_get_center(VALUE self) {
103
- return vec2f_new_from_c(sfView_getCenter(Get_View_Struct(self)));
104
- }
105
-
106
- static VALUE View_get_viewport(VALUE self) {
107
- return RECT_C2RB(sfView_getViewport(Get_View_Struct(self)));
108
- }
109
-
110
- static VALUE View_move(VALUE self, VALUE rb_move) {
111
- sfView_move(Get_View_Struct(self), vec2f_new_from_ruby(rb_move));
112
- return self;
113
- }
114
-
115
- static VALUE View_rotate(VALUE self, VALUE rb_angle) {
116
- sfView_rotate(Get_View_Struct(self), NUM2DBL(rb_angle));
117
-
118
- return self;
119
- }
120
-
121
- static VALUE View_zoom(VALUE self, VALUE rb_zoom) {
122
- sfView_zoom(Get_View_Struct(self), NUM2DBL(rb_zoom));
123
-
124
- return self;
125
- }
126
-
127
- static VALUE View_copy(VALUE self) {
128
- return Get_Casting_View(sfView_copy(Get_View_Struct(self)));
129
- }
130
-
131
- void Init_View(VALUE rb_module) {
132
- rb_cView = rb_define_class_under(rb_module, "View", rb_cObject);
133
-
134
- rb_define_singleton_method(rb_cView, "new", View_new, 0);
135
-
136
- // methods
137
- rb_define_method(rb_cView, "initialize", View_init, 0);
138
- rb_define_method(rb_cView, "move", View_move, 1);
139
- rb_define_method(rb_cView, "rotate", View_rotate, 1);
140
- rb_define_method(rb_cView, "zoom", View_zoom, 1);
141
- rb_define_method(rb_cView, "copy", View_copy, 0);
142
-
143
- // setters
144
- rb_define_method(rb_cView, "position=", View_set_position, 1);
145
- rb_define_method(rb_cView, "angle=", View_set_rotation, 1);
146
- rb_define_method(rb_cView, "size=", View_set_size, 1);
147
- rb_define_method(rb_cView, "center=", View_set_center, 1);
148
- rb_define_method(rb_cView, "viewport=", View_set_viewport, 1);
149
-
150
- // getters
151
- rb_define_method(rb_cView, "position", View_get_position, 0);
152
- rb_define_method(rb_cView, "angle", View_get_rotation, 0);
153
- rb_define_method(rb_cView, "size", View_get_size, 0);
154
- rb_define_method(rb_cView, "center", View_get_center, 0);
155
- rb_define_method(rb_cView, "viewport", View_get_viewport, 0);
156
- }
157
-
158
- void *Get_View_Struct(VALUE self) {
159
- sfView *ptr;
160
- Data_Get_Struct(self, sfView, ptr);
161
- return ptr;
162
- }
163
-
164
- VALUE Get_Klass_View() {
165
- return rb_cView;
166
- }
167
-
168
- VALUE Get_Casting_View(void *ptr) {
169
- return View_new_from(Get_Klass_View(), ptr);
1
+ #include "graphics/view.h"
2
+
3
+ #include <stdio.h>
4
+
5
+ #include "graphics/transform.h"
6
+ #include "graphics/transformable.h"
7
+ #include "graphics/color.h"
8
+ #include "system/vec2.h"
9
+ #include "graphics/rect.h"
10
+ #include "core/macros.h"
11
+ #include "core/sfml.h"
12
+
13
+ static VALUE rb_cView;
14
+
15
+ static sfView* View_create() {
16
+ return sfView_create();
17
+ }
18
+
19
+ static void View_free(void* ptr) {
20
+ sfView_destroy(ptr);
21
+ }
22
+
23
+ static const rb_data_type_t View_data_type = {
24
+ .wrap_struct_name = "SFML::View",
25
+ .function = {.dmark = NULL, .dfree = View_free, .dsize = NULL},
26
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY};
27
+
28
+ static VALUE View_new_from(VALUE klass, sfView* c_view) {
29
+ VALUE self;
30
+ sfView* view;
31
+
32
+ if (c_view != NULL) {
33
+ view = c_view;
34
+ } else {
35
+ view = View_create();
36
+ }
37
+
38
+ self = TypedData_Wrap_Struct(klass, &View_data_type, view);
39
+
40
+ rb_obj_call_init(self, 0, NULL);
41
+
42
+ return self;
43
+ }
44
+
45
+ static VALUE View_new(VALUE klass) {
46
+ return View_new_from(klass, NULL);
47
+ }
48
+
49
+ /* The rect is the visible area: position is the top-left corner, not the
50
+ centre, which is what distinguishes this from new + center=/size=. */
51
+ static VALUE View_s_from_rect(VALUE klass, VALUE rb_rect) {
52
+ return View_new_from(klass, sfView_createFromRect(rect_from_rb(rb_rect)));
53
+ }
54
+
55
+ static VALUE View_init(VALUE self) {
56
+ return self;
57
+ }
58
+
59
+ static VALUE View_set_rotation(VALUE self, VALUE rb_rotation) {
60
+ sfView_setRotation(Get_View_Struct(self), NUM2DBL(rb_rotation));
61
+ return self;
62
+ }
63
+
64
+ static VALUE View_set_size(VALUE self, VALUE rb_scale) {
65
+ sfView_setSize(Get_View_Struct(self), vec2f_from_rb(rb_scale));
66
+ return self;
67
+ }
68
+
69
+ static VALUE View_set_center(VALUE self, VALUE rb_origin) {
70
+ sfVector2f origin = VEC2_RB2C(rb_origin);
71
+ sfView_setCenter(Get_View_Struct(self), origin);
72
+ return self;
73
+ }
74
+
75
+ static VALUE View_set_viewport(VALUE self, VALUE rb_viewport) {
76
+ sfFloatRect viewport = RECT_RB2C(rb_viewport);
77
+ sfView_setViewport(Get_View_Struct(self), viewport);
78
+
79
+ return self;
80
+ }
81
+
82
+ static VALUE View_get_rotation(VALUE self) {
83
+ return DBL2NUM(sfView_getRotation(Get_View_Struct(self)));
84
+ }
85
+
86
+ static VALUE View_get_size(VALUE self) {
87
+ return vec2f_to_rb(sfView_getSize(Get_View_Struct(self)));
88
+ }
89
+
90
+ static VALUE View_get_center(VALUE self) {
91
+ return vec2f_to_rb(sfView_getCenter(Get_View_Struct(self)));
92
+ }
93
+
94
+ static VALUE View_get_viewport(VALUE self) {
95
+ return RECT_C2RB(sfView_getViewport(Get_View_Struct(self)));
96
+ }
97
+
98
+ static VALUE View_set_scissor(VALUE self, VALUE rb_scissor) {
99
+ sfView_setScissor(Get_View_Struct(self), RECT_RB2C(rb_scissor));
100
+
101
+ return self;
102
+ }
103
+
104
+ static VALUE View_get_scissor(VALUE self) {
105
+ return RECT_C2RB(sfView_getScissor(Get_View_Struct(self)));
106
+ }
107
+
108
+ static VALUE View_move(VALUE self, VALUE rb_move) {
109
+ sfView_move(Get_View_Struct(self), vec2f_from_rb(rb_move));
110
+ return self;
111
+ }
112
+
113
+ static VALUE View_rotate(VALUE self, VALUE rb_angle) {
114
+ sfView_rotate(Get_View_Struct(self), NUM2DBL(rb_angle));
115
+
116
+ return self;
117
+ }
118
+
119
+ static VALUE View_zoom(VALUE self, VALUE rb_zoom) {
120
+ sfView_zoom(Get_View_Struct(self), NUM2DBL(rb_zoom));
121
+
122
+ return self;
123
+ }
124
+
125
+ static VALUE View_copy(VALUE self) {
126
+ return Get_Casting_View(sfView_copy(Get_View_Struct(self)));
127
+ }
128
+
129
+ void Init_View(VALUE rb_module) {
130
+ rb_cView = rb_define_class_under(rb_module, "View", rb_cObject);
131
+
132
+ rb_define_singleton_method(rb_cView, "new", View_new, 0);
133
+ rb_define_singleton_method(rb_cView, "from_rect", View_s_from_rect, 1);
134
+
135
+ // methods
136
+ rb_define_method(rb_cView, "initialize", View_init, 0);
137
+ rb_define_method(rb_cView, "move", View_move, 1);
138
+ rb_define_method(rb_cView, "rotate", View_rotate, 1);
139
+ rb_define_method(rb_cView, "zoom", View_zoom, 1);
140
+ rb_define_method(rb_cView, "copy", View_copy, 0);
141
+
142
+ // setters
143
+ rb_define_method(rb_cView, "rotation=", View_set_rotation, 1);
144
+ rb_define_method(rb_cView, "size=", View_set_size, 1);
145
+ rb_define_method(rb_cView, "center=", View_set_center, 1);
146
+ rb_define_method(rb_cView, "viewport=", View_set_viewport, 1);
147
+ rb_define_method(rb_cView, "scissor=", View_set_scissor, 1);
148
+
149
+ // getters
150
+ rb_define_method(rb_cView, "rotation", View_get_rotation, 0);
151
+ rb_define_method(rb_cView, "size", View_get_size, 0);
152
+ rb_define_method(rb_cView, "center", View_get_center, 0);
153
+ rb_define_method(rb_cView, "viewport", View_get_viewport, 0);
154
+ rb_define_method(rb_cView, "scissor", View_get_scissor, 0);
155
+ }
156
+
157
+ void* Get_View_Struct(VALUE self) {
158
+ sfView* ptr;
159
+ TypedData_Get_Struct(self, sfView, &View_data_type, ptr);
160
+ return ptr;
161
+ }
162
+
163
+ VALUE Get_Klass_View() {
164
+ return rb_cView;
165
+ }
166
+
167
+ VALUE Get_Casting_View(void* ptr) {
168
+ return View_new_from(Get_Klass_View(), ptr);
170
169
  }
@@ -1,5 +1,5 @@
1
- #ifndef CANDY2D_EXT_VIEW_H
2
- #define CANDY2D_EXT_VIEW_H
1
+ #ifndef SFML_RB_GRAPHICS_VIEW_H
2
+ #define SFML_RB_GRAPHICS_VIEW_H
3
3
 
4
4
  #include <ruby.h>
5
5
 
@@ -11,4 +11,4 @@ VALUE Get_Klass_View();
11
11
 
12
12
  VALUE Get_Casting_View(void *ptr);
13
13
 
14
- #endif //CANDY2D_EXT_VIEW_H
14
+ #endif //SFML_RB_GRAPHICS_VIEW_H