gosu 1.4.6 → 2.0.0.pre6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/COPYING +2 -1
- data/dependencies/SDL/include/SDL_atomic.h +2 -3
- data/dependencies/SDL/include/SDL_audio.h +7 -7
- data/dependencies/SDL/include/SDL_blendmode.h +1 -1
- data/dependencies/SDL/include/SDL_endian.h +3 -3
- data/dependencies/SDL/include/SDL_gamecontroller.h +4 -4
- data/dependencies/SDL/include/SDL_hints.h +72 -28
- data/dependencies/SDL/include/SDL_joystick.h +8 -5
- data/dependencies/SDL/include/SDL_keycode.h +1 -1
- data/dependencies/SDL/include/SDL_main.h +7 -0
- data/dependencies/SDL/include/SDL_mouse.h +6 -7
- data/dependencies/SDL/include/SDL_mutex.h +79 -5
- data/dependencies/SDL/include/SDL_opengl_glext.h +5 -1
- data/dependencies/SDL/include/SDL_power.h +7 -8
- data/dependencies/SDL/include/SDL_render.h +5 -0
- data/dependencies/SDL/include/SDL_revision.h +2 -2
- data/dependencies/SDL/include/SDL_sensor.h +1 -1
- data/dependencies/SDL/include/SDL_stdinc.h +19 -11
- data/dependencies/SDL/include/SDL_thread.h +2 -2
- data/dependencies/SDL/include/SDL_version.h +2 -2
- data/dependencies/SDL/include/SDL_video.h +30 -2
- data/dependencies/SDL/include/begin_code.h +7 -7
- data/dependencies/SDL/include/close_code.h +2 -2
- data/dependencies/SDL/lib/x64/libSDL2.dll.a +0 -0
- data/dependencies/SDL/lib/x86/libSDL2.dll.a +0 -0
- data/dependencies/SDL_sound/SDL_sound.h +1 -1
- data/dependencies/SDL_sound/dr_flac.h +48 -23
- data/dependencies/SDL_sound/dr_mp3.h +34 -14
- data/dependencies/SDL_sound/stb_vorbis.h +3 -2
- data/dependencies/mojoAL/mojoal.c +1 -1
- data/ext/{gosu → gosu-ffi}/extconf.rb +34 -33
- data/ext/gosu-ffi/gosu-ffi.def +464 -0
- data/ffi/Gosu.cpp +307 -0
- data/ffi/Gosu.h +84 -0
- data/ffi/Gosu_Channel.cpp +62 -0
- data/ffi/Gosu_Channel.h +17 -0
- data/ffi/Gosu_Color.cpp +132 -0
- data/ffi/Gosu_Color.h +31 -0
- data/ffi/Gosu_Constants.cpp +334 -0
- data/ffi/Gosu_FFI.h +34 -0
- data/ffi/Gosu_FFI_internal.h +161 -0
- data/ffi/Gosu_Font.cpp +92 -0
- data/ffi/Gosu_Font.h +32 -0
- data/ffi/Gosu_Image.cpp +206 -0
- data/ffi/Gosu_Image.h +60 -0
- data/ffi/Gosu_Sample.cpp +29 -0
- data/ffi/Gosu_Sample.h +14 -0
- data/ffi/Gosu_Song.cpp +69 -0
- data/ffi/Gosu_Song.h +18 -0
- data/ffi/Gosu_TextInput.cpp +94 -0
- data/ffi/Gosu_TextInput.h +25 -0
- data/ffi/Gosu_Window.cpp +314 -0
- data/ffi/Gosu_Window.h +78 -0
- data/include/Gosu/Audio.hpp +6 -11
- data/include/Gosu/Bitmap.hpp +38 -53
- data/include/Gosu/Buffer.hpp +54 -0
- data/include/Gosu/Color.hpp +27 -35
- data/include/Gosu/Directories.hpp +25 -28
- data/include/Gosu/Drawable.hpp +58 -0
- data/include/Gosu/Font.hpp +6 -5
- data/include/Gosu/Fwd.hpp +4 -6
- data/include/Gosu/Gosu.hpp +5 -5
- data/include/Gosu/Graphics.hpp +51 -61
- data/include/Gosu/GraphicsBase.hpp +1 -11
- data/include/Gosu/Image.hpp +11 -14
- data/include/Gosu/Math.hpp +50 -72
- data/include/Gosu/Transform.hpp +32 -0
- data/include/Gosu/Utility.hpp +51 -1
- data/include/Gosu/Version.hpp +3 -3
- data/include/Gosu/Window.hpp +15 -9
- data/lib/SDL2.dll +0 -0
- data/lib/gosu/channel.rb +49 -0
- data/lib/gosu/color.rb +150 -0
- data/lib/gosu/compat.rb +29 -8
- data/lib/gosu/constants.rb +386 -0
- data/lib/gosu/ffi.rb +258 -0
- data/lib/gosu/font.rb +56 -0
- data/lib/gosu/gl_tex_info.rb +33 -0
- data/lib/gosu/gosu.rb +210 -0
- data/lib/gosu/image.rb +141 -0
- data/lib/gosu/numeric.rb +17 -0
- data/lib/gosu/preview.rb +6 -6
- data/lib/gosu/sample.rb +24 -0
- data/lib/gosu/song.rb +56 -0
- data/lib/gosu/text_input.rb +69 -0
- data/lib/gosu/window.rb +228 -0
- data/lib/gosu.rb +29 -8
- data/lib64/SDL2.dll +0 -0
- data/rdoc/gosu.rb +0 -2
- data/src/Audio.cpp +12 -12
- data/src/AudioFile.hpp +5 -4
- data/src/AudioFileAudioToolbox.cpp +8 -8
- data/src/AudioFileSDLSound.cpp +7 -10
- data/src/BinPacker.cpp +187 -0
- data/src/BinPacker.hpp +55 -0
- data/src/Bitmap.cpp +166 -144
- data/src/BitmapIO.cpp +60 -86
- data/src/Buffer.cpp +159 -0
- data/src/Color.cpp +75 -80
- data/src/Directories.cpp +47 -0
- data/src/DirectoriesUIKit.cpp +50 -0
- data/src/DrawOp.hpp +9 -4
- data/src/DrawOpQueue.hpp +2 -2
- data/src/Drawable.cpp +95 -0
- data/src/EmptyDrawable.hpp +38 -0
- data/src/FPS.cpp +31 -0
- data/src/Font.cpp +104 -74
- data/src/GosuGLView.cpp +14 -6
- data/src/GosuViewController.cpp +2 -10
- data/src/Graphics.cpp +60 -126
- data/src/GraphicsImpl.hpp +17 -47
- data/src/Image.cpp +41 -35
- data/src/Input.cpp +7 -8
- data/src/Macro.cpp +6 -6
- data/src/Macro.hpp +4 -4
- data/src/MarkupParser.cpp +5 -5
- data/src/Math.cpp +35 -22
- data/src/OffScreenTarget.cpp +53 -49
- data/src/OffScreenTarget.hpp +13 -11
- data/src/OpenGLContext.cpp +117 -0
- data/src/OpenGLContext.hpp +41 -0
- data/src/RenderState.hpp +21 -19
- data/src/Resolution.cpp +23 -21
- data/src/TexChunk.cpp +35 -80
- data/src/TexChunk.hpp +44 -35
- data/src/Text.cpp +1 -1
- data/src/TextBuilder.cpp +35 -21
- data/src/TextBuilder.hpp +6 -9
- data/src/Texture.cpp +62 -80
- data/src/Texture.hpp +25 -23
- data/src/TiledDrawable.cpp +150 -0
- data/src/TiledDrawable.hpp +47 -0
- data/src/TimingApple.cpp +1 -1
- data/src/Transform.cpp +45 -50
- data/src/TransformStack.hpp +16 -16
- data/src/TrueTypeFont.cpp +59 -51
- data/src/TrueTypeFont.hpp +6 -7
- data/src/TrueTypeFontApple.cpp +28 -19
- data/src/TrueTypeFontUnix.cpp +27 -23
- data/src/TrueTypeFontWin.cpp +30 -30
- data/src/Utility.cpp +84 -21
- data/src/UtilityWin.cpp +45 -0
- data/src/Window.cpp +92 -142
- data/src/WindowUIKit.cpp +14 -14
- metadata +72 -31
- data/include/Gosu/IO.hpp +0 -254
- data/include/Gosu/ImageData.hpp +0 -53
- data/include/Gosu/Inspection.hpp +0 -7
- data/lib/gosu/patches.rb +0 -66
- data/lib/gosu/run.rb +0 -20
- data/lib/gosu/swig_patches.rb +0 -110
- data/src/BlockAllocator.cpp +0 -131
- data/src/BlockAllocator.hpp +0 -32
- data/src/DirectoriesApple.cpp +0 -69
- data/src/DirectoriesUnix.cpp +0 -46
- data/src/DirectoriesWin.cpp +0 -65
- data/src/EmptyImageData.hpp +0 -52
- data/src/FileUnix.cpp +0 -99
- data/src/FileWin.cpp +0 -88
- data/src/IO.cpp +0 -60
- data/src/Iconv.hpp +0 -51
- data/src/Inspection.cpp +0 -27
- data/src/LargeImageData.cpp +0 -215
- data/src/LargeImageData.hpp +0 -39
- data/src/Log.hpp +0 -19
- data/src/RubyGosu.cxx +0 -13100
- data/src/RubyGosu.h +0 -49
- data/src/WinUtility.cpp +0 -61
- data/src/WinUtility.hpp +0 -27
data/src/IO.cpp
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
#include <Gosu/IO.hpp>
|
2
|
-
#include <cassert>
|
3
|
-
#include <cstring>
|
4
|
-
using namespace std;
|
5
|
-
|
6
|
-
void Gosu::Reader::read(void* dest, size_t length)
|
7
|
-
{
|
8
|
-
res->read(pos, length, dest);
|
9
|
-
seek(length);
|
10
|
-
}
|
11
|
-
|
12
|
-
void Gosu::Writer::write(const void* source, size_t length)
|
13
|
-
{
|
14
|
-
// Try to resize the source if necessary.
|
15
|
-
if (pos + length > res->size()) {
|
16
|
-
res->resize(pos + length);
|
17
|
-
}
|
18
|
-
|
19
|
-
res->write(pos, length, source);
|
20
|
-
seek(length);
|
21
|
-
}
|
22
|
-
|
23
|
-
size_t Gosu::Buffer::size() const
|
24
|
-
{
|
25
|
-
return buf.size();
|
26
|
-
}
|
27
|
-
|
28
|
-
void Gosu::Buffer::resize(size_t new_size)
|
29
|
-
{
|
30
|
-
buf.resize(new_size);
|
31
|
-
}
|
32
|
-
|
33
|
-
void Gosu::Buffer::read(size_t offset, size_t length, void* dest_buffer) const
|
34
|
-
{
|
35
|
-
assert (offset + length <= size());
|
36
|
-
if (length) {
|
37
|
-
memcpy(dest_buffer, &buf[offset], length);
|
38
|
-
}
|
39
|
-
}
|
40
|
-
|
41
|
-
void Gosu::Buffer::write(size_t offset, size_t length, const void* source_buffer)
|
42
|
-
{
|
43
|
-
assert (offset + length <= size());
|
44
|
-
if (length) {
|
45
|
-
memcpy(&buf[offset], source_buffer, length);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
|
-
void Gosu::load_file(Buffer& buffer, const string& filename)
|
50
|
-
{
|
51
|
-
File file(filename);
|
52
|
-
buffer.resize(file.size());
|
53
|
-
file.read(0, buffer.size(), buffer.data());
|
54
|
-
}
|
55
|
-
|
56
|
-
void Gosu::save_file(const Buffer& buffer, const string& filename)
|
57
|
-
{
|
58
|
-
File file(filename, FM_REPLACE);
|
59
|
-
file.write(0, buffer.size(), buffer.data());
|
60
|
-
}
|
data/src/Iconv.hpp
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
#pragma once
|
2
|
-
|
3
|
-
#include <Gosu/Platform.hpp>
|
4
|
-
|
5
|
-
#include <iconv.h>
|
6
|
-
#include <errno.h>
|
7
|
-
|
8
|
-
namespace Gosu
|
9
|
-
{
|
10
|
-
template<typename Out, const char* to, const char* from, typename In>
|
11
|
-
Out iconvert(const In& in)
|
12
|
-
{
|
13
|
-
if (in.empty()) return Out();
|
14
|
-
|
15
|
-
const size_t buffer_len = 128;
|
16
|
-
typedef typename In::value_type InElem;
|
17
|
-
typedef typename Out::value_type OutElem;
|
18
|
-
|
19
|
-
static iconv_t cd = iconv_open(to, from);
|
20
|
-
|
21
|
-
Out result;
|
22
|
-
OutElem buffer[buffer_len];
|
23
|
-
|
24
|
-
char* inbuf = const_cast<char*>(reinterpret_cast<const char*>(&in[0]));
|
25
|
-
size_t inbytesleft = in.size() * sizeof(InElem);
|
26
|
-
char* outbuf = reinterpret_cast<char*>(buffer);
|
27
|
-
size_t outbytesleft = sizeof buffer;
|
28
|
-
|
29
|
-
for (;;) {
|
30
|
-
size_t ret = ::iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
|
31
|
-
if (ret == static_cast<size_t>(-1) && errno == EILSEQ) {
|
32
|
-
// Skip illegal sequence part, repeat loop.
|
33
|
-
// TODO: Or retry w/ different encoding?
|
34
|
-
++inbuf;
|
35
|
-
--inbytesleft;
|
36
|
-
}
|
37
|
-
else if (ret == static_cast<size_t>(-1) && errno == E2BIG) {
|
38
|
-
// Append new characters, reset out buffer, then repeat loop.
|
39
|
-
result.insert(result.end(), buffer, buffer + buffer_len);
|
40
|
-
outbuf = reinterpret_cast<char*>(buffer);
|
41
|
-
outbytesleft = sizeof buffer;
|
42
|
-
}
|
43
|
-
else {
|
44
|
-
// Append what's new in the buffer, then LEAVE loop.
|
45
|
-
result.insert(result.end(), buffer,
|
46
|
-
buffer + buffer_len - outbytesleft / sizeof(OutElem));
|
47
|
-
return result;
|
48
|
-
}
|
49
|
-
}
|
50
|
-
}
|
51
|
-
}
|
data/src/Inspection.cpp
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
#include <Gosu/Inspection.hpp>
|
2
|
-
#include <Gosu/Timing.hpp>
|
3
|
-
|
4
|
-
namespace Gosu
|
5
|
-
{
|
6
|
-
namespace FPS
|
7
|
-
{
|
8
|
-
int fps, accum;
|
9
|
-
unsigned long sec;
|
10
|
-
|
11
|
-
void register_frame()
|
12
|
-
{
|
13
|
-
++accum;
|
14
|
-
unsigned long new_sec = Gosu::milliseconds() / 1000;
|
15
|
-
if (sec != new_sec) {
|
16
|
-
sec = new_sec;
|
17
|
-
fps = accum;
|
18
|
-
accum = 0;
|
19
|
-
}
|
20
|
-
}
|
21
|
-
}
|
22
|
-
|
23
|
-
int fps()
|
24
|
-
{
|
25
|
-
return FPS::fps;
|
26
|
-
}
|
27
|
-
}
|
data/src/LargeImageData.cpp
DELETED
@@ -1,215 +0,0 @@
|
|
1
|
-
#include "LargeImageData.hpp"
|
2
|
-
#include <Gosu/Bitmap.hpp>
|
3
|
-
#include <Gosu/Graphics.hpp>
|
4
|
-
#include <Gosu/Math.hpp>
|
5
|
-
#include <cmath>
|
6
|
-
#include <stdexcept>
|
7
|
-
|
8
|
-
const Gosu::ImageData& Gosu::LargeImageData::tile(int x, int y) const
|
9
|
-
{
|
10
|
-
return *m_tiles.at(static_cast<std::size_t>(y * m_tiles_x + x));
|
11
|
-
}
|
12
|
-
|
13
|
-
Gosu::LargeImageData::LargeImageData(const Bitmap& source, int tile_width, int tile_height,
|
14
|
-
unsigned image_flags)
|
15
|
-
{
|
16
|
-
m_w = source.width();
|
17
|
-
m_h = source.height();
|
18
|
-
// Manual ceil() for integer division.
|
19
|
-
m_tiles_x = (m_w + tile_width - 1) / tile_width;
|
20
|
-
m_tiles_y = (m_h + tile_height - 1) / tile_height;
|
21
|
-
|
22
|
-
// When there are no tiles, set both fields to 0 to avoid entering any for () loop in this class.
|
23
|
-
if (m_tiles_x == 0 || m_tiles_y == 0) {
|
24
|
-
m_tiles_x = m_tiles_y = 0;
|
25
|
-
}
|
26
|
-
|
27
|
-
m_tiles.reserve(m_tiles_x * m_tiles_y);
|
28
|
-
|
29
|
-
for (int y = 0; y < m_tiles_y; ++y) {
|
30
|
-
for (int x = 0; x < m_tiles_x; ++x) {
|
31
|
-
int src_width = tile_width;
|
32
|
-
if (x == m_tiles_x - 1 && m_w % tile_width != 0) {
|
33
|
-
// The right-most parts don't necessarily have the full width.
|
34
|
-
src_width = m_w % tile_width;
|
35
|
-
}
|
36
|
-
|
37
|
-
int src_height = tile_height;
|
38
|
-
if (y == m_tiles_y - 1 && m_h % tile_height != 0) {
|
39
|
-
// Same for the parts on the bottom.
|
40
|
-
src_height = m_h % tile_height;
|
41
|
-
}
|
42
|
-
|
43
|
-
unsigned local_flags = IF_TILEABLE | image_flags;
|
44
|
-
|
45
|
-
// Left edge, only tileable if requested in image_flags.
|
46
|
-
if (x == 0) {
|
47
|
-
local_flags &= ~IF_TILEABLE_LEFT;
|
48
|
-
local_flags |= (image_flags & IF_TILEABLE_LEFT);
|
49
|
-
}
|
50
|
-
// Right edge, only tileable if requested in image_flags.
|
51
|
-
if (x == m_tiles_x - 1) {
|
52
|
-
local_flags &= ~IF_TILEABLE_RIGHT;
|
53
|
-
local_flags |= (image_flags & IF_TILEABLE_RIGHT);
|
54
|
-
}
|
55
|
-
// Top edge, only tileable if requested in image_flags.
|
56
|
-
if (y == 0) {
|
57
|
-
local_flags &= ~IF_TILEABLE_TOP;
|
58
|
-
local_flags |= (image_flags & IF_TILEABLE_TOP);
|
59
|
-
}
|
60
|
-
// Bottom edge, only tileable if requested in image_flags.
|
61
|
-
if (y == m_tiles_y - 1) {
|
62
|
-
local_flags &= ~IF_TILEABLE_BOTTOM;
|
63
|
-
local_flags |= (image_flags & IF_TILEABLE_BOTTOM);
|
64
|
-
}
|
65
|
-
|
66
|
-
m_tiles.emplace_back(Graphics::create_image(source, x * tile_width, y * tile_height,
|
67
|
-
src_width, src_height, local_flags));
|
68
|
-
}
|
69
|
-
}
|
70
|
-
}
|
71
|
-
|
72
|
-
void Gosu::LargeImageData::draw(double x1, double y1, Color c1, double x2, double y2, Color c2,
|
73
|
-
double x3, double y3, Color c3, double x4, double y4, Color c4,
|
74
|
-
ZPos z, BlendMode mode) const
|
75
|
-
{
|
76
|
-
normalize_coordinates(x1, y1, x2, y2, x3, y3, c3, x4, y4, c4);
|
77
|
-
|
78
|
-
double y = 0;
|
79
|
-
for (int ty = 0; ty < m_tiles_y; ++ty) {
|
80
|
-
double x = 0;
|
81
|
-
for (int tx = 0; tx < m_tiles_x; ++tx) {
|
82
|
-
const ImageData& image = tile(tx, ty);
|
83
|
-
|
84
|
-
double rel_x_l = x / m_w;
|
85
|
-
double rel_x_r = (x + image.width()) / m_w;
|
86
|
-
double rel_y_t = y / m_h;
|
87
|
-
double rel_y_b = (y + image.height()) / m_h;
|
88
|
-
|
89
|
-
// NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
|
90
|
-
#define LERP2D(what, x_weight, y_weight) \
|
91
|
-
lerp(lerp(what##1, what##3, y_weight), lerp(what##2, what##4, y_weight), x_weight);
|
92
|
-
|
93
|
-
double x_t_l = LERP2D(x, rel_x_l, rel_y_t);
|
94
|
-
double x_t_r = LERP2D(x, rel_x_r, rel_y_t);
|
95
|
-
double x_b_l = LERP2D(x, rel_x_l, rel_y_b);
|
96
|
-
double x_b_r = LERP2D(x, rel_x_r, rel_y_b);
|
97
|
-
|
98
|
-
double y_t_l = LERP2D(y, rel_x_l, rel_y_t);
|
99
|
-
double y_t_r = LERP2D(y, rel_x_r, rel_y_t);
|
100
|
-
double y_b_l = LERP2D(y, rel_x_l, rel_y_b);
|
101
|
-
double y_b_r = LERP2D(y, rel_x_r, rel_y_b);
|
102
|
-
|
103
|
-
Color c_t_l = LERP2D(c, rel_x_l, rel_y_t);
|
104
|
-
Color c_t_r = LERP2D(c, rel_x_r, rel_y_t);
|
105
|
-
Color c_b_l = LERP2D(c, rel_x_l, rel_y_b);
|
106
|
-
Color c_b_r = LERP2D(c, rel_x_r, rel_y_b);
|
107
|
-
|
108
|
-
image.draw(x_t_l, y_t_l, c_t_l, x_t_r, y_t_r, c_t_r, x_b_l, y_b_l, c_b_l, x_b_r, y_b_r,
|
109
|
-
c_b_r, z, mode);
|
110
|
-
|
111
|
-
x += image.width();
|
112
|
-
}
|
113
|
-
y += tile(0, ty).height();
|
114
|
-
}
|
115
|
-
}
|
116
|
-
|
117
|
-
std::unique_ptr<Gosu::ImageData> Gosu::LargeImageData::subimage(int left, int top, int width,
|
118
|
-
int height) const
|
119
|
-
{
|
120
|
-
if (left < 0 || top < 0 || left + width > m_w || top + height > m_h) {
|
121
|
-
throw std::invalid_argument{"subimage bounds exceed those of its parent"};
|
122
|
-
}
|
123
|
-
if (width <= 0 || height <= 0) {
|
124
|
-
throw std::invalid_argument{"cannot create empty subimage"};
|
125
|
-
}
|
126
|
-
|
127
|
-
int sub_tiles_y = 0;
|
128
|
-
std::vector<std::unique_ptr<ImageData>> sub_tiles;
|
129
|
-
|
130
|
-
int y = 0;
|
131
|
-
for (int ty = 0; ty < m_tiles_y; ++ty) {
|
132
|
-
int row_height = tile(0, ty).height();
|
133
|
-
|
134
|
-
if (y + row_height <= top) {
|
135
|
-
// Skip rows until we are at the requested Y coordinate.
|
136
|
-
y += row_height;
|
137
|
-
continue;
|
138
|
-
}
|
139
|
-
if (y >= top + height) {
|
140
|
-
// Also skip all rows after reaching the bottom requested Y coordinate.
|
141
|
-
break;
|
142
|
-
}
|
143
|
-
|
144
|
-
sub_tiles_y += 1;
|
145
|
-
|
146
|
-
int x = 0;
|
147
|
-
for (int tx = 0; tx < m_tiles_x; ++tx) {
|
148
|
-
const ImageData& image = tile(tx, ty);
|
149
|
-
|
150
|
-
if (x + image.width() <= left) {
|
151
|
-
// Skip columns until we are at the requested X coordinate.
|
152
|
-
x += image.width();
|
153
|
-
continue;
|
154
|
-
}
|
155
|
-
if (x >= left + width) {
|
156
|
-
// Also skip all columns after reaching the right-most requested Y coordinate.
|
157
|
-
break;
|
158
|
-
}
|
159
|
-
|
160
|
-
int sub_left = std::max(0, left - x);
|
161
|
-
int sub_top = std::max(0, top - y);
|
162
|
-
int sub_right = std::min(image.width(), left + width - x);
|
163
|
-
int sub_bottom = std::min(image.height(), top + height - y);
|
164
|
-
|
165
|
-
sub_tiles.emplace_back(
|
166
|
-
image.subimage(sub_left, sub_top, sub_right - sub_left, sub_bottom - sub_top));
|
167
|
-
|
168
|
-
x += image.width();
|
169
|
-
}
|
170
|
-
y += tile(0, ty).height();
|
171
|
-
}
|
172
|
-
|
173
|
-
if (sub_tiles.size() == 1) {
|
174
|
-
return move(sub_tiles[0]);
|
175
|
-
}
|
176
|
-
else {
|
177
|
-
std::unique_ptr<LargeImageData> result(new LargeImageData());
|
178
|
-
result->m_w = width;
|
179
|
-
result->m_h = height;
|
180
|
-
result->m_tiles_x = static_cast<int>(sub_tiles.size()) / sub_tiles_y;
|
181
|
-
result->m_tiles_y = sub_tiles_y;
|
182
|
-
result->m_tiles.swap(sub_tiles);
|
183
|
-
return move(result);
|
184
|
-
}
|
185
|
-
}
|
186
|
-
|
187
|
-
Gosu::Bitmap Gosu::LargeImageData::to_bitmap() const
|
188
|
-
{
|
189
|
-
Bitmap bitmap(width(), height());
|
190
|
-
int y = 0;
|
191
|
-
for (int ty = 0; ty < m_tiles_y; ++ty) {
|
192
|
-
int x = 0;
|
193
|
-
for (int tx = 0; tx < m_tiles_x; ++tx) {
|
194
|
-
const ImageData& image = tile(tx, ty);
|
195
|
-
bitmap.insert(x, y, image.to_bitmap());
|
196
|
-
x += image.width();
|
197
|
-
}
|
198
|
-
y += tile(0, ty).height();
|
199
|
-
}
|
200
|
-
return bitmap;
|
201
|
-
}
|
202
|
-
|
203
|
-
void Gosu::LargeImageData::insert(const Bitmap& bitmap, int at_x, int at_y)
|
204
|
-
{
|
205
|
-
int y = 0;
|
206
|
-
for (int ty = 0; ty < m_tiles_y; ++ty) {
|
207
|
-
int x = 0;
|
208
|
-
for (int tx = 0; tx < m_tiles_x; ++tx) {
|
209
|
-
ImageData& image = *m_tiles[static_cast<std::size_t>(ty * m_tiles_x + tx)];
|
210
|
-
image.insert(bitmap, at_x - x, at_y - y);
|
211
|
-
x += image.width();
|
212
|
-
}
|
213
|
-
y += tile(0, ty).height();
|
214
|
-
}
|
215
|
-
}
|
data/src/LargeImageData.hpp
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
#pragma once
|
2
|
-
|
3
|
-
#include <Gosu/Fwd.hpp>
|
4
|
-
#include <Gosu/ImageData.hpp>
|
5
|
-
#include <Gosu/Platform.hpp>
|
6
|
-
#include "GraphicsImpl.hpp"
|
7
|
-
#include <memory>
|
8
|
-
#include <vector>
|
9
|
-
|
10
|
-
class Gosu::LargeImageData : public Gosu::ImageData
|
11
|
-
{
|
12
|
-
int m_w, m_h;
|
13
|
-
int m_tiles_x, m_tiles_y;
|
14
|
-
std::vector<std::unique_ptr<ImageData>> m_tiles;
|
15
|
-
|
16
|
-
LargeImageData() = default;
|
17
|
-
|
18
|
-
const ImageData& tile(int x, int y) const;
|
19
|
-
|
20
|
-
public:
|
21
|
-
LargeImageData(const Bitmap& source, int tile_width, int tile_height, unsigned image_flags);
|
22
|
-
|
23
|
-
int width() const override { return m_w; }
|
24
|
-
int height() const override { return m_h; }
|
25
|
-
|
26
|
-
void draw(double x1, double y1, Color c1, //
|
27
|
-
double x2, double y2, Color c2, //
|
28
|
-
double x3, double y3, Color c3, //
|
29
|
-
double x4, double y4, Color c4, //
|
30
|
-
ZPos z, BlendMode mode) const override;
|
31
|
-
|
32
|
-
const GLTexInfo* gl_tex_info() const override { return nullptr; }
|
33
|
-
|
34
|
-
std::unique_ptr<ImageData> subimage(int x, int y, int width, int height) const override;
|
35
|
-
|
36
|
-
Bitmap to_bitmap() const override;
|
37
|
-
|
38
|
-
void insert(const Bitmap& bitmap, int x, int y) override;
|
39
|
-
};
|
data/src/Log.hpp
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#pragma once
|
2
|
-
|
3
|
-
#include <cstdio>
|
4
|
-
#include <cstdlib>
|
5
|
-
#include <utility>
|
6
|
-
|
7
|
-
namespace Gosu
|
8
|
-
{
|
9
|
-
template<class... Args>
|
10
|
-
void log(const char* format, Args&&... args)
|
11
|
-
{
|
12
|
-
// NOLINTNEXTLINE(concurrency-mt-unsafe) - we don't even follow the pointer
|
13
|
-
static bool enable_log = (std::getenv("GOSU_DEBUG") != nullptr);
|
14
|
-
if (enable_log) {
|
15
|
-
std::fprintf(stderr, format, std::forward<Args>(args)...);
|
16
|
-
std::fprintf(stderr, "\n");
|
17
|
-
}
|
18
|
-
}
|
19
|
-
}
|