gosu 1.0.0 → 1.2.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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/COPYING +1 -1
  3. data/ext/gosu/extconf.rb +5 -1
  4. data/include/Gosu/Font.hpp +7 -9
  5. data/include/Gosu/Graphics.hpp +6 -4
  6. data/include/Gosu/GraphicsBase.hpp +6 -6
  7. data/include/Gosu/Image.hpp +3 -3
  8. data/include/Gosu/ImageData.hpp +1 -1
  9. data/include/Gosu/Text.hpp +4 -4
  10. data/include/Gosu/Utility.hpp +10 -8
  11. data/include/Gosu/Version.hpp +1 -1
  12. data/include/Gosu/Window.hpp +23 -9
  13. data/lib/gosu/compat.rb +4 -0
  14. data/lib/gosu/swig_patches.rb +11 -10
  15. data/rdoc/gosu.rb +14 -1
  16. data/src/EmptyImageData.hpp +1 -1
  17. data/src/Font.cpp +4 -4
  18. data/src/Graphics.cpp +4 -4
  19. data/src/Image.cpp +4 -3
  20. data/src/Input.cpp +1 -10
  21. data/src/LargeImageData.cpp +1 -1
  22. data/src/LargeImageData.hpp +1 -1
  23. data/src/Macro.cpp +100 -143
  24. data/src/Macro.hpp +1 -1
  25. data/src/RenderState.hpp +5 -5
  26. data/src/Resolution.cpp +111 -63
  27. data/src/RubyGosu.cxx +222 -124
  28. data/src/RubyGosu.h +2 -2
  29. data/src/TexChunk.cpp +1 -1
  30. data/src/TexChunk.hpp +1 -1
  31. data/src/TrueTypeFontApple.cpp +10 -2
  32. data/src/TrueTypeFontWin.cpp +3 -3
  33. data/src/Utility.cpp +52 -23
  34. data/src/Window.cpp +60 -31
  35. data/src/WindowUIKit.cpp +21 -9
  36. metadata +3 -25
  37. data/include/Gosu/Channel.h +0 -25
  38. data/include/Gosu/Color.h +0 -38
  39. data/include/Gosu/Font.h +0 -36
  40. data/include/Gosu/Gosu.h +0 -82
  41. data/include/Gosu/Image.h +0 -54
  42. data/include/Gosu/Sample.h +0 -19
  43. data/include/Gosu/Song.h +0 -24
  44. data/include/Gosu/TextInput.h +0 -30
  45. data/include/Gosu/Window.h +0 -63
  46. data/src/ChannelWrapper.cpp +0 -50
  47. data/src/ColorWrapper.cpp +0 -126
  48. data/src/Constants.cpp +0 -338
  49. data/src/FontWrapper.cpp +0 -74
  50. data/src/GosuWrapper.cpp +0 -251
  51. data/src/ImageWrapper.cpp +0 -168
  52. data/src/MPEGFile.hpp +0 -90
  53. data/src/SampleWrapper.cpp +0 -30
  54. data/src/SongWrapper.cpp +0 -52
  55. data/src/TextInputWrapper.cpp +0 -101
  56. data/src/UtilityApple.cpp +0 -16
  57. data/src/UtilityWin.cpp +0 -17
  58. data/src/WindowWrapper.cpp +0 -317
