gosu 0.7.33 → 0.7.35
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.
- data/Gosu/Async.hpp +10 -8
- data/Gosu/Audio.hpp +6 -4
- data/Gosu/AutoLink.hpp +0 -0
- data/Gosu/Bitmap.hpp +4 -5
- data/Gosu/ButtonsX.hpp +1 -1
- data/Gosu/Color.hpp +8 -8
- data/Gosu/Font.hpp +2 -2
- data/Gosu/Graphics.hpp +4 -6
- data/Gosu/IO.hpp +11 -4
- data/Gosu/Image.hpp +9 -7
- data/Gosu/ImageData.hpp +10 -4
- data/Gosu/Input.hpp +4 -5
- data/Gosu/Sockets.hpp +10 -12
- data/Gosu/TR1.hpp +44 -0
- data/Gosu/TextInput.hpp +2 -2
- data/Gosu/Version.hpp +2 -2
- data/Gosu/WinUtility.hpp +5 -6
- data/Gosu/Window.hpp +5 -6
- data/GosuImpl/Async.cpp +4 -3
- data/GosuImpl/Audio/ALChannelManagement.hpp +23 -11
- data/GosuImpl/Audio/AudioFile.hpp +11 -3
- data/GosuImpl/Audio/AudioOpenAL.cpp +613 -0
- data/GosuImpl/Audio/AudioOpenAL.mm +1 -605
- data/GosuImpl/Audio/AudioSDL.cpp +12 -14
- data/GosuImpl/Audio/AudioToolboxFile.hpp +0 -1
- data/GosuImpl/Audio/OggFile.hpp +2 -0
- data/GosuImpl/Audio/SndFile.hpp +158 -0
- data/GosuImpl/DirectoriesWin.cpp +18 -18
- data/GosuImpl/Graphics/BitmapApple.mm +17 -19
- data/GosuImpl/Graphics/BitmapBMP.cpp +7 -2
- data/GosuImpl/Graphics/BitmapFreeImage.cpp +11 -12
- data/GosuImpl/Graphics/BitmapGDIplus.cpp +35 -31
- data/GosuImpl/Graphics/BitmapUtils.cpp +1 -1
- data/GosuImpl/Graphics/BlockAllocator.cpp +7 -8
- data/GosuImpl/Graphics/BlockAllocator.hpp +3 -4
- data/GosuImpl/Graphics/Common.hpp +3 -2
- data/GosuImpl/Graphics/DrawOp.hpp +2 -3
- data/GosuImpl/Graphics/DrawOpQueue.hpp +28 -20
- data/GosuImpl/Graphics/Font.cpp +13 -13
- data/GosuImpl/Graphics/FormattedString.hpp +93 -86
- data/GosuImpl/Graphics/Graphics.cpp +16 -14
- data/GosuImpl/Graphics/Image.cpp +7 -3
- data/GosuImpl/Graphics/LargeImageData.hpp +4 -5
- data/GosuImpl/Graphics/Macro.hpp +11 -11
- data/GosuImpl/Graphics/RenderState.hpp +5 -4
- data/GosuImpl/Graphics/TexChunk.cpp +3 -3
- data/GosuImpl/Graphics/TexChunk.hpp +4 -4
- data/GosuImpl/Graphics/Text.cpp +29 -30
- data/GosuImpl/Graphics/TextMac.cpp +9 -7
- data/GosuImpl/Graphics/TextTTFWin.cpp +3 -1
- data/GosuImpl/Graphics/TextTouch.mm +0 -1
- data/GosuImpl/Graphics/TextUnix.cpp +12 -4
- data/GosuImpl/Graphics/TextWin.cpp +4 -2
- data/GosuImpl/Graphics/Texture.cpp +7 -6
- data/GosuImpl/Graphics/Texture.hpp +3 -4
- data/GosuImpl/InputMac.mm +12 -15
- data/GosuImpl/InputTouch.mm +3 -3
- data/GosuImpl/InputWin.cpp +149 -159
- data/GosuImpl/InputX.cpp +0 -0
- data/GosuImpl/MacUtility.hpp +9 -4
- data/GosuImpl/RubyGosu.swg +38 -43
- data/GosuImpl/RubyGosu_wrap.cxx +89 -96
- data/GosuImpl/Sockets/CommSocket.cpp +5 -5
- data/GosuImpl/Sockets/Sockets.hpp +4 -4
- data/GosuImpl/TimingApple.cpp +2 -3
- data/GosuImpl/Utility.cpp +18 -0
- data/GosuImpl/WinMain.cpp +0 -1
- data/GosuImpl/WinUtility.cpp +2 -2
- data/GosuImpl/WindowMac.mm +20 -17
- data/GosuImpl/WindowTouch.mm +8 -7
- data/GosuImpl/WindowWin.cpp +12 -7
- data/GosuImpl/WindowX.cpp +67 -18
- data/lib/gosu.rb +14 -12
- data/linux/extconf.rb +11 -6
- metadata +8 -7
- data/GosuImpl/Audio/AudioAudiere.cpp +0 -448
- data/GosuImpl/RubyGosu_DllMain.cxx +0 -31
@@ -3,13 +3,13 @@
|
|
3
3
|
|
4
4
|
#include <Gosu/Color.hpp>
|
5
5
|
#include <Gosu/Utility.hpp>
|
6
|
-
#include <
|
7
|
-
#include <
|
8
|
-
#include <
|
6
|
+
#include <Gosu/TR1.hpp>
|
7
|
+
#include <cassert>
|
8
|
+
#include <cwchar>
|
9
|
+
#include <cwctype>
|
9
10
|
#include <stdexcept>
|
10
11
|
#include <utility>
|
11
12
|
#include <vector>
|
12
|
-
#include <cwchar>
|
13
13
|
|
14
14
|
namespace Gosu
|
15
15
|
{
|
@@ -28,10 +28,11 @@ namespace Gosu
|
|
28
28
|
}
|
29
29
|
};
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
// If characters.empty(), use these for the whole string.
|
32
|
+
std::wstring simpleString;
|
33
|
+
unsigned simpleFlags;
|
34
|
+
// If not characters.empty(), ignore above fields and use this.
|
35
|
+
std::vector<FormattedChar> characters;
|
35
36
|
|
36
37
|
static unsigned flags(int b, int u, int i)
|
37
38
|
{
|
@@ -47,210 +48,217 @@ namespace Gosu
|
|
47
48
|
{
|
48
49
|
}
|
49
50
|
|
50
|
-
explicit FormattedString(const
|
51
|
+
explicit FormattedString(const wchar_t* html, unsigned baseFlags)
|
51
52
|
{
|
52
|
-
if
|
53
|
+
// Remove \r characters if existent. Avoid a copy if we don't need one.
|
54
|
+
std::wstring unixified;
|
55
|
+
if (std::wcschr(html, L'\r')) {
|
56
|
+
unixified.resize(std::wcslen(html));
|
57
|
+
unsigned pos = 0;
|
58
|
+
while (*html)
|
59
|
+
{
|
60
|
+
if (*html != '\r')
|
61
|
+
unixified[pos++] = *html;
|
62
|
+
++html;
|
63
|
+
}
|
64
|
+
unixified.resize(pos);
|
65
|
+
html = unixified.c_str();
|
66
|
+
}
|
67
|
+
|
68
|
+
std::size_t len = std::wcslen(html);
|
69
|
+
|
70
|
+
// Just skip all this if there are entities or formatting tags in the string.
|
71
|
+
if (std::wcscspn(html, L"<&") == len)
|
53
72
|
{
|
54
|
-
|
73
|
+
simpleString = html;
|
74
|
+
simpleFlags = baseFlags;
|
55
75
|
return;
|
56
76
|
}
|
57
77
|
|
58
|
-
FancyImpl chars;
|
59
|
-
|
60
78
|
unsigned pos = 0;
|
61
79
|
int b = (baseFlags & ffBold) ? 1 : 0,
|
62
80
|
u = (baseFlags & ffUnderline) ? 1 : 0,
|
63
81
|
i = (baseFlags & ffItalic) ? 1 : 0;
|
64
82
|
std::vector<Gosu::Color> c;
|
65
83
|
c.push_back(0xffffffff);
|
66
|
-
while (pos <
|
84
|
+
while (pos < len)
|
67
85
|
{
|
68
|
-
|
69
|
-
|
70
|
-
if (html.substr(pos, 3) == L"<b>")
|
86
|
+
if (!std::wcsncmp(html + pos, L"<b>", 3))
|
71
87
|
{
|
72
88
|
b += 1;
|
73
89
|
pos += 3;
|
74
90
|
continue;
|
75
91
|
}
|
76
|
-
if (html
|
92
|
+
if (!std::wcsncmp(html + pos, L"</b>", 4))
|
77
93
|
{
|
78
94
|
b -= 1;
|
79
95
|
pos += 4;
|
80
96
|
continue;
|
81
97
|
}
|
82
|
-
if (html
|
98
|
+
if (!std::wcsncmp(html + pos, L"<u>", 3))
|
83
99
|
{
|
84
100
|
u += 1;
|
85
101
|
pos += 3;
|
86
102
|
continue;
|
87
103
|
}
|
88
|
-
if (html
|
104
|
+
if (!std::wcsncmp(html + pos, L"</u>", 4))
|
89
105
|
{
|
90
106
|
u -= 1;
|
91
107
|
pos += 4;
|
92
108
|
continue;
|
93
109
|
}
|
94
|
-
if (html
|
110
|
+
if (!std::wcsncmp(html + pos, L"<i>", 3))
|
95
111
|
{
|
96
112
|
i += 1;
|
97
113
|
pos += 3;
|
98
114
|
continue;
|
99
115
|
}
|
100
|
-
if (html
|
116
|
+
if (!std::wcsncmp(html + pos, L"</i>", 4))
|
101
117
|
{
|
102
118
|
i -= 1;
|
103
119
|
pos += 4;
|
104
120
|
continue;
|
105
121
|
}
|
106
|
-
if (html
|
107
|
-
html
|
108
|
-
html.at(pos + 9) == L'>')
|
122
|
+
if (!std::wcsncmp(html + pos, L"<c=", 3) &&
|
123
|
+
len >= pos + 10 && html[pos + 9] == L'>')
|
109
124
|
{
|
110
125
|
using namespace std;
|
111
|
-
|
112
|
-
std::wcstoul(html.c_str() + pos + 3, 0, 16);
|
126
|
+
unsigned rgb = wcstoul(html + pos + 3, 0, 16);
|
113
127
|
c.push_back(0xff000000 | rgb);
|
114
128
|
pos += 10;
|
115
129
|
continue;
|
116
130
|
}
|
117
|
-
if (html
|
118
|
-
html
|
119
|
-
html.at(pos + 11) == L'>')
|
131
|
+
if (!std::wcsncmp(html + pos, L"<c=", 3) &&
|
132
|
+
len >= pos + 12 && html[pos + 11] == L'>')
|
120
133
|
{
|
121
134
|
using namespace std;
|
122
|
-
|
123
|
-
std::wcstoul(html.c_str() + pos + 3, 0, 16);
|
135
|
+
unsigned argb = wcstoul(html + pos + 3, 0, 16);
|
124
136
|
c.push_back(argb);
|
125
137
|
pos += 12;
|
126
138
|
continue;
|
127
139
|
}
|
128
|
-
if (html
|
140
|
+
if (!std::wcsncmp(html + pos, L"</c>", 4))
|
129
141
|
{
|
130
|
-
c.
|
142
|
+
if (c.size() > 1)
|
143
|
+
c.pop_back();
|
131
144
|
pos += 4;
|
132
145
|
continue;
|
133
146
|
}
|
134
|
-
if (html
|
147
|
+
if (!std::wcsncmp(html + pos, L"<", 4))
|
135
148
|
{
|
136
149
|
FormattedChar fc = { L'<', c.back(), flags(b,u,i) };
|
137
|
-
|
150
|
+
characters.push_back(fc);
|
138
151
|
pos += 4;
|
139
152
|
continue;
|
140
153
|
}
|
141
|
-
if (html
|
154
|
+
if (!std::wcsncmp(html + pos, L">", 4))
|
142
155
|
{
|
143
156
|
FormattedChar fc = { L'>', c.back(), flags(b,u,i) };
|
144
|
-
|
157
|
+
characters.push_back(fc);
|
145
158
|
pos += 4;
|
146
159
|
continue;
|
147
160
|
}
|
148
|
-
if (html
|
161
|
+
if (!std::wcsncmp(html + pos, L"&", 5))
|
149
162
|
{
|
150
163
|
FormattedChar fc = { L'&', c.back(), flags(b,u,i) };
|
151
|
-
|
164
|
+
characters.push_back(fc);
|
152
165
|
pos += 5;
|
153
166
|
continue;
|
154
167
|
}
|
155
|
-
if (html[pos] == L'&' && pos
|
168
|
+
if (html[pos] == L'&' && html[pos + 1])
|
156
169
|
{
|
157
170
|
int endOfEntity = pos + 1;
|
158
171
|
while (html[endOfEntity] != L';')
|
159
172
|
{
|
160
|
-
|
173
|
+
// Never know where the wchar_t stuff is...what a mess!
|
174
|
+
using namespace std;
|
175
|
+
using namespace std::tr1;
|
161
176
|
if (!iswalnum(static_cast<wint_t>(html[endOfEntity])))
|
162
177
|
goto normalCharacter;
|
163
178
|
endOfEntity += 1;
|
164
|
-
if (endOfEntity >=
|
179
|
+
if (endOfEntity >= len)
|
165
180
|
goto normalCharacter;
|
166
181
|
}
|
167
|
-
FormattedChar fc = { 0, c.back(), 0, std::wstring(html
|
182
|
+
FormattedChar fc = { 0, c.back(), 0, std::wstring(html + pos + 1, html + endOfEntity) };
|
168
183
|
if (!isEntity(fc.entity))
|
169
184
|
goto normalCharacter;
|
170
|
-
|
185
|
+
characters.push_back(fc);
|
171
186
|
pos = endOfEntity + 1;
|
172
187
|
continue;
|
173
188
|
}
|
174
189
|
|
175
190
|
normalCharacter:
|
176
191
|
FormattedChar fc = { html[pos], c.back(), flags(b,u,i) };
|
177
|
-
|
192
|
+
characters.push_back(fc);
|
178
193
|
pos += 1;
|
179
194
|
}
|
180
|
-
|
181
|
-
impl = chars;
|
182
195
|
}
|
183
196
|
|
184
197
|
std::wstring unformat() const
|
185
198
|
{
|
186
|
-
if (
|
187
|
-
return
|
199
|
+
if (characters.empty())
|
200
|
+
return simpleString;
|
188
201
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
result[i] = chars[i].wc;
|
202
|
+
std::wstring result(characters.size(), 0);
|
203
|
+
for (int i = 0; i < characters.size(); ++i)
|
204
|
+
result[i] = characters[i].wc;
|
193
205
|
return result;
|
194
206
|
}
|
195
207
|
|
196
208
|
const wchar_t* entityAt(unsigned index) const
|
197
209
|
{
|
198
|
-
if (
|
210
|
+
if (characters.empty())
|
199
211
|
return 0;
|
200
212
|
|
201
|
-
|
202
|
-
|
213
|
+
assert (index <= characters.size());
|
214
|
+
|
215
|
+
if (characters[index].wc != 0 || characters[index].entity.empty())
|
203
216
|
return 0;
|
204
|
-
return
|
217
|
+
return characters[index].entity.c_str();
|
205
218
|
}
|
206
219
|
|
207
220
|
wchar_t charAt(unsigned index) const
|
208
221
|
{
|
209
|
-
if (
|
210
|
-
return
|
211
|
-
|
212
|
-
|
213
|
-
return chars[index].wc;
|
222
|
+
if (characters.empty())
|
223
|
+
return simpleString[index];
|
224
|
+
else
|
225
|
+
return characters[index].wc;
|
214
226
|
}
|
215
227
|
|
216
228
|
unsigned flagsAt(unsigned index) const
|
217
229
|
{
|
218
|
-
if (
|
219
|
-
return
|
220
|
-
|
221
|
-
|
222
|
-
return chars[index].flags;
|
230
|
+
if (characters.empty())
|
231
|
+
return simpleFlags;
|
232
|
+
else
|
233
|
+
return characters[index].flags;
|
223
234
|
}
|
224
235
|
|
225
236
|
Gosu::Color colorAt(unsigned index) const
|
226
237
|
{
|
227
|
-
if (
|
238
|
+
if (characters.empty())
|
228
239
|
return Color::WHITE;
|
229
|
-
|
230
|
-
|
231
|
-
return chars[index].color;
|
240
|
+
else
|
241
|
+
return characters[index].color;
|
232
242
|
}
|
233
243
|
|
234
244
|
unsigned length() const
|
235
245
|
{
|
236
|
-
if (
|
237
|
-
return
|
238
|
-
|
239
|
-
|
240
|
-
return chars.size();
|
246
|
+
if (unsigned len = characters.size())
|
247
|
+
return len;
|
248
|
+
else
|
249
|
+
return simpleString.length();
|
241
250
|
}
|
242
251
|
|
243
252
|
FormattedString range(unsigned begin, unsigned end) const
|
244
253
|
{
|
245
254
|
FormattedString result;
|
246
|
-
|
247
|
-
if (const SimpleImpl* simpl = boost::get<SimpleImpl>(&impl))
|
248
|
-
result.impl = SimpleImpl(std::wstring(simpl->first.begin() + begin, simpl->first.begin() + end), simpl->second);
|
249
|
-
else
|
255
|
+
if (characters.empty())
|
250
256
|
{
|
251
|
-
|
252
|
-
result.
|
257
|
+
result.simpleString.assign(simpleString.begin() + begin, simpleString.begin() + end);
|
258
|
+
result.simpleFlags = simpleFlags;
|
253
259
|
}
|
260
|
+
else
|
261
|
+
result.characters.assign(characters.begin() + begin, characters.begin() + end);
|
254
262
|
return result;
|
255
263
|
}
|
256
264
|
|
@@ -270,14 +278,13 @@ namespace Gosu
|
|
270
278
|
|
271
279
|
std::vector<FormattedString> splitParts() const
|
272
280
|
{
|
273
|
-
if (
|
281
|
+
if (characters.empty())
|
274
282
|
return std::vector<FormattedString>(1, *this);
|
275
283
|
|
276
|
-
const FancyImpl& chars = boost::get<FancyImpl>(impl);
|
277
284
|
std::vector<FormattedString> result;
|
278
285
|
unsigned begin = 0;
|
279
286
|
for (unsigned cur = 1; cur < length(); ++cur)
|
280
|
-
if (!
|
287
|
+
if (!characters[begin].sameStyleAs(characters[cur]))
|
281
288
|
{
|
282
289
|
result.push_back(range(begin, cur));
|
283
290
|
begin = cur;
|
@@ -8,9 +8,8 @@
|
|
8
8
|
#include <Gosu/Bitmap.hpp>
|
9
9
|
#include <Gosu/Image.hpp>
|
10
10
|
#include <Gosu/Platform.hpp>
|
11
|
-
#include <boost/foreach.hpp>
|
12
11
|
#if 0
|
13
|
-
#include <
|
12
|
+
#include <thread>
|
14
13
|
#endif
|
15
14
|
#include <cmath>
|
16
15
|
#include <algorithm>
|
@@ -27,13 +26,13 @@ struct Gosu::Graphics::Impl
|
|
27
26
|
unsigned physWidth, physHeight;
|
28
27
|
bool fullscreen;
|
29
28
|
DrawOpQueueStack queues;
|
30
|
-
typedef std::vector<
|
29
|
+
typedef std::vector<std::tr1::shared_ptr<Texture> > Textures;
|
31
30
|
Textures textures;
|
32
31
|
Transforms currentTransforms;
|
33
32
|
Transforms absoluteTransforms;
|
34
33
|
|
35
34
|
#if 0
|
36
|
-
|
35
|
+
std::mutex texMutex;
|
37
36
|
#endif
|
38
37
|
|
39
38
|
#ifdef GOSU_IS_IPHONE
|
@@ -219,7 +218,7 @@ void Gosu::Graphics::endGL()
|
|
219
218
|
}
|
220
219
|
|
221
220
|
#ifdef GOSU_IS_IPHONE
|
222
|
-
void Gosu::Graphics::scheduleGL(const
|
221
|
+
void Gosu::Graphics::scheduleGL(const std::tr1::function<void()>& functor, Gosu::ZPos z)
|
223
222
|
{
|
224
223
|
throw std::logic_error("Custom OpenGL is unsupported on the iPhone");
|
225
224
|
}
|
@@ -229,9 +228,9 @@ namespace
|
|
229
228
|
struct RunGLFunctor
|
230
229
|
{
|
231
230
|
Gosu::Graphics& graphics;
|
232
|
-
|
231
|
+
std::tr1::function<void()> functor;
|
233
232
|
|
234
|
-
RunGLFunctor(Gosu::Graphics& graphics, const
|
233
|
+
RunGLFunctor(Gosu::Graphics& graphics, const std::tr1::function<void()>& functor)
|
235
234
|
: graphics(graphics), functor(functor)
|
236
235
|
{
|
237
236
|
}
|
@@ -251,7 +250,7 @@ namespace
|
|
251
250
|
};
|
252
251
|
}
|
253
252
|
|
254
|
-
void Gosu::Graphics::scheduleGL(const
|
253
|
+
void Gosu::Graphics::scheduleGL(const std::tr1::function<void()>& functor, Gosu::ZPos z)
|
255
254
|
{
|
256
255
|
pimpl->queues.back().scheduleGL(RunGLFunctor(*this, functor), z);
|
257
256
|
}
|
@@ -328,8 +327,11 @@ void Gosu::Graphics::popTransform()
|
|
328
327
|
{
|
329
328
|
pimpl->currentTransforms.pop_back();
|
330
329
|
Transform result = scale(1);
|
331
|
-
|
332
|
-
|
330
|
+
|
331
|
+
for (Transforms::reverse_iterator it = pimpl->currentTransforms.rbegin(),
|
332
|
+
end = pimpl->currentTransforms.rend(); it != end; ++it)
|
333
|
+
result = multiply(result, *it);
|
334
|
+
|
333
335
|
ensureBackOfList(pimpl->absoluteTransforms, result);
|
334
336
|
}
|
335
337
|
|
@@ -407,7 +409,7 @@ std::auto_ptr<Gosu::ImageData> Gosu::Graphics::createImage(
|
|
407
409
|
(srcWidth & (srcWidth - 1)) == 0 &&
|
408
410
|
srcWidth >= 64)
|
409
411
|
{
|
410
|
-
|
412
|
+
std::tr1::shared_ptr<Texture> texture(new Texture(srcWidth));
|
411
413
|
std::auto_ptr<ImageData> data;
|
412
414
|
|
413
415
|
// Use the source bitmap directly if the source area completely covers
|
@@ -444,13 +446,13 @@ std::auto_ptr<Gosu::ImageData> Gosu::Graphics::createImage(
|
|
444
446
|
applyBorderFlags(bmp, src, srcX, srcY, srcWidth, srcHeight, borderFlags);
|
445
447
|
|
446
448
|
#if 0
|
447
|
-
|
449
|
+
std::mutex::scoped_lock lock(pimpl->texMutex);
|
448
450
|
#endif
|
449
451
|
|
450
452
|
// Try to put the bitmap into one of the already allocated textures.
|
451
453
|
for (Impl::Textures::iterator i = pimpl->textures.begin(); i != pimpl->textures.end(); ++i)
|
452
454
|
{
|
453
|
-
|
455
|
+
std::tr1::shared_ptr<Texture> texture(*i);
|
454
456
|
|
455
457
|
std::auto_ptr<ImageData> data;
|
456
458
|
data = texture->tryAlloc(*this, pimpl->absoluteTransforms, pimpl->queues, texture, bmp, 1);
|
@@ -460,7 +462,7 @@ std::auto_ptr<Gosu::ImageData> Gosu::Graphics::createImage(
|
|
460
462
|
|
461
463
|
// All textures are full: Create a new one.
|
462
464
|
|
463
|
-
|
465
|
+
std::tr1::shared_ptr<Texture> texture;
|
464
466
|
texture.reset(new Texture(maxSize));
|
465
467
|
pimpl->textures.push_back(texture);
|
466
468
|
|
data/GosuImpl/Graphics/Image.cpp
CHANGED
@@ -8,7 +8,9 @@
|
|
8
8
|
Gosu::Image::Image(Graphics& graphics, const std::wstring& filename, bool tileable)
|
9
9
|
{
|
10
10
|
// Forward.
|
11
|
-
|
11
|
+
Bitmap bmp;
|
12
|
+
loadImageFile(bmp, filename);
|
13
|
+
Image(graphics, bmp, tileable).data.swap(data);
|
12
14
|
}
|
13
15
|
|
14
16
|
Gosu::Image::Image(Graphics& graphics, const std::wstring& filename,
|
@@ -16,7 +18,9 @@ Gosu::Image::Image(Graphics& graphics, const std::wstring& filename,
|
|
16
18
|
bool tileable)
|
17
19
|
{
|
18
20
|
// Forward.
|
19
|
-
|
21
|
+
Bitmap bmp;
|
22
|
+
loadImageFile(bmp, filename);
|
23
|
+
Image(graphics, bmp, srcX, srcY, srcWidth, srcHeight, tileable).data.swap(data);
|
20
24
|
}
|
21
25
|
|
22
26
|
Gosu::Image::Image(Graphics& graphics, const Bitmap& source, bool tileable)
|
@@ -29,7 +33,7 @@ Gosu::Image::Image(Graphics& graphics, const Bitmap& source,
|
|
29
33
|
unsigned srcX, unsigned srcY, unsigned srcWidth, unsigned srcHeight,
|
30
34
|
bool tileable)
|
31
35
|
: data(graphics.createImage(source, srcX, srcY, srcWidth, srcHeight,
|
32
|
-
|
36
|
+
tileable ? Gosu::bfTileable : Gosu::bfSmooth).release())
|
33
37
|
{
|
34
38
|
}
|
35
39
|
|