gosu 0.15.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (242) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/COPYING +1 -1
  4. data/dependencies/SDL/include/SDL.h +138 -0
  5. data/dependencies/SDL/include/SDL_assert.h +293 -0
  6. data/dependencies/SDL/include/SDL_atomic.h +295 -0
  7. data/dependencies/SDL/include/SDL_audio.h +859 -0
  8. data/dependencies/SDL/include/SDL_bits.h +121 -0
  9. data/dependencies/SDL/include/SDL_blendmode.h +123 -0
  10. data/dependencies/SDL/include/SDL_clipboard.h +71 -0
  11. data/dependencies/SDL/include/SDL_config.h +55 -0
  12. data/dependencies/SDL/include/SDL_config_android.h +182 -0
  13. data/dependencies/SDL/include/SDL_config_iphoneos.h +207 -0
  14. data/dependencies/SDL/include/SDL_config_macosx.h +266 -0
  15. data/dependencies/SDL/include/SDL_config_minimal.h +85 -0
  16. data/dependencies/SDL/include/SDL_config_os2.h +188 -0
  17. data/dependencies/SDL/include/SDL_config_pandora.h +135 -0
  18. data/dependencies/SDL/include/SDL_config_psp.h +165 -0
  19. data/dependencies/SDL/include/SDL_config_windows.h +288 -0
  20. data/dependencies/SDL/include/SDL_config_winrt.h +243 -0
  21. data/dependencies/SDL/include/SDL_config_wiz.h +149 -0
  22. data/dependencies/SDL/include/SDL_copying.h +20 -0
  23. data/dependencies/SDL/include/SDL_cpuinfo.h +299 -0
  24. data/dependencies/SDL/include/SDL_egl.h +1676 -0
  25. data/dependencies/SDL/include/SDL_endian.h +263 -0
  26. data/dependencies/SDL/include/SDL_error.h +112 -0
  27. data/dependencies/SDL/include/SDL_events.h +827 -0
  28. data/dependencies/SDL/include/SDL_filesystem.h +136 -0
  29. data/dependencies/SDL/include/SDL_gamecontroller.h +541 -0
  30. data/dependencies/SDL/include/SDL_gesture.h +87 -0
  31. data/dependencies/SDL/include/SDL_haptic.h +1247 -0
  32. data/dependencies/SDL/include/SDL_hints.h +1578 -0
  33. data/dependencies/SDL/include/SDL_joystick.h +499 -0
  34. data/dependencies/SDL/include/SDL_keyboard.h +217 -0
  35. data/dependencies/SDL/include/SDL_keycode.h +351 -0
  36. data/dependencies/SDL/include/SDL_loadso.h +81 -0
  37. data/dependencies/SDL/include/SDL_locale.h +101 -0
  38. data/dependencies/SDL/include/SDL_log.h +211 -0
  39. data/dependencies/SDL/include/SDL_main.h +180 -0
  40. data/dependencies/SDL/include/SDL_messagebox.h +146 -0
  41. data/dependencies/SDL/include/SDL_metal.h +117 -0
  42. data/dependencies/SDL/include/SDL_misc.h +75 -0
  43. data/dependencies/SDL/include/SDL_mouse.h +302 -0
  44. data/dependencies/SDL/include/SDL_mutex.h +251 -0
  45. data/dependencies/SDL/include/SDL_name.h +33 -0
  46. data/dependencies/SDL/include/SDL_opengl.h +2183 -0
  47. data/dependencies/SDL/include/SDL_opengl_glext.h +11180 -0
  48. data/dependencies/SDL/include/SDL_opengles.h +39 -0
  49. data/dependencies/SDL/include/SDL_opengles2.h +52 -0
  50. data/dependencies/SDL/include/SDL_opengles2_gl2.h +621 -0
  51. data/dependencies/SDL/include/SDL_opengles2_gl2ext.h +2050 -0
  52. data/dependencies/SDL/include/SDL_opengles2_gl2platform.h +30 -0
  53. data/dependencies/SDL/include/SDL_opengles2_khrplatform.h +282 -0
  54. data/dependencies/SDL/include/SDL_pixels.h +479 -0
  55. data/dependencies/SDL/include/SDL_platform.h +198 -0
  56. data/dependencies/SDL/include/SDL_power.h +75 -0
  57. data/dependencies/SDL/include/SDL_quit.h +58 -0
  58. data/dependencies/SDL/include/SDL_rect.h +174 -0
  59. data/dependencies/SDL/include/SDL_render.h +1158 -0
  60. data/dependencies/SDL/include/SDL_revision.h +2 -0
  61. data/dependencies/SDL/include/SDL_rwops.h +283 -0
  62. data/dependencies/SDL/include/SDL_scancode.h +413 -0
  63. data/dependencies/SDL/include/SDL_sensor.h +267 -0
  64. data/dependencies/SDL/include/SDL_shape.h +144 -0
  65. data/dependencies/SDL/include/SDL_stdinc.h +647 -0
  66. data/dependencies/SDL/include/SDL_surface.h +563 -0
  67. data/dependencies/SDL/include/SDL_system.h +325 -0
  68. data/dependencies/SDL/include/SDL_syswm.h +354 -0
  69. data/dependencies/SDL/include/SDL_test.h +69 -0
  70. data/dependencies/SDL/include/SDL_test_assert.h +105 -0
  71. data/dependencies/SDL/include/SDL_test_common.h +218 -0
  72. data/dependencies/SDL/include/SDL_test_compare.h +69 -0
  73. data/dependencies/SDL/include/SDL_test_crc32.h +124 -0
  74. data/dependencies/SDL/include/SDL_test_font.h +81 -0
  75. data/dependencies/SDL/include/SDL_test_fuzzer.h +384 -0
  76. data/dependencies/SDL/include/SDL_test_harness.h +134 -0
  77. data/dependencies/SDL/include/SDL_test_images.h +78 -0
  78. data/dependencies/SDL/include/SDL_test_log.h +67 -0
  79. data/dependencies/SDL/include/SDL_test_md5.h +129 -0
  80. data/dependencies/SDL/include/SDL_test_memory.h +63 -0
  81. data/dependencies/SDL/include/SDL_test_random.h +115 -0
  82. data/dependencies/SDL/include/SDL_thread.h +366 -0
  83. data/dependencies/SDL/include/SDL_timer.h +115 -0
  84. data/dependencies/SDL/include/SDL_touch.h +102 -0
  85. data/dependencies/SDL/include/SDL_types.h +29 -0
  86. data/dependencies/SDL/include/SDL_version.h +162 -0
  87. data/dependencies/SDL/include/SDL_video.h +1282 -0
  88. data/dependencies/SDL/include/SDL_vulkan.h +276 -0
  89. data/dependencies/SDL/include/begin_code.h +166 -0
  90. data/dependencies/SDL/include/close_code.h +40 -0
  91. data/dependencies/SDL/lib/x64/libSDL2.dll.a +0 -0
  92. data/dependencies/SDL/lib/x86/libSDL2.dll.a +0 -0
  93. data/dependencies/SDL_sound/SDL_sound.c +795 -0
  94. data/dependencies/SDL_sound/SDL_sound.h +725 -0
  95. data/dependencies/SDL_sound/SDL_sound_aiff.c +537 -0
  96. data/dependencies/SDL_sound/SDL_sound_au.c +352 -0
  97. data/dependencies/SDL_sound/SDL_sound_coreaudio.c +747 -0
  98. data/dependencies/SDL_sound/SDL_sound_flac.c +182 -0
  99. data/dependencies/SDL_sound/SDL_sound_internal.h +304 -0
  100. data/dependencies/SDL_sound/SDL_sound_modplug.c +228 -0
  101. data/dependencies/SDL_sound/SDL_sound_mp3.c +184 -0
  102. data/dependencies/SDL_sound/SDL_sound_raw.c +164 -0
  103. data/dependencies/SDL_sound/SDL_sound_shn.c +1309 -0
  104. data/dependencies/SDL_sound/SDL_sound_voc.c +550 -0
  105. data/dependencies/SDL_sound/SDL_sound_vorbis.c +223 -0
  106. data/dependencies/SDL_sound/SDL_sound_wav.c +783 -0
  107. data/dependencies/SDL_sound/dr_flac.h +5906 -0
  108. data/dependencies/SDL_sound/dr_mp3.h +2832 -0
  109. data/dependencies/SDL_sound/libmodplug/fastmix.c +1748 -0
  110. data/dependencies/SDL_sound/libmodplug/libmodplug.h +1001 -0
  111. data/dependencies/SDL_sound/libmodplug/load_669.c +188 -0
  112. data/dependencies/SDL_sound/libmodplug/load_abc.c +4725 -0
  113. data/dependencies/SDL_sound/libmodplug/load_amf.c +403 -0
  114. data/dependencies/SDL_sound/libmodplug/load_ams.c +587 -0
  115. data/dependencies/SDL_sound/libmodplug/load_dbm.c +357 -0
  116. data/dependencies/SDL_sound/libmodplug/load_dmf.c +531 -0
  117. data/dependencies/SDL_sound/libmodplug/load_dsm.c +232 -0
  118. data/dependencies/SDL_sound/libmodplug/load_far.c +253 -0
  119. data/dependencies/SDL_sound/libmodplug/load_it.c +796 -0
  120. data/dependencies/SDL_sound/libmodplug/load_mdl.c +488 -0
  121. data/dependencies/SDL_sound/libmodplug/load_med.c +757 -0
  122. data/dependencies/SDL_sound/libmodplug/load_mid.c +1405 -0
  123. data/dependencies/SDL_sound/libmodplug/load_mod.c +269 -0
  124. data/dependencies/SDL_sound/libmodplug/load_mt2.c +546 -0
  125. data/dependencies/SDL_sound/libmodplug/load_mtm.c +142 -0
  126. data/dependencies/SDL_sound/libmodplug/load_okt.c +192 -0
  127. data/dependencies/SDL_sound/libmodplug/load_pat.c +1143 -0
  128. data/dependencies/SDL_sound/libmodplug/load_pat.h +25 -0
  129. data/dependencies/SDL_sound/libmodplug/load_psm.c +350 -0
  130. data/dependencies/SDL_sound/libmodplug/load_ptm.c +204 -0
  131. data/dependencies/SDL_sound/libmodplug/load_s3m.c +325 -0
  132. data/dependencies/SDL_sound/libmodplug/load_stm.c +180 -0
  133. data/dependencies/SDL_sound/libmodplug/load_ult.c +206 -0
  134. data/dependencies/SDL_sound/libmodplug/load_umx.c +51 -0
  135. data/dependencies/SDL_sound/libmodplug/load_xm.c +554 -0
  136. data/dependencies/SDL_sound/libmodplug/mmcmp.c +382 -0
  137. data/dependencies/SDL_sound/libmodplug/modplug.c +170 -0
  138. data/dependencies/SDL_sound/libmodplug/modplug.h +90 -0
  139. data/dependencies/SDL_sound/libmodplug/snd_dsp.c +301 -0
  140. data/dependencies/SDL_sound/libmodplug/snd_flt.c +63 -0
  141. data/dependencies/SDL_sound/libmodplug/snd_fx.c +2350 -0
  142. data/dependencies/SDL_sound/libmodplug/sndfile.c +1169 -0
  143. data/dependencies/SDL_sound/libmodplug/sndmix.c +1034 -0
  144. data/dependencies/SDL_sound/libmodplug/tables.h +371 -0
  145. data/{src/stb_vorbis.c → dependencies/SDL_sound/stb_vorbis.h} +128 -23
  146. data/dependencies/al_soft/AL/al.h +655 -0
  147. data/dependencies/al_soft/AL/alc.h +270 -0
  148. data/dependencies/al_soft/AL/alext.h +585 -0
  149. data/dependencies/al_soft/AL/efx-creative.h +3 -0
  150. data/dependencies/al_soft/AL/efx-presets.h +402 -0
  151. data/dependencies/al_soft/AL/efx.h +762 -0
  152. data/dependencies/al_soft/x64/libOpenAL32.dll.a +0 -0
  153. data/dependencies/al_soft/x86/libOpenAL32.dll.a +0 -0
  154. data/{src → dependencies/stb}/stb_image.h +476 -176
  155. data/{src → dependencies/stb}/stb_image_write.h +253 -131
  156. data/{src → dependencies/stb}/stb_truetype.h +262 -104
  157. data/{src → dependencies/utf8proc}/utf8proc.c +47 -29
  158. data/{src → dependencies/utf8proc}/utf8proc.h +46 -24
  159. data/{src → dependencies/utf8proc}/utf8proc_data.h +10043 -9609
  160. data/ext/gosu/extconf.rb +53 -39
  161. data/{Gosu → include/Gosu}/Audio.hpp +6 -8
  162. data/include/Gosu/Bitmap.hpp +100 -0
  163. data/{Gosu → include/Gosu}/Buttons.hpp +104 -44
  164. data/include/Gosu/Channel.h +25 -0
  165. data/include/Gosu/Color.h +38 -0
  166. data/{Gosu → include/Gosu}/Color.hpp +0 -0
  167. data/{Gosu → include/Gosu}/Directories.hpp +0 -0
  168. data/include/Gosu/Font.h +36 -0
  169. data/{Gosu → include/Gosu}/Font.hpp +1 -1
  170. data/{Gosu → include/Gosu}/Fwd.hpp +0 -5
  171. data/include/Gosu/Gosu.h +82 -0
  172. data/{Gosu → include/Gosu}/Gosu.hpp +0 -0
  173. data/{Gosu → include/Gosu}/Graphics.hpp +0 -0
  174. data/{Gosu → include/Gosu}/GraphicsBase.hpp +0 -0
  175. data/{Gosu → include/Gosu}/IO.hpp +0 -0
  176. data/include/Gosu/Image.h +54 -0
  177. data/{Gosu → include/Gosu}/Image.hpp +7 -6
  178. data/{Gosu → include/Gosu}/ImageData.hpp +0 -0
  179. data/{Gosu → include/Gosu}/Input.hpp +39 -51
  180. data/{Gosu → include/Gosu}/Inspection.hpp +0 -0
  181. data/{Gosu → include/Gosu}/Math.hpp +0 -0
  182. data/{Gosu → include/Gosu}/Platform.hpp +0 -0
  183. data/include/Gosu/Sample.h +19 -0
  184. data/include/Gosu/Song.h +24 -0
  185. data/{Gosu → include/Gosu}/Text.hpp +0 -0
  186. data/include/Gosu/TextInput.h +30 -0
  187. data/{Gosu → include/Gosu}/TextInput.hpp +0 -0
  188. data/{Gosu → include/Gosu}/Timing.hpp +0 -0
  189. data/{Gosu → include/Gosu}/Utility.hpp +15 -4
  190. data/{Gosu → include/Gosu}/Version.hpp +2 -2
  191. data/include/Gosu/Window.h +63 -0
  192. data/{Gosu → include/Gosu}/Window.hpp +23 -25
  193. data/lib/OpenAL32.dll +0 -0
  194. data/lib/SDL2.dll +0 -0
  195. data/lib/gosu.rb +0 -3
  196. data/lib/gosu/patches.rb +0 -23
  197. data/lib/gosu/preview.rb +1 -3
  198. data/lib/gosu/swig_patches.rb +3 -2
  199. data/lib64/OpenAL32.dll +0 -0
  200. data/lib64/SDL2.dll +0 -0
  201. data/rdoc/gosu.rb +98 -22
  202. data/src/Audio.cpp +50 -224
  203. data/src/AudioFile.hpp +20 -37
  204. data/src/AudioFileAudioToolbox.cpp +237 -0
  205. data/src/AudioFileSDLSound.cpp +147 -0
  206. data/src/AudioImpl.cpp +3 -12
  207. data/src/AudioImpl.hpp +3 -1
  208. data/src/Bitmap.cpp +85 -83
  209. data/src/BitmapIO.cpp +52 -58
  210. data/src/ChannelWrapper.cpp +50 -0
  211. data/src/ColorWrapper.cpp +126 -0
  212. data/src/Constants.cpp +338 -0
  213. data/src/Font.cpp +4 -1
  214. data/src/FontWrapper.cpp +74 -0
  215. data/src/GosuWrapper.cpp +251 -0
  216. data/src/Graphics.cpp +7 -4
  217. data/src/Image.cpp +13 -16
  218. data/src/ImageWrapper.cpp +168 -0
  219. data/src/Input.cpp +412 -164
  220. data/src/LargeImageData.cpp +2 -1
  221. data/src/MarkupParser.cpp +2 -1
  222. data/src/RubyGosu.cxx +912 -172
  223. data/src/RubyGosu.h +4 -2
  224. data/src/SampleWrapper.cpp +30 -0
  225. data/src/SongWrapper.cpp +52 -0
  226. data/src/TexChunk.cpp +1 -1
  227. data/src/Text.cpp +1 -0
  228. data/src/TextBuilder.cpp +3 -1
  229. data/src/TextInputWrapper.cpp +101 -0
  230. data/src/Texture.cpp +1 -1
  231. data/src/TrueTypeFont.cpp +2 -1
  232. data/src/Utility.cpp +11 -7
  233. data/src/Window.cpp +30 -39
  234. data/src/WindowWrapper.cpp +317 -0
  235. metadata +212 -43
  236. data/Gosu/AutoLink.hpp +0 -14
  237. data/Gosu/Bitmap.hpp +0 -113
  238. data/lib/gosu/zen.rb +0 -89
  239. data/src/AudioToolboxFile.hpp +0 -210
  240. data/src/OggFile.hpp +0 -92
  241. data/src/SndFile.hpp +0 -174
  242. data/src/WinMain.cpp +0 -64
