gosu 0.7.40 → 0.7.41
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/Image.hpp +15 -31
- data/Gosu/TR1.hpp +21 -13
- data/Gosu/Version.hpp +2 -2
- data/Gosu/Window.hpp +5 -0
- data/GosuImpl/Graphics/BitmapFreeImage.cpp +13 -0
- data/GosuImpl/Graphics/ClipRectStack.hpp +0 -7
- data/GosuImpl/Graphics/Common.hpp +1 -1
- data/GosuImpl/Graphics/DrawOpQueue.hpp +20 -54
- data/GosuImpl/Graphics/GosuView.mm +1 -1
- data/GosuImpl/Graphics/Graphics.cpp +6 -18
- data/GosuImpl/Graphics/Image.cpp +35 -0
- data/GosuImpl/Graphics/RenderState.hpp +6 -3
- data/GosuImpl/Graphics/TransformStack.hpp +100 -0
- data/GosuImpl/InputTouch.mm +39 -22
- data/GosuImpl/Orientation.mm +2 -2
- data/GosuImpl/RubyGosu.swg +3 -17
- data/GosuImpl/RubyGosu_wrap.cxx +4 -19
- data/GosuImpl/WindowTouch.mm +47 -25
- data/linux/extconf.rb +1 -1
- metadata +5 -4
data/Gosu/Image.hpp
CHANGED
|
@@ -5,9 +5,11 @@
|
|
|
5
5
|
#define GOSU_IMAGE_HPP
|
|
6
6
|
|
|
7
7
|
#include <Gosu/Fwd.hpp>
|
|
8
|
-
#include <Gosu/
|
|
8
|
+
#include <Gosu/Color.hpp>
|
|
9
|
+
#include <Gosu/GraphicsBase.hpp>
|
|
9
10
|
#include <Gosu/TR1.hpp>
|
|
10
11
|
#include <memory>
|
|
12
|
+
#include <vector>
|
|
11
13
|
|
|
12
14
|
namespace Gosu
|
|
13
15
|
{
|
|
@@ -79,7 +81,10 @@ namespace Gosu
|
|
|
79
81
|
//! Provides access to the underlying image data object.
|
|
80
82
|
ImageData& getData() const;
|
|
81
83
|
};
|
|
82
|
-
|
|
84
|
+
|
|
85
|
+
std::vector<Gosu::Image> loadTiles(Graphics& graphics, const Bitmap& bmp, int tileWidth, int tileHeight, bool tileable);
|
|
86
|
+
std::vector<Gosu::Image> loadTiles(Graphics& graphics, const std::wstring& bmp, int tileWidth, int tileHeight, bool tileable);
|
|
87
|
+
|
|
83
88
|
//! Convenience function that splits a BMP or PNG file into an array
|
|
84
89
|
//! of small rectangles and creates images from them.
|
|
85
90
|
//! \param tileWidth If positive, specifies the width of one tile in
|
|
@@ -89,14 +94,13 @@ namespace Gosu
|
|
|
89
94
|
//! Must provide a push_back member function; vector<tr1::shared_ptr<Image>>
|
|
90
95
|
//! or boost::ptr_vector<Image> are good choices.
|
|
91
96
|
template<typename Container>
|
|
92
|
-
void imagesFromTiledBitmap(Graphics& graphics, const std::wstring& filename,
|
|
93
|
-
int tileWidth, int tileHeight, bool tileable, Container& appendTo)
|
|
97
|
+
void imagesFromTiledBitmap(Graphics& graphics, const std::wstring& filename, int tileWidth, int tileHeight, bool tileable, Container& appendTo)
|
|
94
98
|
{
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
std::vector<Gosu::Image> tiles = loadTiles(graphics, filename, tileWidth, tileHeight, tileable);
|
|
100
|
+
for (int i = 0, num = tiles.size(); i < num; ++i)
|
|
101
|
+
appendTo.push_back(typename Container::value_type(new Gosu::Image(tiles[i])));
|
|
98
102
|
}
|
|
99
|
-
|
|
103
|
+
|
|
100
104
|
//! Convenience function that splits a bitmap into an area of array
|
|
101
105
|
//! rectangles and creates images from them.
|
|
102
106
|
//! \param tileWidth If positive, specifies the width of one tile in
|
|
@@ -109,29 +113,9 @@ namespace Gosu
|
|
|
109
113
|
void imagesFromTiledBitmap(Graphics& graphics, const Bitmap& bmp,
|
|
110
114
|
int tileWidth, int tileHeight, bool tileable, Container& appendTo)
|
|
111
115
|
{
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
tilesX = bmp.width() / tileWidth;
|
|
116
|
-
else
|
|
117
|
-
{
|
|
118
|
-
tilesX = -tileWidth;
|
|
119
|
-
tileWidth = bmp.width() / tilesX;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (tileHeight > 0)
|
|
123
|
-
tilesY = bmp.height() / tileHeight;
|
|
124
|
-
else
|
|
125
|
-
{
|
|
126
|
-
tilesY = -tileHeight;
|
|
127
|
-
tileHeight = bmp.height() / tilesY;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
for (int y = 0; y < tilesY; ++y)
|
|
131
|
-
for (int x = 0; x < tilesX; ++x)
|
|
132
|
-
appendTo.push_back(typename Container::value_type(new Image(graphics, bmp,
|
|
133
|
-
x * tileWidth, y * tileHeight, tileWidth, tileHeight,
|
|
134
|
-
tileable)));
|
|
116
|
+
std::vector<Gosu::Image> tiles = loadTiles(graphics, bmp, tileWidth, tileHeight, tileable);
|
|
117
|
+
for (int i = 0, num = tiles.size(); i < num; ++i)
|
|
118
|
+
appendTo.push_back(typename Container::value_type(new Gosu::Image(tiles[i])));
|
|
135
119
|
}
|
|
136
120
|
}
|
|
137
121
|
|
data/Gosu/TR1.hpp
CHANGED
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
//! \file TR1.hpp
|
|
2
|
-
//! Includes all parts of C++03 (TR1) that are relevant for Gosu.
|
|
2
|
+
//! Includes all parts of C++03 (TR1) that are relevant for Gosu. It makes available the following members of the std::tr1 namespace: array, bind, function, shared_ptr, uint*_t and int*_t.
|
|
3
3
|
|
|
4
4
|
#ifndef GOSU_TR1_HPP
|
|
5
5
|
#define GOSU_TR1_HPP
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
#include <memory>
|
|
8
|
+
|
|
9
|
+
#if defined(_MSC_VER) || defined(_LIBCPP_MEMORY)
|
|
8
10
|
#include <array>
|
|
9
|
-
#include <memory>
|
|
10
11
|
#include <functional>
|
|
11
12
|
namespace std
|
|
12
13
|
{
|
|
13
14
|
namespace tr1
|
|
14
15
|
{
|
|
15
|
-
typedef unsigned char
|
|
16
|
-
typedef unsigned short
|
|
17
|
-
typedef unsigned int
|
|
18
|
-
typedef unsigned long long
|
|
19
|
-
typedef signed char
|
|
20
|
-
typedef signed short
|
|
21
|
-
typedef signed int
|
|
22
|
-
typedef signed long long
|
|
23
|
-
|
|
16
|
+
typedef unsigned char uint8_t;
|
|
17
|
+
typedef unsigned short uint16_t;
|
|
18
|
+
typedef unsigned int uint32_t;
|
|
19
|
+
typedef unsigned long long uint64_t;
|
|
20
|
+
typedef signed char int8_t;
|
|
21
|
+
typedef signed short int16_t;
|
|
22
|
+
typedef signed int int32_t;
|
|
23
|
+
typedef signed long long int64_t;
|
|
24
|
+
|
|
25
|
+
#ifdef _LIBCPP_MEMORY
|
|
26
|
+
using std::array;
|
|
27
|
+
using std::bind;
|
|
28
|
+
using std::function;
|
|
29
|
+
using std::shared_ptr;
|
|
30
|
+
#endif
|
|
31
|
+
}
|
|
24
32
|
}
|
|
25
33
|
#else
|
|
26
34
|
#include <tr1/array>
|
|
@@ -32,7 +40,7 @@
|
|
|
32
40
|
{
|
|
33
41
|
namespace tr1
|
|
34
42
|
{
|
|
35
|
-
using ::int8_t;
|
|
43
|
+
using ::int8_t; using ::int16_t; using ::int32_t; using ::int64_t;
|
|
36
44
|
using ::uint8_t; using ::uint16_t; using ::uint32_t; using ::uint64_t;
|
|
37
45
|
}
|
|
38
46
|
}
|
data/Gosu/Version.hpp
CHANGED
data/Gosu/Window.hpp
CHANGED
|
@@ -105,6 +105,7 @@ namespace Gosu
|
|
|
105
105
|
#endif
|
|
106
106
|
|
|
107
107
|
#ifdef GOSU_IS_IPHONE
|
|
108
|
+
void* rootViewController() const;
|
|
108
109
|
// iPhone-only callbacks for touch events.
|
|
109
110
|
// Note that it does not hurt to override them even if you compile
|
|
110
111
|
// for another platform; if you don't specify "virtual" the code
|
|
@@ -121,4 +122,8 @@ namespace Gosu
|
|
|
121
122
|
};
|
|
122
123
|
}
|
|
123
124
|
|
|
125
|
+
#ifdef GOSU_IS_IPHONE
|
|
126
|
+
Gosu::Window& windowInstance();
|
|
127
|
+
#endif
|
|
128
|
+
|
|
124
129
|
#endif
|
|
@@ -32,10 +32,23 @@ namespace
|
|
|
32
32
|
for (int i = bitmap.width() * bitmap.height(); i > 0; --i, ++p)
|
|
33
33
|
*p = (*p & 0xff00ff00) | ((*p << 16) & 0x00ff0000) | ((*p >> 16) & 0x000000ff);
|
|
34
34
|
}
|
|
35
|
+
|
|
36
|
+
FIBITMAP* ensure32bits(FIBITMAP* fib)
|
|
37
|
+
{
|
|
38
|
+
int bpp = FreeImage_GetBPP(fib);
|
|
39
|
+
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(fib);
|
|
40
|
+
if (bpp != 32 && (image_type == FIT_BITMAP || image_type == FIT_RGBA16)) {
|
|
41
|
+
FIBITMAP* fib32 = FreeImage_ConvertTo32Bits(fib);
|
|
42
|
+
FreeImage_Unload(fib);
|
|
43
|
+
fib = fib32;
|
|
44
|
+
}
|
|
45
|
+
return fib;
|
|
46
|
+
}
|
|
35
47
|
|
|
36
48
|
void fibToBitmap(Gosu::Bitmap& bitmap, FIBITMAP* fib, FREE_IMAGE_FORMAT fif)
|
|
37
49
|
{
|
|
38
50
|
bitmap.resize(FreeImage_GetWidth(fib), FreeImage_GetHeight(fib));
|
|
51
|
+
fib = ensure32bits(fib);
|
|
39
52
|
FreeImage_ConvertToRawBits(reinterpret_cast<BYTE*>(bitmap.data()),
|
|
40
53
|
fib, bitmap.width() * 4, 32,
|
|
41
54
|
FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, TRUE);
|
|
@@ -76,13 +76,6 @@ public:
|
|
|
76
76
|
updateEffectiveRect();
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
void swap(ClipRectStack& other)
|
|
80
|
-
{
|
|
81
|
-
stack.swap(other.stack); // don't trust ADL :/
|
|
82
|
-
std::swap(hasEffectiveRect, other.hasEffectiveRect);
|
|
83
|
-
std::swap(effectiveRect, other.effectiveRect);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
79
|
const ClipRect* maybeEffectiveRect() const
|
|
87
80
|
{
|
|
88
81
|
return hasEffectiveRect ? &effectiveRect : 0;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
#include <Gosu/TR1.hpp>
|
|
5
5
|
#include <GosuImpl/Graphics/Common.hpp>
|
|
6
|
+
#include <GosuImpl/Graphics/TransformStack.hpp>
|
|
6
7
|
#include <GosuImpl/Graphics/ClipRectStack.hpp>
|
|
7
8
|
#include <GosuImpl/Graphics/DrawOp.hpp>
|
|
8
9
|
#include <cassert>
|
|
@@ -12,8 +13,7 @@
|
|
|
12
13
|
|
|
13
14
|
class Gosu::DrawOpQueue
|
|
14
15
|
{
|
|
15
|
-
|
|
16
|
-
Transforms absoluteTransforms;
|
|
16
|
+
TransformStack transformStack;
|
|
17
17
|
ClipRectStack clipRectStack;
|
|
18
18
|
|
|
19
19
|
typedef std::vector<DrawOp> DrawOps;
|
|
@@ -21,31 +21,7 @@ class Gosu::DrawOpQueue
|
|
|
21
21
|
typedef std::vector<std::tr1::function<void()> > GLBlocks;
|
|
22
22
|
GLBlocks glBlocks;
|
|
23
23
|
|
|
24
|
-
void makeCurrentTransform(const Transform& transform)
|
|
25
|
-
{
|
|
26
|
-
Transforms::iterator oldPosition =
|
|
27
|
-
std::find(absoluteTransforms.begin(), absoluteTransforms.end(), transform);
|
|
28
|
-
if (oldPosition == absoluteTransforms.end())
|
|
29
|
-
absoluteTransforms.push_back(transform);
|
|
30
|
-
else
|
|
31
|
-
absoluteTransforms.splice(absoluteTransforms.end(), absoluteTransforms, oldPosition);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
Transform& currentTransform()
|
|
35
|
-
{
|
|
36
|
-
return absoluteTransforms.back();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
24
|
public:
|
|
40
|
-
DrawOpQueue()
|
|
41
|
-
{
|
|
42
|
-
// Every queue has a base transform that is always the current transform.
|
|
43
|
-
// This keeps the code a bit more uniform, and allows the window to
|
|
44
|
-
// set a base transform in the main rendering queue.
|
|
45
|
-
individualTransforms.push_back(scale(1));
|
|
46
|
-
absoluteTransforms.push_back(scale(1));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
25
|
void scheduleDrawOp(DrawOp op)
|
|
50
26
|
{
|
|
51
27
|
if (clipRectStack.clippedWorldAway())
|
|
@@ -56,7 +32,7 @@ public:
|
|
|
56
32
|
assert (op.verticesOrBlockIndex == 4);
|
|
57
33
|
#endif
|
|
58
34
|
|
|
59
|
-
op.renderState.transform = &
|
|
35
|
+
op.renderState.transform = &transformStack.current();
|
|
60
36
|
if (const ClipRect* cr = clipRectStack.maybeEffectiveRect())
|
|
61
37
|
op.renderState.clipRect = *cr;
|
|
62
38
|
ops.push_back(op);
|
|
@@ -73,7 +49,7 @@ public:
|
|
|
73
49
|
|
|
74
50
|
DrawOp op;
|
|
75
51
|
op.verticesOrBlockIndex = complementOfBlockIndex;
|
|
76
|
-
op.renderState.transform = &
|
|
52
|
+
op.renderState.transform = &transformStack.current();
|
|
77
53
|
if (const ClipRect* cr = clipRectStack.maybeEffectiveRect())
|
|
78
54
|
op.renderState.clipRect = *cr;
|
|
79
55
|
op.z = z;
|
|
@@ -87,8 +63,8 @@ public:
|
|
|
87
63
|
double left = x, right = x + width;
|
|
88
64
|
double top = y, bottom = y + height;
|
|
89
65
|
|
|
90
|
-
applyTransform(
|
|
91
|
-
applyTransform(
|
|
66
|
+
applyTransform(transformStack.current(), left, top);
|
|
67
|
+
applyTransform(transformStack.current(), right, bottom);
|
|
92
68
|
|
|
93
69
|
int physX = std::min(left, right);
|
|
94
70
|
int physY = std::min(top, bottom);
|
|
@@ -110,31 +86,17 @@ public:
|
|
|
110
86
|
|
|
111
87
|
void setBaseTransform(const Transform& baseTransform)
|
|
112
88
|
{
|
|
113
|
-
|
|
114
|
-
assert (absoluteTransforms.size() == 1);
|
|
115
|
-
|
|
116
|
-
individualTransforms.front() = absoluteTransforms.front() = baseTransform;
|
|
89
|
+
transformStack.setBaseTransform(baseTransform);
|
|
117
90
|
}
|
|
118
91
|
|
|
119
92
|
void pushTransform(const Transform& transform)
|
|
120
93
|
{
|
|
121
|
-
|
|
122
|
-
Transform result = multiply(transform, currentTransform());
|
|
123
|
-
makeCurrentTransform(result);
|
|
94
|
+
transformStack.push(transform);
|
|
124
95
|
}
|
|
125
96
|
|
|
126
97
|
void popTransform()
|
|
127
98
|
{
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
individualTransforms.pop_back();
|
|
131
|
-
// TODO: If currentTransform() wouldn't have to be .back(), then I think
|
|
132
|
-
// this could be optimized away and just be pop_back too. Or not?
|
|
133
|
-
Transform result = scale(1);
|
|
134
|
-
for (Transforms::reverse_iterator it = individualTransforms.rbegin(),
|
|
135
|
-
end = individualTransforms.rend(); it != end; ++it)
|
|
136
|
-
result = multiply(result, *it);
|
|
137
|
-
makeCurrentTransform(result);
|
|
99
|
+
transformStack.pop();
|
|
138
100
|
}
|
|
139
101
|
|
|
140
102
|
void performDrawOpsAndCode()
|
|
@@ -185,17 +147,21 @@ public:
|
|
|
185
147
|
op->compileTo(vas);
|
|
186
148
|
}
|
|
187
149
|
|
|
188
|
-
|
|
150
|
+
// This retains the current stack of transforms and clippings.
|
|
151
|
+
void clearQueue()
|
|
189
152
|
{
|
|
190
|
-
absoluteTransforms.resize(1);
|
|
191
|
-
// Important!! Due to all the swapping, the first entry in the list is not necessarily
|
|
192
|
-
// the base matrix. We need to restore it.
|
|
193
|
-
absoluteTransforms.front() = scale(1);
|
|
194
|
-
individualTransforms.resize(1);
|
|
195
|
-
clipRectStack.clear();
|
|
196
153
|
glBlocks.clear();
|
|
197
154
|
ops.clear();
|
|
198
155
|
}
|
|
156
|
+
|
|
157
|
+
// This clears the queue and starts with new stacks. This must not be called
|
|
158
|
+
// when endClipping/popTransform calls might still be pending.
|
|
159
|
+
void reset()
|
|
160
|
+
{
|
|
161
|
+
transformStack.reset();
|
|
162
|
+
clipRectStack.clear();
|
|
163
|
+
clearQueue();
|
|
164
|
+
}
|
|
199
165
|
};
|
|
200
166
|
|
|
201
167
|
#endif
|
|
@@ -36,7 +36,7 @@ int Gosu::clipRectBaseFactor()
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
|
39
|
-
return NO
|
|
39
|
+
return NO;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
- (void)didReceiveMemoryWarning {
|
|
@@ -52,20 +52,9 @@ struct Gosu::Graphics::Impl
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
Orientation orientation;
|
|
56
|
-
|
|
57
|
-
Impl()
|
|
58
|
-
: orientation(currentOrientation())
|
|
59
|
-
{
|
|
60
|
-
}
|
|
61
|
-
|
|
62
55
|
void updateBaseTransform()
|
|
63
56
|
{
|
|
64
|
-
|
|
65
|
-
{
|
|
66
|
-
orientation = currentOrientation();
|
|
67
|
-
queues.front().setBaseTransform(transformForOrientation(orientation));
|
|
68
|
-
}
|
|
57
|
+
queues.front().setBaseTransform(transformForOrientation(currentOrientation()));
|
|
69
58
|
}
|
|
70
59
|
#endif
|
|
71
60
|
};
|
|
@@ -127,9 +116,8 @@ void Gosu::Graphics::setResolution(unsigned virtualWidth, unsigned virtualHeight
|
|
|
127
116
|
throw std::invalid_argument("Invalid virtual resolution.");
|
|
128
117
|
|
|
129
118
|
pimpl->virtWidth = virtualWidth, pimpl->virtHeight = virtualHeight;
|
|
130
|
-
#
|
|
131
|
-
|
|
132
|
-
#else
|
|
119
|
+
#ifndef GOSU_IS_IPHONE
|
|
120
|
+
// on the iPhone, updateCurrentTransform will handle this (yuck)
|
|
133
121
|
Transform baseTransform;
|
|
134
122
|
baseTransform = scale(1.0 / virtualWidth * pimpl->physWidth,
|
|
135
123
|
1.0 / virtualHeight * pimpl->physHeight);
|
|
@@ -142,8 +130,8 @@ bool Gosu::Graphics::begin(Gosu::Color clearWithColor)
|
|
|
142
130
|
// If recording is in process, cancel it.
|
|
143
131
|
assert (pimpl->queues.size() == 1);
|
|
144
132
|
pimpl->queues.resize(1);
|
|
145
|
-
// Clear leftover
|
|
146
|
-
pimpl->queues.front().
|
|
133
|
+
// Clear leftover transforms, clip rects etc.
|
|
134
|
+
pimpl->queues.front().reset();
|
|
147
135
|
|
|
148
136
|
#ifdef GOSU_IS_IPHONE
|
|
149
137
|
pimpl->updateBaseTransform();
|
|
@@ -172,7 +160,7 @@ void Gosu::Graphics::flush()
|
|
|
172
160
|
throw std::logic_error("Flushing to screen is not allowed while creating a macro");
|
|
173
161
|
|
|
174
162
|
pimpl->queues.front().performDrawOpsAndCode();
|
|
175
|
-
pimpl->queues.front().
|
|
163
|
+
pimpl->queues.front().clearQueue();
|
|
176
164
|
}
|
|
177
165
|
|
|
178
166
|
void Gosu::Graphics::beginGL()
|
data/GosuImpl/Graphics/Image.cpp
CHANGED
|
@@ -111,3 +111,38 @@ Gosu::ImageData& Gosu::Image::getData() const
|
|
|
111
111
|
{
|
|
112
112
|
return *data;
|
|
113
113
|
}
|
|
114
|
+
|
|
115
|
+
std::vector<Gosu::Image> Gosu::loadTiles(Graphics& graphics, const Bitmap& bmp, int tileWidth, int tileHeight, bool tileable)
|
|
116
|
+
{
|
|
117
|
+
int tilesX, tilesY;
|
|
118
|
+
std::vector<Image> images;
|
|
119
|
+
|
|
120
|
+
if (tileWidth > 0)
|
|
121
|
+
tilesX = bmp.width() / tileWidth;
|
|
122
|
+
else
|
|
123
|
+
{
|
|
124
|
+
tilesX = -tileWidth;
|
|
125
|
+
tileWidth = bmp.width() / tilesX;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (tileHeight > 0)
|
|
129
|
+
tilesY = bmp.height() / tileHeight;
|
|
130
|
+
else
|
|
131
|
+
{
|
|
132
|
+
tilesY = -tileHeight;
|
|
133
|
+
tileHeight = bmp.height() / tilesY;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
for (int y = 0; y < tilesY; ++y)
|
|
137
|
+
for (int x = 0; x < tilesX; ++x)
|
|
138
|
+
images.push_back(Image(graphics, bmp, x * tileWidth, y * tileHeight, tileWidth, tileHeight, tileable));
|
|
139
|
+
|
|
140
|
+
return images;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
std::vector<Gosu::Image> Gosu::loadTiles(Graphics& graphics, const std::wstring& filename, int tileWidth, int tileHeight, bool tileable)
|
|
144
|
+
{
|
|
145
|
+
Bitmap bmp;
|
|
146
|
+
loadImageFile(bmp, filename);
|
|
147
|
+
return loadTiles(graphics, bmp, tileWidth, tileHeight, tileable);
|
|
148
|
+
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
struct Gosu::RenderState
|
|
9
9
|
{
|
|
10
10
|
GLuint texName;
|
|
11
|
-
Transform* transform;
|
|
11
|
+
const Transform* transform;
|
|
12
12
|
ClipRect clipRect;
|
|
13
13
|
AlphaMode mode;
|
|
14
14
|
|
|
@@ -126,16 +126,19 @@ public:
|
|
|
126
126
|
|
|
127
127
|
if (newTexName != NO_TEXTURE)
|
|
128
128
|
{
|
|
129
|
+
// New texture *is* really a texture - change to it.
|
|
130
|
+
|
|
129
131
|
if (texName == NO_TEXTURE)
|
|
130
132
|
glEnable(GL_TEXTURE_2D);
|
|
131
133
|
glBindTexture(GL_TEXTURE_2D, newTexName);
|
|
132
134
|
}
|
|
133
|
-
else
|
|
135
|
+
else
|
|
136
|
+
// New texture is NO_TEXTURE, disable texturing.
|
|
134
137
|
glDisable(GL_TEXTURE_2D);
|
|
135
138
|
texName = newTexName;
|
|
136
139
|
}
|
|
137
140
|
|
|
138
|
-
void setTransform(Transform* newTransform)
|
|
141
|
+
void setTransform(const Transform* newTransform)
|
|
139
142
|
{
|
|
140
143
|
if (newTransform == transform)
|
|
141
144
|
return;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#ifndef GOSUIMPL_GRAPHICS_TRANSFORMSTACK_HPP
|
|
2
|
+
#define GOSUIMPL_GRAPHICS_TRANSFORMSTACK_HPP
|
|
3
|
+
|
|
4
|
+
#include <GosuImpl/Graphics/Common.hpp>
|
|
5
|
+
#include <cassert>
|
|
6
|
+
#include <algorithm>
|
|
7
|
+
|
|
8
|
+
namespace Gosu
|
|
9
|
+
{
|
|
10
|
+
class TransformStack
|
|
11
|
+
{
|
|
12
|
+
// All the matrices that are pushed right now.
|
|
13
|
+
Transforms individual;
|
|
14
|
+
// All the absolute matrices that have been created since last reset.
|
|
15
|
+
Transforms absolute;
|
|
16
|
+
// Points to one absolute transform.
|
|
17
|
+
Transforms::const_iterator currentIterator;
|
|
18
|
+
|
|
19
|
+
void makeCurrent(const Transform& transform)
|
|
20
|
+
{
|
|
21
|
+
currentIterator =
|
|
22
|
+
std::find(absolute.begin(), absolute.end(), transform);
|
|
23
|
+
if (currentIterator == absolute.end())
|
|
24
|
+
currentIterator = absolute.insert(absolute.end(), transform);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public:
|
|
28
|
+
TransformStack()
|
|
29
|
+
{
|
|
30
|
+
reset();
|
|
31
|
+
individual.front() = absolute.front() = scale(1);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void reset()
|
|
35
|
+
{
|
|
36
|
+
// Every queue has a base transform that is always the current transform.
|
|
37
|
+
// This keeps the code a bit more uniform, and allows the window to
|
|
38
|
+
// set a base transform in the main rendering queue.
|
|
39
|
+
individual.resize(1);
|
|
40
|
+
absolute.resize(1);
|
|
41
|
+
currentIterator = absolute.begin();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
TransformStack(const TransformStack& other)
|
|
45
|
+
{
|
|
46
|
+
*this = other;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Custom assignment to ensure valid currentIterator
|
|
50
|
+
TransformStack& operator=(const TransformStack &other)
|
|
51
|
+
{
|
|
52
|
+
individual = other.individual;
|
|
53
|
+
absolute = other.absolute;
|
|
54
|
+
|
|
55
|
+
// Reset our currentIterator to point to the respective element
|
|
56
|
+
// in our own 'absolute' transforms by iterating both lists up to
|
|
57
|
+
// the other lists' current iterator
|
|
58
|
+
currentIterator = absolute.begin();
|
|
59
|
+
Transforms::const_iterator otherIterator = other.absolute.begin();
|
|
60
|
+
while (otherIterator != other.currentIterator)
|
|
61
|
+
++currentIterator, ++otherIterator;
|
|
62
|
+
|
|
63
|
+
return *this;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void setBaseTransform(const Transform& baseTransform)
|
|
67
|
+
{
|
|
68
|
+
assert (individual.size() == 1);
|
|
69
|
+
assert (absolute.size() == 1);
|
|
70
|
+
|
|
71
|
+
individual.front() = absolute.front() = baseTransform;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const Transform& current()
|
|
75
|
+
{
|
|
76
|
+
return *currentIterator;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void push(const Transform& transform)
|
|
80
|
+
{
|
|
81
|
+
individual.push_back(transform);
|
|
82
|
+
Transform result = multiply(transform, current());
|
|
83
|
+
makeCurrent(result);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
void pop()
|
|
87
|
+
{
|
|
88
|
+
assert (individual.size() > 1);
|
|
89
|
+
|
|
90
|
+
individual.pop_back();
|
|
91
|
+
Transform result = scale(1);
|
|
92
|
+
for (Transforms::reverse_iterator it = individual.rbegin(),
|
|
93
|
+
end = individual.rend(); it != end; ++it)
|
|
94
|
+
result = multiply(result, *it);
|
|
95
|
+
makeCurrent(result);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
#endif
|
data/GosuImpl/InputTouch.mm
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#include <Gosu/Input.hpp>
|
|
2
2
|
#include <Gosu/TextInput.hpp>
|
|
3
3
|
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#import <
|
|
4
|
+
#include <GosuImpl/MacUtility.hpp>
|
|
5
|
+
#include <GosuImpl/Orientation.hpp>
|
|
6
|
+
#include <GosuImpl/Input/AccelerometerReader.hpp>
|
|
7
|
+
#import <UIKit/UIKit.h>
|
|
8
8
|
|
|
9
9
|
struct Gosu::TextInput::Impl {};
|
|
10
10
|
Gosu::TextInput::TextInput() {}
|
|
@@ -14,8 +14,10 @@ void Gosu::TextInput::setText(const std::wstring& text) {}
|
|
|
14
14
|
unsigned Gosu::TextInput::caretPos() const { return 0; }
|
|
15
15
|
unsigned Gosu::TextInput::selectionStart() const { return 0; }
|
|
16
16
|
|
|
17
|
-
struct Gosu::Input::Impl
|
|
18
|
-
|
|
17
|
+
struct Gosu::Input::Impl
|
|
18
|
+
{
|
|
19
|
+
UIView* view;
|
|
20
|
+
float mouseX, mouseY;
|
|
19
21
|
float factorX, factorY;
|
|
20
22
|
float updateInterval;
|
|
21
23
|
|
|
@@ -52,13 +54,15 @@ struct Gosu::Input::Impl {
|
|
|
52
54
|
Gosu::Input::Input(void* view, float updateInterval)
|
|
53
55
|
: pimpl(new Impl)
|
|
54
56
|
{
|
|
55
|
-
pimpl->view = (
|
|
57
|
+
pimpl->view = (UIView*)view;
|
|
56
58
|
pimpl->updateInterval = updateInterval;
|
|
57
59
|
pimpl->currentTouchesSet.reset([[NSMutableSet alloc] init]);
|
|
60
|
+
pimpl->mouseX = pimpl->mouseY = -1000;
|
|
58
61
|
setMouseFactors(1, 1);
|
|
59
62
|
}
|
|
60
63
|
|
|
61
|
-
Gosu::Input::~Input()
|
|
64
|
+
Gosu::Input::~Input()
|
|
65
|
+
{
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
void Gosu::Input::feedTouchEvent(int type, void* touches)
|
|
@@ -76,27 +80,34 @@ void Gosu::Input::feedTouchEvent(int type, void* touches)
|
|
|
76
80
|
(*f)(pimpl->translateTouch(uiTouch));
|
|
77
81
|
}
|
|
78
82
|
|
|
79
|
-
wchar_t Gosu::Input::idToChar(Button btn)
|
|
83
|
+
wchar_t Gosu::Input::idToChar(Button btn)
|
|
84
|
+
{
|
|
80
85
|
return 0;
|
|
81
86
|
}
|
|
82
87
|
|
|
83
|
-
Gosu::Button Gosu::Input::charToId(wchar_t ch)
|
|
88
|
+
Gosu::Button Gosu::Input::charToId(wchar_t ch)
|
|
89
|
+
{
|
|
84
90
|
return noButton;
|
|
85
91
|
}
|
|
86
92
|
|
|
87
|
-
bool Gosu::Input::down(Button btn) const
|
|
93
|
+
bool Gosu::Input::down(Button btn) const
|
|
94
|
+
{
|
|
88
95
|
return false;
|
|
89
96
|
}
|
|
90
97
|
|
|
91
|
-
double Gosu::Input::mouseX() const
|
|
92
|
-
|
|
98
|
+
double Gosu::Input::mouseX() const
|
|
99
|
+
{
|
|
100
|
+
return pimpl->mouseX;
|
|
93
101
|
}
|
|
94
102
|
|
|
95
|
-
double Gosu::Input::mouseY() const
|
|
96
|
-
|
|
103
|
+
double Gosu::Input::mouseY() const
|
|
104
|
+
{
|
|
105
|
+
return pimpl->mouseY;
|
|
97
106
|
}
|
|
98
107
|
|
|
99
108
|
void Gosu::Input::setMousePosition(double x, double y) {
|
|
109
|
+
pimpl->mouseX = x;
|
|
110
|
+
pimpl->mouseY = y;
|
|
100
111
|
}
|
|
101
112
|
|
|
102
113
|
void Gosu::Input::setMouseFactors(double factorX, double factorY) {
|
|
@@ -115,19 +126,23 @@ const Gosu::Touches& Gosu::Input::currentTouches() const
|
|
|
115
126
|
return *pimpl->currentTouchesVector;
|
|
116
127
|
}
|
|
117
128
|
|
|
118
|
-
double Gosu::Input::accelerometerX() const
|
|
129
|
+
double Gosu::Input::accelerometerX() const
|
|
130
|
+
{
|
|
119
131
|
return pimpl->acceleration(0);
|
|
120
132
|
}
|
|
121
133
|
|
|
122
|
-
double Gosu::Input::accelerometerY() const
|
|
134
|
+
double Gosu::Input::accelerometerY() const
|
|
135
|
+
{
|
|
123
136
|
return pimpl->acceleration(1);
|
|
124
137
|
}
|
|
125
138
|
|
|
126
|
-
double Gosu::Input::accelerometerZ() const
|
|
139
|
+
double Gosu::Input::accelerometerZ() const
|
|
140
|
+
{
|
|
127
141
|
return pimpl->acceleration(2);
|
|
128
142
|
}
|
|
129
143
|
|
|
130
|
-
void Gosu::Input::update()
|
|
144
|
+
void Gosu::Input::update()
|
|
145
|
+
{
|
|
131
146
|
// Check for dead touches and remove from vector if
|
|
132
147
|
// necessary
|
|
133
148
|
|
|
@@ -140,7 +155,7 @@ void Gosu::Input::update() {
|
|
|
140
155
|
phase == UITouchPhaseMoved ||
|
|
141
156
|
phase == UITouchPhaseStationary)
|
|
142
157
|
continue;
|
|
143
|
-
|
|
158
|
+
|
|
144
159
|
// Something was deleted, we will need the set.
|
|
145
160
|
if (!deadTouches.get())
|
|
146
161
|
deadTouches.reset([[NSMutableSet alloc] init]);
|
|
@@ -158,10 +173,12 @@ void Gosu::Input::update() {
|
|
|
158
173
|
}
|
|
159
174
|
}
|
|
160
175
|
|
|
161
|
-
Gosu::TextInput* Gosu::Input::textInput() const
|
|
176
|
+
Gosu::TextInput* Gosu::Input::textInput() const
|
|
177
|
+
{
|
|
162
178
|
return 0;
|
|
163
179
|
}
|
|
164
180
|
|
|
165
|
-
void Gosu::Input::setTextInput(TextInput* input)
|
|
181
|
+
void Gosu::Input::setTextInput(TextInput* input)
|
|
182
|
+
{
|
|
166
183
|
throw "NYI";
|
|
167
184
|
}
|
data/GosuImpl/Orientation.mm
CHANGED
|
@@ -19,8 +19,8 @@ Gosu::Orientation Gosu::currentOrientation()
|
|
|
19
19
|
|
|
20
20
|
static Orientation orientation = Gosu::Orientation(-1);
|
|
21
21
|
static unsigned waitingForChangeSince = now;
|
|
22
|
-
|
|
23
|
-
if (
|
|
22
|
+
|
|
23
|
+
if (not UIDeviceOrientationIsLandscape(newOrientation) or orientationToGosu(newOrientation) == orientation)
|
|
24
24
|
waitingForChangeSince = now;
|
|
25
25
|
|
|
26
26
|
if (now - waitingForChangeSince >= CHANGE_AFTER_MS or orientation == Gosu::Orientation(-1))
|
data/GosuImpl/RubyGosu.swg
CHANGED
|
@@ -158,6 +158,7 @@
|
|
|
158
158
|
#undef close
|
|
159
159
|
#undef read
|
|
160
160
|
#undef bind
|
|
161
|
+
#undef send
|
|
161
162
|
#undef sleep
|
|
162
163
|
#undef Sleep
|
|
163
164
|
#undef int8_t
|
|
@@ -173,23 +174,7 @@
|
|
|
173
174
|
//#include <Gosu/Async.hpp>
|
|
174
175
|
//#endif
|
|
175
176
|
|
|
176
|
-
#include <Gosu/
|
|
177
|
-
#include <Gosu/Color.hpp>
|
|
178
|
-
#include <Gosu/Font.hpp>
|
|
179
|
-
#include <Gosu/GraphicsBase.hpp>
|
|
180
|
-
#include <Gosu/Graphics.hpp>
|
|
181
|
-
#include <Gosu/Image.hpp>
|
|
182
|
-
#include <Gosu/ImageData.hpp>
|
|
183
|
-
#include <Gosu/Inspection.hpp>
|
|
184
|
-
#include <Gosu/Input.hpp>
|
|
185
|
-
#include <Gosu/IO.hpp>
|
|
186
|
-
#include <Gosu/Math.hpp>
|
|
187
|
-
#include <Gosu/Text.hpp>
|
|
188
|
-
#include <Gosu/TextInput.hpp>
|
|
189
|
-
#include <Gosu/Timing.hpp>
|
|
190
|
-
#include <Gosu/Utility.hpp>
|
|
191
|
-
#include <Gosu/Version.hpp>
|
|
192
|
-
#include <Gosu/Window.hpp>
|
|
177
|
+
#include <Gosu/Gosu.hpp>
|
|
193
178
|
#ifdef GOSU_IS_WIN
|
|
194
179
|
#include <FreeImage.h>
|
|
195
180
|
#endif
|
|
@@ -521,6 +506,7 @@ namespace Gosu {
|
|
|
521
506
|
%ignore Gosu::Image::Image(Graphics& graphics, const Bitmap& source, bool tileable = false);
|
|
522
507
|
%ignore Gosu::Image::Image(Graphics& graphics, const Bitmap& source, unsigned srcX, unsigned srcY, unsigned srcWidth, unsigned srcHeight, bool tileable = false);
|
|
523
508
|
%ignore Gosu::Image::Image(std::auto_ptr<ImageData> data);
|
|
509
|
+
%ignore Gosu::loadTiles;
|
|
524
510
|
%include "../Gosu/Image.hpp"
|
|
525
511
|
%extend Gosu::Image {
|
|
526
512
|
Image(Gosu::Window& window, VALUE source, bool tileable = false) {
|
data/GosuImpl/RubyGosu_wrap.cxx
CHANGED
|
@@ -2208,6 +2208,7 @@ static VALUE mGosu;
|
|
|
2208
2208
|
#undef close
|
|
2209
2209
|
#undef read
|
|
2210
2210
|
#undef bind
|
|
2211
|
+
#undef send
|
|
2211
2212
|
#undef sleep
|
|
2212
2213
|
#undef Sleep
|
|
2213
2214
|
#undef int8_t
|
|
@@ -2223,23 +2224,7 @@ static VALUE mGosu;
|
|
|
2223
2224
|
//#include <Gosu/Async.hpp>
|
|
2224
2225
|
//#endif
|
|
2225
2226
|
|
|
2226
|
-
#include <Gosu/
|
|
2227
|
-
#include <Gosu/Color.hpp>
|
|
2228
|
-
#include <Gosu/Font.hpp>
|
|
2229
|
-
#include <Gosu/GraphicsBase.hpp>
|
|
2230
|
-
#include <Gosu/Graphics.hpp>
|
|
2231
|
-
#include <Gosu/Image.hpp>
|
|
2232
|
-
#include <Gosu/ImageData.hpp>
|
|
2233
|
-
#include <Gosu/Inspection.hpp>
|
|
2234
|
-
#include <Gosu/Input.hpp>
|
|
2235
|
-
#include <Gosu/IO.hpp>
|
|
2236
|
-
#include <Gosu/Math.hpp>
|
|
2237
|
-
#include <Gosu/Text.hpp>
|
|
2238
|
-
#include <Gosu/TextInput.hpp>
|
|
2239
|
-
#include <Gosu/Timing.hpp>
|
|
2240
|
-
#include <Gosu/Utility.hpp>
|
|
2241
|
-
#include <Gosu/Version.hpp>
|
|
2242
|
-
#include <Gosu/Window.hpp>
|
|
2227
|
+
#include <Gosu/Gosu.hpp>
|
|
2243
2228
|
#ifdef GOSU_IS_WIN
|
|
2244
2229
|
#include <FreeImage.h>
|
|
2245
2230
|
#endif
|
|
@@ -11243,8 +11228,8 @@ SWIGEXPORT void Init_gosu(void) {
|
|
|
11243
11228
|
SWIG_RubyInitializeTrackings();
|
|
11244
11229
|
rb_define_const(mGosu, "MAJOR_VERSION", SWIG_From_int(static_cast< int >(0)));
|
|
11245
11230
|
rb_define_const(mGosu, "MINOR_VERSION", SWIG_From_int(static_cast< int >(7)));
|
|
11246
|
-
rb_define_const(mGosu, "POINT_VERSION", SWIG_From_int(static_cast< int >(
|
|
11247
|
-
rb_define_const(mGosu, "VERSION", SWIG_FromCharPtr("0.7.
|
|
11231
|
+
rb_define_const(mGosu, "POINT_VERSION", SWIG_From_int(static_cast< int >(41)));
|
|
11232
|
+
rb_define_const(mGosu, "VERSION", SWIG_FromCharPtr("0.7.41"));
|
|
11248
11233
|
rb_define_module_function(mGosu, "milliseconds", VALUEFUNC(_wrap_milliseconds), -1);
|
|
11249
11234
|
rb_define_module_function(mGosu, "random", VALUEFUNC(_wrap_random), -1);
|
|
11250
11235
|
rb_define_module_function(mGosu, "degrees_to_radians", VALUEFUNC(_wrap_degrees_to_radians), -1);
|
data/GosuImpl/WindowTouch.mm
CHANGED
|
@@ -13,27 +13,41 @@ using namespace std::tr1::placeholders;
|
|
|
13
13
|
|
|
14
14
|
namespace Gosu
|
|
15
15
|
{
|
|
16
|
-
CGRect screenRect
|
|
16
|
+
static CGRect &screenRect()
|
|
17
|
+
{
|
|
18
|
+
static CGRect screenRect = [[UIScreen mainScreen] bounds];
|
|
19
|
+
return screenRect;
|
|
20
|
+
}
|
|
17
21
|
|
|
18
22
|
unsigned screenWidth()
|
|
19
23
|
{
|
|
20
|
-
return screenRect.size.width;
|
|
24
|
+
return screenRect().size.width;
|
|
21
25
|
}
|
|
22
26
|
|
|
23
27
|
unsigned screenHeight()
|
|
24
28
|
{
|
|
25
|
-
return screenRect.size.height;
|
|
29
|
+
return screenRect().size.height;
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
32
|
|
|
29
|
-
int main(int argc, char *argv[])
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
int main(int argc, char *argv[])
|
|
34
|
+
{
|
|
35
|
+
try
|
|
36
|
+
{
|
|
37
|
+
[[NSAutoreleasePool alloc] init];
|
|
38
|
+
return UIApplicationMain(argc, argv, nil, @"GosuAppDelegate");
|
|
39
|
+
}
|
|
40
|
+
catch (const std::exception& e)
|
|
41
|
+
{
|
|
42
|
+
NSLog(@"Terminating due to C++ exception: %s", e.what());
|
|
43
|
+
throw;
|
|
44
|
+
}
|
|
32
45
|
}
|
|
33
46
|
|
|
34
47
|
class Gosu::Audio {};
|
|
35
48
|
|
|
36
|
-
struct Gosu::Window::Impl
|
|
49
|
+
struct Gosu::Window::Impl
|
|
50
|
+
{
|
|
37
51
|
ObjRef<UIWindow> window;
|
|
38
52
|
ObjRef<GosuViewController> controller;
|
|
39
53
|
std::auto_ptr<Graphics> graphics;
|
|
@@ -57,27 +71,22 @@ namespace
|
|
|
57
71
|
|
|
58
72
|
@implementation GosuAppDelegate
|
|
59
73
|
// Required according to docs...
|
|
60
|
-
- (void)applicationProtectedDataWillBecomeUnavailable:(UIApplication *)application
|
|
61
|
-
{
|
|
74
|
+
- (void)applicationProtectedDataWillBecomeUnavailable:(UIApplication *)application {
|
|
62
75
|
}
|
|
63
76
|
|
|
64
77
|
// Required according to docs...
|
|
65
|
-
- (void)applicationProtectedDataDidBecomeAvailable:(UIApplication *)application
|
|
66
|
-
{
|
|
78
|
+
- (void)applicationProtectedDataDidBecomeAvailable:(UIApplication *)application {
|
|
67
79
|
}
|
|
68
80
|
|
|
69
81
|
// Required according to docs...
|
|
70
|
-
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
|
|
71
|
-
{
|
|
82
|
+
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
|
|
72
83
|
}
|
|
73
84
|
|
|
74
85
|
- (void)applicationDidFinishLaunching:(UIApplication *)application {
|
|
75
86
|
[UIDevice.currentDevice beginGeneratingDeviceOrientationNotifications];
|
|
76
|
-
UIApplication.sharedApplication.idleTimerDisabled = YES;
|
|
87
|
+
//UIApplication.sharedApplication.idleTimerDisabled = YES;
|
|
77
88
|
UIApplication.sharedApplication.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
|
|
78
|
-
|
|
79
|
-
windowInstance();
|
|
80
|
-
|
|
89
|
+
|
|
81
90
|
[[NSTimer scheduledTimerWithTimeInterval: windowInstance().updateInterval() / 1000.0
|
|
82
91
|
target: self
|
|
83
92
|
selector: @selector(doTick:)
|
|
@@ -139,11 +148,13 @@ Gosu::Window::~Window()
|
|
|
139
148
|
{
|
|
140
149
|
}
|
|
141
150
|
|
|
142
|
-
std::wstring Gosu::Window::caption() const
|
|
151
|
+
std::wstring Gosu::Window::caption() const
|
|
152
|
+
{
|
|
143
153
|
return L"";
|
|
144
154
|
}
|
|
145
155
|
|
|
146
|
-
void Gosu::Window::setCaption(const std::wstring& caption)
|
|
156
|
+
void Gosu::Window::setCaption(const std::wstring& caption)
|
|
157
|
+
{
|
|
147
158
|
}
|
|
148
159
|
|
|
149
160
|
double Gosu::Window::updateInterval() const
|
|
@@ -151,27 +162,33 @@ double Gosu::Window::updateInterval() const
|
|
|
151
162
|
return pimpl->interval;
|
|
152
163
|
}
|
|
153
164
|
|
|
154
|
-
const Gosu::Graphics& Gosu::Window::graphics() const
|
|
165
|
+
const Gosu::Graphics& Gosu::Window::graphics() const
|
|
166
|
+
{
|
|
155
167
|
return *pimpl->graphics;
|
|
156
168
|
}
|
|
157
169
|
|
|
158
|
-
Gosu::Graphics& Gosu::Window::graphics()
|
|
170
|
+
Gosu::Graphics& Gosu::Window::graphics()
|
|
171
|
+
{
|
|
159
172
|
return *pimpl->graphics;
|
|
160
173
|
}
|
|
161
174
|
|
|
162
|
-
const Gosu::Audio& Gosu::Window::audio() const
|
|
175
|
+
const Gosu::Audio& Gosu::Window::audio() const
|
|
176
|
+
{
|
|
163
177
|
return *pimpl->audio;
|
|
164
178
|
}
|
|
165
179
|
|
|
166
|
-
Gosu::Audio& Gosu::Window::audio()
|
|
180
|
+
Gosu::Audio& Gosu::Window::audio()
|
|
181
|
+
{
|
|
167
182
|
return *pimpl->audio;
|
|
168
183
|
}
|
|
169
184
|
|
|
170
|
-
const Gosu::Input& Gosu::Window::input() const
|
|
185
|
+
const Gosu::Input& Gosu::Window::input() const
|
|
186
|
+
{
|
|
171
187
|
return *pimpl->input;
|
|
172
188
|
}
|
|
173
189
|
|
|
174
|
-
Gosu::Input& Gosu::Window::input()
|
|
190
|
+
Gosu::Input& Gosu::Window::input()
|
|
191
|
+
{
|
|
175
192
|
return *pimpl->input;
|
|
176
193
|
}
|
|
177
194
|
|
|
@@ -183,3 +200,8 @@ void Gosu::Window::close()
|
|
|
183
200
|
{
|
|
184
201
|
throw std::logic_error("Cannot close windows manually on iOS");
|
|
185
202
|
}
|
|
203
|
+
|
|
204
|
+
void* Gosu::Window::rootViewController() const
|
|
205
|
+
{
|
|
206
|
+
return pimpl->controller.get();
|
|
207
|
+
}
|
data/linux/extconf.rb
CHANGED
|
@@ -68,7 +68,7 @@ if `uname`.chomp == 'Darwin' then
|
|
|
68
68
|
# Apple curiously distributes libpng only inside X11
|
|
69
69
|
$INCFLAGS << " -I/usr/X11/include"
|
|
70
70
|
# To make everything work with the Objective C runtime
|
|
71
|
-
$CFLAGS << " -x objective-c++ -fobjc-gc"
|
|
71
|
+
$CFLAGS << " -x objective-c++ -fobjc-gc -DNDEBUG"
|
|
72
72
|
$LDFLAGS << " -L/usr/X11/lib -logg -lvorbis -lvorbisfile -liconv"
|
|
73
73
|
%w(AudioToolbox IOKit OpenAL OpenGL AppKit ApplicationServices Foundation Carbon).each do |f|
|
|
74
74
|
#$INCFLAGS << " -framework #{f}" <- not necessary? I only get lots of warnings
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gosu
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 81
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 7
|
|
9
|
-
-
|
|
10
|
-
version: 0.7.
|
|
9
|
+
- 41
|
|
10
|
+
version: 0.7.41
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Julian Raschke
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-
|
|
18
|
+
date: 2011-12-17 00:00:00 Z
|
|
19
19
|
dependencies: []
|
|
20
20
|
|
|
21
21
|
description: " 2D game development library.\n\n Gosu features easy to use and game-friendly interfaces to 2D graphics\n and text (accelerated by 3D hardware), sound samples and music as well as\n keyboard, mouse and gamepad/joystick input.\n\n Also includes demos for integration with RMagick, Chipmunk and OpenGL.\n"
|
|
@@ -138,6 +138,7 @@ files:
|
|
|
138
138
|
- GosuImpl/Graphics/Texture.hpp
|
|
139
139
|
- GosuImpl/Graphics/TextWin.cpp
|
|
140
140
|
- GosuImpl/Graphics/Transform.cpp
|
|
141
|
+
- GosuImpl/Graphics/TransformStack.hpp
|
|
141
142
|
- GosuImpl/Iconv.hpp
|
|
142
143
|
- GosuImpl/Input/AccelerometerReader.hpp
|
|
143
144
|
- GosuImpl/Input/AccelerometerReader.mm
|