data/src/ImageWrapper.cpp DELETED
@@ -1,168 +0,0 @@
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
- }
data/src/MPEGFile.hpp DELETED
@@ -1,90 +0,0 @@
1
- #pragma once
2
-
3
- #include "AudioFile.hpp"
4
- #include <Gosu/IO.hpp>
5
- #include <algorithm>
6
- #include <stdexcept>
7
- #include <string>
8
-
9
- #include <mpg123.h>
10
-
11
- namespace Gosu
12
- {
13
- class MPEGFile : public AudioFile
14
- {
15
- Gosu::Buffer contents_;
16
- off_t position_ = 0;
17
- mpg123_handle* handle_;
18
-
19
- enum {
20
- SAMPLE_RATE = 44100,
21
- INPUT_SIZE = 16384
22
- };
23
-
24
- public:
25
- MPEGFile(Gosu::Reader reader)
26
- {
27
- contents_.resize(reader.resource().size() - reader.position());
28
- reader.read(contents_.data(), contents_.size());
29
-
30
- static int init_error = mpg123_init();
31
- if (init_error != MPG123_OK) {
32
- throw std::runtime_error("Cannot initialize mpg123: " +
33
- std::string(mpg123_plain_strerror(init_error)));
34
- }
35
-
36
- int new_error;
37
- handle_ = mpg123_new(nullptr, &new_error);
38
- if (handle_ == nullptr) {
39
- throw std::runtime_error("Cannot initialize mpg123 decoder: " +
40
- std::string(mpg123_plain_strerror(new_error)));
41
- }
42
-
43
- mpg123_param(handle_, MPG123_FORCE_RATE, SAMPLE_RATE, 0);
44
- mpg123_param(handle_, MPG123_FLAGS, MPG123_FORCE_STEREO, 0);
45
-
46
- mpg123_open_feed(handle_);
47
- }
48
-
49
- ~MPEGFile() override
50
- {
51
- mpg123_delete(handle_);
52
- }
53
-
54
- ALenum format() const override
55
- {
56
- return AL_FORMAT_STEREO16;
57
- }
58
-
59
- ALuint sample_rate() const override
60
- {
61
- return SAMPLE_RATE;
62
- }
63
-
64
- std::size_t read_data(void* dest, std::size_t length) override
65
- {
66
- std::size_t written = 0;
67
- int error = 0;
68
-
69
- error = mpg123_read(handle_, static_cast<unsigned char*>(dest), length, &written);
70
- while (written == 0
71
- && (error == MPG123_NEED_MORE || error == MPG123_NEW_FORMAT)
72
- && position_ != contents_.size()) {
73
- auto bytes = std::min<std::size_t>(contents_.size() - position_, INPUT_SIZE);
74
- // (Not sure what to do about the return value of mpg123_feed here.)
75
- mpg123_feed(handle_, static_cast<unsigned char*>(contents_.data()) + position_,
76
- bytes);
77
- position_ += bytes;
78
- error = mpg123_read(handle_, static_cast<unsigned char*>(dest), length, &written);
79
- }
80
-
81
- return written;
82
- }
83
-
84
- void rewind() override
85
- {
86
- mpg123_feedseek(handle_, 0, SEEK_SET, &position_);
87
- assert (position_ >= 0 && position_ <= contents_.size());
88
- }
89
- };
90
- }
@@ -1,30 +0,0 @@
1
- #include <Gosu/Audio.hpp>
2
- #include <Gosu/Sample.h>
3
-
4
- extern "C" {
5
-
6
- Gosu_Sample *Gosu_Sample_create(const char *filename)
7
- {
8
- return reinterpret_cast<Gosu_Sample *>( new Gosu::Sample(filename) );
9
- }
10
-
11
- void Gosu_Sample_destroy(Gosu_Sample *sample)
12
- {
13
- delete( reinterpret_cast<Gosu::Sample *>( sample ) );
14
- }
15
-
16
- Gosu_Channel *Gosu_Sample_play(Gosu_Sample *sample, double volume, double speed, bool looping)
17
- {
18
- Gosu::Channel channel = reinterpret_cast<Gosu::Sample *>( sample )->play(volume, speed, looping);
19
-
20
- return reinterpret_cast<Gosu_Channel *>( new Gosu::Channel(channel) );
21
- }
22
-
23
- Gosu_Channel *Gosu_Sample_play_pan(Gosu_Sample *sample, double pan, double volume, double speed, bool looping)
24
- {
25
- Gosu::Channel channel = reinterpret_cast<Gosu::Sample *>( sample )->play_pan(pan, volume, speed, looping);
26
-
27
- return reinterpret_cast<Gosu_Channel *>( new Gosu::Channel(channel) );
28
- }
29
-
30
- }
data/src/SongWrapper.cpp DELETED
@@ -1,52 +0,0 @@
1
- #include <Gosu/Audio.hpp>
2
- #include <Gosu/Song.h>
3
-
4
- extern "C" {
5
- Gosu_Song* Gosu_Song_create(const char* filename)
6
- {
7
- return reinterpret_cast<Gosu_Song*>( new Gosu::Song(filename) );
8
- }
9
-
10
- void Gosu_Song_destroy(Gosu_Song* song)
11
- {
12
- delete( reinterpret_cast<Gosu::Song*>( song ));
13
- }
14
-
15
- void Gosu_Song_play(Gosu_Song* song, bool looping)
16
- {
17
- reinterpret_cast<Gosu::Song*>( song )->play(looping);
18
- }
19
-
20
- bool Gosu_Song_playing(Gosu_Song* song)
21
- {
22
- return reinterpret_cast<Gosu::Song*>( song )->playing();
23
- }
24
-
25
- void Gosu_Song_pause(Gosu_Song* song)
26
- {
27
- reinterpret_cast<Gosu::Song*>( song )->pause();
28
- }
29
-
30
- bool Gosu_Song_paused(Gosu_Song* song)
31
- {
32
- return reinterpret_cast<Gosu::Song*>( song )->paused();
33
- }
34
-
35
- void Gosu_Song_stop(Gosu_Song* song)
36
- {
37
- reinterpret_cast<Gosu::Song*>( song )->stop();
38
- }
39
-
40
- double Gosu_Song_volume(Gosu_Song* song){
41
- return reinterpret_cast<Gosu::Song*>( song )->volume();
42
- }
43
-
44
- void Gosu_Song_set_volume(Gosu_Song* song, double volume){
45
- return reinterpret_cast<Gosu::Song*>( song )->set_volume(volume);
46
- }
47
-
48
- Gosu_Song* Gosu_Song_current_song()
49
- {
50
- return reinterpret_cast<Gosu_Song*>(Gosu::Song::current_song());
51
- }
52
- }
@@ -1,101 +0,0 @@
1
- #include <Gosu/Gosu.hpp>
2
-
3
- namespace Gosu
4
- {
5
- class TextInputForWrapper : public Gosu::TextInput
6
- {
7
- public:
8
- TextInputForWrapper();
9
- std::string filter(std::string text) const override;
10
- std::function<void (const char *text)> filter_callback;
11
- std::string filter_result = "";
12
- };
13
- } // namespace Gosu
14
-
15
- Gosu::TextInputForWrapper::TextInputForWrapper() : Gosu::TextInput()
16
- {
17
- }
18
-
19
- std::string Gosu::TextInputForWrapper::filter(std::string text) const
20
- {
21
- if (filter_callback != nullptr) {
22
- filter_callback(text.c_str());
23
- return filter_result;
24
- }
25
- else {
26
- return text;
27
- }
28
- }
29
-
30
- extern "C" {
31
- #include <Gosu/TextInput.h>
32
-
33
- Gosu_TextInput *Gosu_TextInput_create()
34
- {
35
- return reinterpret_cast<Gosu_TextInput *>(new Gosu::TextInputForWrapper());
36
- }
37
-
38
- const char *Gosu_TextInput_text(Gosu_TextInput *text_input)
39
- {
40
- thread_local std::string string;
41
- string = reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->text();
42
-
43
- return string.c_str();
44
- }
45
-
46
- void Gosu_TextInput_set_text(Gosu_TextInput *text_input, const char *text)
47
- {
48
- reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->set_text(text);
49
- }
50
-
51
- unsigned Gosu_TextInput_caret_pos(Gosu_TextInput *text_input)
52
- {
53
- return reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->caret_pos();
54
- }
55
-
56
- void Gosu_TextInput_set_caret_pos(Gosu_TextInput *text_input, unsigned pos)
57
- {
58
- return reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->set_caret_pos(pos);
59
- }
60
-
61
- unsigned Gosu_TextInput_selection_start(Gosu_TextInput *text_input)
62
- {
63
- return reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->selection_start();
64
- }
65
-
66
- void Gosu_TextInput_set_selection_start(Gosu_TextInput *text_input, unsigned pos)
67
- {
68
- return reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->set_selection_start(pos);
69
- }
70
-
71
- void Gosu_TextInput_set_filter(Gosu_TextInput *text_input, void function(void *data, const char *text), void *data)
72
- {
73
- reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->filter_callback = [=](const char *text) { function(data, text); };
74
- }
75
-
76
- void Gosu_TextInput_set_filter_result(Gosu_TextInput *text_input, const char *result)
77
- {
78
- reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->filter_result = result;
79
- }
80
-
81
- void Gosu_TextInput_insert_text(Gosu_TextInput *text_input, const char *text)
82
- {
83
- reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->insert_text(text);
84
- }
85
-
86
- void Gosu_TextInput_delete_backward(Gosu_TextInput *text_input)
87
- {
88
- reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->delete_backward();
89
- }
90
-
91
- void Gosu_TextInput_delete_forward(Gosu_TextInput *text_input)
92
- {
93
- reinterpret_cast<Gosu::TextInputForWrapper *>(text_input)->delete_forward();
94
- }
95
-
96
- void Gosu_TextInput_destroy(Gosu_TextInput *text_input)
97
- {
98
- delete (reinterpret_cast<Gosu::TextInputForWrapper *>(text_input));
99
- }
100
-
101
- }
data/src/UtilityApple.cpp DELETED
@@ -1,16 +0,0 @@
1
- #include <Gosu/Platform.hpp>
2
- #if defined(GOSU_IS_MAC)
3
-
4
- #import <Gosu/Utility.hpp>
5
- #import <Foundation/Foundation.h>
6
- using namespace std;
7
-
8
- string Gosu::language()
9
- {
10
- @autoreleasepool {
11
- NSString* language = [NSLocale preferredLanguages][0];
12
- return language.UTF8String ?: "en";
13
- }
14
- }
15
-
16
- #endif