@@ -6,10 +6,13 @@
6
6
  #include <Gosu/Math.hpp>
7
7
  #include <Gosu/Text.hpp>
8
8
  #include <Gosu/Utility.hpp>
9
- #include "utf8proc.h"
9
+
10
+ #include <utf8proc.h>
11
+
10
12
  #include <array>
11
13
  #include <cassert>
12
14
  #include <map>
15
+ #include <stdexcept>
13
16
  using namespace std;
14
17
 
15
18
  static const int FONT_RENDER_SCALE = 2;
@@ -0,0 +1,74 @@
1
+ #include <Gosu/Gosu.hpp>
2
+
3
+ extern "C" {
4
+ #include <Gosu/Image.h>
5
+ #include <Gosu/Font.h>
6
+
7
+ Gosu_Font *Gosu_Font_create(int height, const char *name, unsigned flags)
8
+ {
9
+ return reinterpret_cast<Gosu_Font *>(new Gosu::Font(height, name, flags));
10
+ }
11
+
12
+ const char *Gosu_Font_name(Gosu_Font *font)
13
+ {
14
+ return reinterpret_cast<Gosu::Font *>(font)->name().c_str();
15
+ }
16
+
17
+ int Gosu_Font_height(Gosu_Font *font)
18
+ {
19
+ return reinterpret_cast<Gosu::Font *>(font)->height();
20
+ }
21
+
22
+ unsigned Gosu_Font_flags(Gosu_Font *font)
23
+ {
24
+ return reinterpret_cast<Gosu::Font *>(font)->flags();
25
+ }
26
+
27
+ double Gosu_Font_text_width(Gosu_Font *font, const char *text)
28
+ {
29
+ return reinterpret_cast<Gosu::Font *>(font)->text_width(text);
30
+ }
31
+
32
+ double Gosu_Font_markup_width(Gosu_Font *font, const char *text)
33
+ {
34
+ return reinterpret_cast<Gosu::Font *>(font)->markup_width(text);
35
+ }
36
+
37
+ void Gosu_Font_draw_text(Gosu_Font *font, const char *text, double x, double y, double z,
38
+ double scale_x, double scale_y, unsigned c, unsigned mode)
39
+ {
40
+ reinterpret_cast<Gosu::Font *>(font)->draw_text(text, x, y, z, scale_x, scale_y, c, (Gosu::AlphaMode)mode);
41
+ }
42
+
43
+ void Gosu_Font_draw_markup(Gosu_Font *font, const char *text, double x, double y, double z,
44
+ double scale_x, double scale_y, unsigned c, unsigned mode)
45
+ {
46
+ reinterpret_cast<Gosu::Font *>(font)->draw_markup(text, x, y, z, scale_x, scale_y, c, (Gosu::AlphaMode)mode);
47
+ }
48
+
49
+ void Gosu_Font_draw_text_rel(Gosu_Font *font, const char *text, double x, double y, double z,
50
+ double rel_x, double rel_y, double scale_x, double scale_y,
51
+ unsigned c, unsigned mode)
52
+ {
53
+ reinterpret_cast<Gosu::Font *>(font)->draw_text_rel(text, x, y, z, rel_x, rel_y, scale_x, scale_y, c, (Gosu::AlphaMode)mode);
54
+ }
55
+
56
+ void Gosu_Font_draw_markup_rel(Gosu_Font *font, const char *text, double x, double y, double z,
57
+ double rel_x, double rel_y, double scale_x, double scale_y,
58
+ unsigned c, unsigned mode)
59
+ {
60
+ reinterpret_cast<Gosu::Font *>(font)->draw_markup_rel(text, x, y, z, rel_x, rel_y, scale_x, scale_y, c, (Gosu::AlphaMode)mode);
61
+ }
62
+
63
+ void Gosu_Font_set_image(Gosu_Font *font, const char *codepoint, unsigned font_flags, Gosu_Image *image)
64
+ {
65
+
66
+ const Gosu::Image *gosu_image = reinterpret_cast<Gosu::Image *>(image);
67
+ reinterpret_cast<Gosu::Font *>(font)->set_image(codepoint, font_flags, *gosu_image);
68
+ }
69
+
70
+ void Gosu_Font_destroy(Gosu_Font *font)
71
+ {
72
+ delete (reinterpret_cast<Gosu::Font *>(font));
73
+ }
74
+ }
@@ -0,0 +1,251 @@
1
+ #include <Gosu/Gosu.hpp>
2
+
3
+ extern "C" {
4
+ #include <Gosu/Gosu.h>
5
+
6
+ void Gosu_gl_z(double z, void function(void *data), void *data)
7
+ {
8
+ std::function<void ()> callback;
9
+ callback = [=]() { function(data); };
10
+
11
+ Gosu::Graphics::gl(z, callback);
12
+ }
13
+
14
+ void Gosu_gl(void function(void *data), void *data)
15
+ {
16
+ std::function<void ()> callback;
17
+ callback = [=]() { function(data); };
18
+
19
+ Gosu::Graphics::gl(callback);
20
+ }
21
+
22
+ Gosu_Image *Gosu_render(int width, int height, void function(void *data), void *data, unsigned image_flags)
23
+ {
24
+ std::function<void ()> callback;
25
+ callback = [=]() { function(data); };
26
+
27
+ return reinterpret_cast<Gosu_Image *>(new Gosu::Image(Gosu::Graphics::render(width, height, callback, image_flags)));
28
+ }
29
+
30
+ Gosu_Image *Gosu_record(int width, int height, void function(void *data), void *data)
31
+ {
32
+ std::function<void ()> callback;
33
+ callback = [=]() { function(data); };
34
+ return reinterpret_cast<Gosu_Image *>(new Gosu::Image(Gosu::Graphics::record(width, height, callback)));
35
+ }
36
+
37
+ void Gosu_flush()
38
+ {
39
+ Gosu::Graphics::flush();
40
+ }
41
+
42
+ void Gosu_transform(double m0, double m1, double m2, double m3, double m4, double m5, double m6,
43
+ double m7, double m8, double m9, double m10, double m11, double m12, double m13,
44
+ double m14, double m15, void function(void *data), void *data)
45
+ {
46
+ Gosu::Transform transform = {
47
+ m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
48
+ std::function<void ()> callback;
49
+ callback = [=]() { function(data); };
50
+
51
+ Gosu::Graphics::transform(transform, callback);
52
+ }
53
+
54
+ void Gosu_translate(double x, double y, void function(void *data), void *data)
55
+ {
56
+ std::function<void ()> callback;
57
+ callback = [=]() { function(data); };
58
+
59
+ Gosu::Graphics::transform(Gosu::translate(x, y), callback);
60
+ }
61
+
62
+ void Gosu_scale(double scale_x, double scale_y, double around_x, double around_y, void function(void *data), void *data)
63
+ {
64
+ std::function<void ()> callback;
65
+ callback = [=]() { function(data); };
66
+
67
+ Gosu::Graphics::transform(Gosu::scale(scale_x, scale_y, around_x, around_y), callback);
68
+ }
69
+
70
+ void Gosu_rotate(double angle, double around_x, double around_y, void function(void *data), void *data)
71
+ {
72
+ std::function<void ()> callback;
73
+ callback = [=]() { function(data); };
74
+
75
+ Gosu::Graphics::transform(Gosu::rotate(angle, around_x, around_y), callback);
76
+ }
77
+
78
+ void Gosu_clip_to(double x, double y, double width, double height, void function(void *data), void *data)
79
+ {
80
+ std::function<void ()> callback;
81
+ callback = [=]() { function(data); };
82
+
83
+ Gosu::Graphics::clip_to(x, y, width, height, callback);
84
+ }
85
+
86
+ void Gosu_draw_line(double x1, double y1, unsigned c1,
87
+ double x2, double y2, unsigned c2,
88
+ double z, unsigned mode)
89
+ {
90
+ Gosu::Graphics::draw_line(x1, y1, c1, x2, y2, c2, z, (Gosu::AlphaMode)mode);
91
+ }
92
+
93
+ void Gosu_draw_triangle(double x1, double y1, unsigned c1,
94
+ double x2, double y2, unsigned c2,
95
+ double x3, double y3, unsigned c3,
96
+ double z, unsigned mode)
97
+ {
98
+ Gosu::Graphics::draw_triangle(x1, y1, c1,
99
+ x2, y2, c2,
100
+ x3, y3, c3,
101
+ z, (Gosu::AlphaMode)mode);
102
+ }
103
+
104
+ void Gosu_draw_rect(double x, double y, double width, double height, unsigned c, double z, unsigned mode)
105
+ {
106
+ Gosu::Graphics::draw_rect(x, y, width, height, c, z, (Gosu::AlphaMode)mode);
107
+ }
108
+
109
+ void Gosu_draw_quad(double x1, double y1, unsigned c1,
110
+ double x2, double y2, unsigned c2,
111
+ double x3, double y3, unsigned c3,
112
+ double x4, double y4, unsigned c4,
113
+ double z, unsigned mode)
114
+ {
115
+ Gosu::Graphics::draw_quad(x1, y1, c1,
116
+ x2, y2, c2,
117
+ x3, y3, c3,
118
+ x4, y4, c4,
119
+ z, (Gosu::AlphaMode)mode);
120
+ }
121
+
122
+ double Gosu_distance(double x1, double y1, double x2, double y2)
123
+ {
124
+ return Gosu::distance(x1, y1, x2, y2);
125
+ }
126
+
127
+ double Gosu_angle(double from_x, double from_y, double to_x, double to_y)
128
+ {
129
+ return Gosu::angle(from_x, from_y, to_x, to_y);
130
+ }
131
+
132
+ double Gosu_angle_diff(double from, double to)
133
+ {
134
+ return Gosu::angle_diff(from, to);
135
+ }
136
+
137
+ double Gosu_offset_x(double angle, double radius)
138
+ {
139
+ return Gosu::offset_x(angle, radius);
140
+ }
141
+
142
+ double Gosu_offset_y(double angle, double radius)
143
+ {
144
+ return Gosu::offset_y(angle, radius);
145
+ }
146
+
147
+ double Gosu_random(double min, double max)
148
+ {
149
+ return Gosu::random(min, max);
150
+ }
151
+
152
+ unsigned Gosu_available_width(Gosu_Window *window)
153
+ {
154
+ Gosu::Window *gosu_window = nullptr;
155
+ if (window != nullptr) {
156
+ gosu_window = reinterpret_cast<Gosu::Window *>(window);
157
+ }
158
+ return Gosu::available_width(gosu_window);
159
+ }
160
+
161
+ unsigned Gosu_available_height(Gosu_Window *window)
162
+ {
163
+ Gosu::Window *gosu_window = nullptr;
164
+ if (window != nullptr) {
165
+ gosu_window = reinterpret_cast<Gosu::Window *>(window);
166
+ }
167
+ return Gosu::available_height(gosu_window);
168
+ }
169
+
170
+ unsigned Gosu_screen_width(Gosu_Window *window)
171
+ {
172
+ Gosu::Window *gosu_window = nullptr;
173
+ if (window != nullptr) {
174
+ gosu_window = reinterpret_cast<Gosu::Window *>(window);
175
+ }
176
+ return Gosu::screen_width(gosu_window);
177
+ }
178
+
179
+ unsigned Gosu_screen_height(Gosu_Window *window)
180
+ {
181
+ Gosu::Window *gosu_window = nullptr;
182
+ if (window != nullptr) {
183
+ gosu_window = reinterpret_cast<Gosu::Window *>(window);
184
+ }
185
+ return Gosu::screen_height(gosu_window);
186
+ }
187
+
188
+ int Gosu_button_down(int btn)
189
+ {
190
+ return Gosu::Input::down((Gosu::Button)btn);
191
+ }
192
+
193
+ const char *Gosu_button_id_to_char(int id)
194
+ {
195
+ static thread_local std::string button;
196
+ button = Gosu::Input::id_to_char((Gosu::Button)id);
197
+
198
+ return button.c_str();
199
+ }
200
+
201
+ unsigned Gosu_button_char_to_id(const char *btn)
202
+ {
203
+ return Gosu::Input::char_to_id(btn);
204
+ }
205
+
206
+ const char *Gosu_button_name(int btn)
207
+ {
208
+ static thread_local std::string name;
209
+ name = Gosu::Input::button_name((Gosu::Button)btn);
210
+ return name.empty() ? nullptr : name.c_str();
211
+ }
212
+
213
+ const char *Gosu_gamepad_name(int id)
214
+ {
215
+ static thread_local std::string name;
216
+ name = Gosu::Input::gamepad_name(id);
217
+ return name.empty() ? nullptr : name.c_str();
218
+ }
219
+
220
+ double Gosu_axis(int btn)
221
+ {
222
+ return Gosu::Input::axis((Gosu::Button)btn);
223
+ }
224
+
225
+ int Gosu_fps()
226
+ {
227
+ return Gosu::fps();
228
+ }
229
+
230
+ const char *Gosu_language()
231
+ {
232
+ static thread_local std::string language;
233
+ language = Gosu::language();
234
+
235
+ return language.c_str();
236
+ }
237
+
238
+ long Gosu_milliseconds()
239
+ {
240
+ return Gosu::milliseconds();
241
+ }
242
+
243
+ const char *Gosu_default_font_name()
244
+ {
245
+ static thread_local std::string name;
246
+ name = Gosu::default_font_name();
247
+
248
+ return name.c_str();
249
+ }
250
+
251
+ }
@@ -287,7 +287,9 @@ Gosu::Image Gosu::Graphics::render(int width, int height, const function<void ()
287
287
 
288
288
  // This is the actual render-to-texture step.
289
289
  Image result = OffScreenTarget(width, height, image_flags).render([&] {
290
+ #ifndef GOSU_IS_OPENGLES
290
291
  glPushAttrib(GL_ALL_ATTRIB_BITS);
292
+ #endif
291
293
  glClearColor(0, 0, 0, 0);
292
294
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
293
295
  glEnable(GL_BLEND);
@@ -296,7 +298,9 @@ Gosu::Image Gosu::Graphics::render(int width, int height, const function<void ()
296
298
  queues.back().perform_draw_ops_and_code();
297
299
  queues.pop_back();
298
300
  glFlush();
301
+ #ifndef GOSU_IS_OPENGLES
299
302
  glPopAttrib();
303
+ #endif
300
304
  });
301
305
 
302
306
  // Restore previous matrix and glViewport.
@@ -434,7 +438,7 @@ unique_ptr<Gosu::ImageData> Gosu::Graphics::create_image(const Bitmap& src,
434
438
  }
435
439
  else {
436
440
  Bitmap bmp(src_width, src_height);
437
- bmp.insert(src, 0, 0, src_x, src_y, src_width, src_height);
441
+ bmp.insert(0, 0, src, src_x, src_y, src_width, src_height);
438
442
  data = texture->try_alloc(bmp, 0);
439
443
  }
440
444
 
@@ -445,14 +449,13 @@ unique_ptr<Gosu::ImageData> Gosu::Graphics::create_image(const Bitmap& src,
445
449
  // Too large to fit on a single texture.
446
450
  if (src_width > max_size - 2 || src_height > max_size - 2) {
447
451
  Bitmap bmp(src_width, src_height);
448
- bmp.insert(src, 0, 0, src_x, src_y, src_width, src_height);
452
+ bmp.insert(0, 0, src, src_x, src_y, src_width, src_height);
449
453
  unique_ptr<ImageData> lidi;
450
454
  lidi.reset(new LargeImageData(bmp, max_size - 2, max_size - 2, flags));
451
455
  return lidi;
452
456
  }
453
457
 
454
- Bitmap bmp;
455
- apply_border_flags(bmp, src, src_x, src_y, src_width, src_height, flags);
458
+ Bitmap bmp = apply_border_flags(flags, src, src_x, src_y, src_width, src_height);
456
459
 
457
460
  // Try to put the bitmap into one of the already allocated textures.
458
461
  for (const auto& texture : textures) {
@@ -13,32 +13,30 @@ Gosu::Image::Image()
13
13
  {
14
14
  }
15
15
 
16
- Gosu::Image::Image(const string& filename, unsigned flags)
16
+ Gosu::Image::Image(const string& filename, unsigned image_flags)
17
17
  {
18
18
  // Forward.
19
- Bitmap bmp;
20
- load_image_file(bmp, filename);
21
- Image(bmp, flags).data_.swap(data_);
19
+ Bitmap bitmap = load_image_file(filename);
20
+ Image{bitmap, image_flags}.data_.swap(data_);
22
21
  }
23
22
 
24
- Gosu::Image::Image(const string& filename, unsigned src_x, unsigned src_y,
25
- unsigned src_width, unsigned src_height, unsigned flags)
23
+ Gosu::Image::Image(const string& filename, int src_x, int src_y, int src_width, int src_height,
24
+ unsigned image_flags)
26
25
  {
27
26
  // Forward.
28
- Bitmap bmp;
29
- load_image_file(bmp, filename);
30
- Image(bmp, src_x, src_y, src_width, src_height, flags).data_.swap(data_);
27
+ Bitmap bitmap = load_image_file(filename);
28
+ Image{bitmap, src_x, src_y, src_width, src_height, image_flags}.data_.swap(data_);
31
29
  }
32
30
 
33
- Gosu::Image::Image(const Bitmap& source, unsigned flags)
31
+ Gosu::Image::Image(const Bitmap& source, unsigned image_flags)
34
32
  {
35
33
  // Forward.
36
- Image(source, 0, 0, source.width(), source.height(), flags).data_.swap(data_);
34
+ Image{source, 0, 0, source.width(), source.height(), image_flags}.data_.swap(data_);
37
35
  }
38
36
 
39
- Gosu::Image::Image(const Bitmap& source, unsigned src_x, unsigned src_y,
40
- unsigned src_width, unsigned src_height, unsigned flags)
41
- : data_(Graphics::create_image(source, src_x, src_y, src_width, src_height, flags))
37
+ Gosu::Image::Image(const Bitmap& source, int src_x, int src_y, int src_width, int src_height,
38
+ unsigned image_flags)
39
+ : data_(Graphics::create_image(source, src_x, src_y, src_width, src_height, image_flags))
42
40
  {
43
41
  }
44
42
 
@@ -141,7 +139,6 @@ vector<Gosu::Image> Gosu::load_tiles(const Bitmap& bmp, int tile_width, int tile
141
139
  vector<Gosu::Image> Gosu::load_tiles(const string& filename, int tile_width, int tile_height,
142
140
  unsigned flags)
143
141
  {
144
- Bitmap bmp;
145
- load_image_file(bmp, filename);
142
+ Bitmap bmp = load_image_file(filename);
146
143
  return load_tiles(bmp, tile_width, tile_height, flags);
147
144
  }
@@ -0,0 +1,168 @@
1
+ #include <Gosu/Gosu.hpp>
2
+ #include <stdio.h>
3
+ #include <cstring>
4
+
5
+ extern "C" {
6
+ #include <Gosu/Image.h>
7
+
8
+ // Constructors
9
+ Gosu_Image *Gosu_Image_create(const char *filename, unsigned image_flags)
10
+ {
11
+ return reinterpret_cast<Gosu_Image *>(new Gosu::Image(filename, image_flags));
12
+ };
13
+
14
+ Gosu_Image *Gosu_Image_create_from_markup(const char *markup, const char *font, double font_height,
15
+ int width, double spacing, unsigned align, unsigned font_flags, unsigned image_flags)
16
+ {
17
+ Gosu::Bitmap bitmap = Gosu::layout_markup(markup, font, font_height, spacing, width,
18
+ (Gosu::Alignment)align, font_flags);
19
+ return reinterpret_cast<Gosu_Image *>(new Gosu::Image(bitmap, image_flags));
20
+ }
21
+
22
+ Gosu_Image *Gosu_Image_create_from_text(const char *text, const char *font, double font_height,
23
+ int width, double spacing, unsigned align, unsigned font_flags, unsigned image_flags)
24
+ {
25
+ Gosu::Bitmap bitmap = Gosu::layout_text(text, font, font_height, spacing, width,
26
+ (Gosu::Alignment)align, font_flags);
27
+ return reinterpret_cast<Gosu_Image *>(new Gosu::Image(bitmap, image_flags));
28
+ }
29
+
30
+ Gosu_Image *Gosu_Image_create_from_blob(unsigned char *blob, int byte_count, int columns, int rows, unsigned image_flags)
31
+ {
32
+ std::size_t size = columns * rows * 4;
33
+ Gosu::Bitmap bitmap(columns, rows, Gosu::Color::NONE);
34
+
35
+ if (byte_count == size) {
36
+ // 32 bit per pixel, assume R8G8B8A8
37
+ std::memcpy(bitmap.data(), blob, size);
38
+ }
39
+ else if (byte_count == size * sizeof(float)) {
40
+ // 128 bit per channel, assume float/float/float/float
41
+ const float *in = reinterpret_cast<const float *>(blob);
42
+ Gosu::Color::Channel *out = reinterpret_cast<Gosu::Color::Channel *>(bitmap.data());
43
+ for (int i = size; i > 0; --i) {
44
+ *(out++) = static_cast<Gosu::Color::Channel>(*(in++) * 255);
45
+ }
46
+ }
47
+ else {
48
+ return nullptr; // abort?
49
+ }
50
+
51
+ return reinterpret_cast<Gosu_Image *>(new Gosu::Image(bitmap, image_flags));
52
+ }
53
+
54
+ Gosu_Image *Gosu_Image_create_from_subimage(Gosu_Image *image, int left, int top, int width, int height)
55
+ {
56
+ Gosu::Image *gosu_image = reinterpret_cast<Gosu::Image *>(image);
57
+ std::unique_ptr<Gosu::ImageData> image_data = gosu_image->data().subimage(left, top, width, height);
58
+
59
+ return reinterpret_cast<Gosu_Image *>(image_data.get() ? new Gosu::Image(std::move(image_data)) : nullptr);
60
+ }
61
+
62
+ void Gosu_Image_create_from_tiles(const char *source, int tile_width, int tile_height, void function(void *data, Gosu_Image *image), void *data, unsigned image_flags)
63
+ {
64
+ std::vector<Gosu::Image> gosu_images = Gosu::load_tiles(source, tile_width, tile_height, image_flags);
65
+
66
+ for (Gosu::Image &img : gosu_images) {
67
+ function(data, reinterpret_cast<Gosu_Image *>(new Gosu::Image(img)));
68
+ }
69
+ }
70
+
71
+ void Gosu_Image_create_tiles_from_image(Gosu_Image *image, int tile_width, int tile_height, void function(void *data, Gosu_Image *image), void *data, unsigned image_flags)
72
+ {
73
+ std::vector<Gosu::Image> gosu_images = Gosu::load_tiles(reinterpret_cast<Gosu::Image *>(image)->data().to_bitmap(), tile_width, tile_height, image_flags);
74
+
75
+ for (Gosu::Image &img : gosu_images) {
76
+ function(data, reinterpret_cast<Gosu_Image *>(new Gosu::Image(img)));
77
+ }
78
+ }
79
+
80
+ // Properties
81
+ unsigned Gosu_Image_width(Gosu_Image *image)
82
+ {
83
+ return reinterpret_cast<Gosu::Image *>(image)->width();
84
+ }
85
+
86
+ unsigned Gosu_Image_height(Gosu_Image *image)
87
+ {
88
+ return reinterpret_cast<Gosu::Image *>(image)->height();
89
+ }
90
+
91
+ Gosu_GLTexInfo *Gosu_Image_gl_tex_info_create(Gosu_Image *image)
92
+ {
93
+ Gosu::Image *gosu_image = reinterpret_cast<Gosu::Image *>(image);
94
+ Gosu::GLTexInfo *gosu_texture_info = new Gosu::GLTexInfo(*gosu_image->data().gl_tex_info());
95
+ if (gosu_texture_info) {
96
+ return reinterpret_cast<Gosu_GLTexInfo *>(gosu_texture_info);
97
+ }
98
+ else {
99
+ return nullptr;
100
+ }
101
+ }
102
+
103
+ void Gosu_Image_gl_tex_info_destroy(Gosu_GLTexInfo *gl_tex_info)
104
+ {
105
+ delete (reinterpret_cast<Gosu::GLTexInfo *>(gl_tex_info));
106
+ }
107
+
108
+ // Rendering
109
+ void Gosu_Image_draw(Gosu_Image *image, double x, double y, double z, double scale_x, double scale_y, unsigned color, unsigned mode)
110
+ {
111
+ reinterpret_cast<Gosu::Image *>(image)->draw(x, y, z, scale_x, scale_y, color, (Gosu::AlphaMode)mode);
112
+ }
113
+
114
+ void Gosu_Image_draw_rot(Gosu_Image *image, double x, double y, double z,
115
+ double angle, double center_x, double center_y,
116
+ double scale_x, double scale_y, unsigned color, unsigned mode)
117
+ {
118
+ reinterpret_cast<Gosu::Image *>(image)->draw_rot(x, y, z,
119
+ angle, center_x, center_y,
120
+ scale_x, scale_y,
121
+ color, (Gosu::AlphaMode)mode);
122
+ }
123
+
124
+ void Gosu_Image_draw_as_quad(Gosu_Image *image,
125
+ double x1, double y1, unsigned color1,
126
+ double x2, double y2, unsigned color2,
127
+ double x3, double y3, unsigned color3,
128
+ double x4, double y4, unsigned color4,
129
+ double z, unsigned mode)
130
+ {
131
+ Gosu::Image *gosu_image = reinterpret_cast<Gosu::Image *>(image);
132
+ gosu_image->data().draw(
133
+ x1, y1, color1,
134
+ x2, y2, color2,
135
+ x3, y3, color3,
136
+ x4, y4, color4,
137
+ z, (Gosu::AlphaMode)mode);
138
+ }
139
+
140
+ // Image operations
141
+ void Gosu_Image_insert(Gosu_Image *image, Gosu_Image *source, int x, int y)
142
+ {
143
+ Gosu::Bitmap bmp;
144
+ bmp = reinterpret_cast<Gosu::Image *>(source)->data().to_bitmap();
145
+ reinterpret_cast<Gosu::Image *>(image)->data().insert(bmp, x, y);
146
+ }
147
+
148
+ unsigned char *Gosu_Image_to_blob(Gosu_Image *image)
149
+ {
150
+ Gosu::Image *gosu_image = reinterpret_cast<Gosu::Image *>(image);
151
+ static thread_local Gosu::Bitmap bitmap;
152
+ bitmap = gosu_image->data().to_bitmap();
153
+
154
+ return reinterpret_cast<unsigned char *>(bitmap.data());
155
+ }
156
+
157
+ void Gosu_Image_save(Gosu_Image *image, const char *filename)
158
+ {
159
+ Gosu::save_image_file(reinterpret_cast<Gosu::Image *>(image)->data().to_bitmap(), filename);
160
+ }
161
+
162
+ // Destructor
163
+ void Gosu_Image_destroy(Gosu_Image *image)
164
+ {
165
+ delete (reinterpret_cast<Gosu::Image *>(image));
166
+ }
167
+
168
+ }