gosu 0.10.1.2 → 0.10.2.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gosu/Version.hpp +2 -2
- data/Gosu/Window.hpp +12 -2
- data/ext/gosu/gosu_wrap.cxx +144 -46
- data/ext/gosu/gosu_wrap.h +2 -0
- data/lib/gosu/patches.rb +13 -1
- data/src/Window.cpp +37 -42
- data/src/WindowUIKit.mm +5 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ecfdbb08ed4f62285efa92a4e6531cd11adae83f
|
4
|
+
data.tar.gz: 8c7633022fb1c04feacd970b3aa347c3e2130eb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c13a96ad5c4e0b58ff964208c7a7cd12ee92bb93a4cdb214641ab93877bbfec080c0923364ef115cab7335eb718655d00c5c4210d59b65d6762926bd161bba8
|
7
|
+
data.tar.gz: c24c6d0429534be9927d1a1bbbd39031bb18b0d23914dd3af8e702571b20746ff57ba416dd2fd644a22d117e8efb481ce4f8d9a8cc45db24c059fa7c93e6074c
|
data/Gosu/Version.hpp
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
|
4
4
|
#define GOSU_MAJOR_VERSION 0
|
5
5
|
#define GOSU_MINOR_VERSION 10
|
6
|
-
#define GOSU_POINT_VERSION
|
7
|
-
#define GOSU_VERSION "0.10.
|
6
|
+
#define GOSU_POINT_VERSION 2
|
7
|
+
#define GOSU_VERSION "0.10.2.pre1"
|
8
8
|
|
9
9
|
#define GOSU_COPYRIGHT_NOTICE \
|
10
10
|
"This software uses the following third-party libraries:\n" \
|
data/Gosu/Window.hpp
CHANGED
@@ -65,10 +65,20 @@ namespace Gosu
|
|
65
65
|
void setCaption(const std::wstring& caption);
|
66
66
|
|
67
67
|
double updateInterval() const;
|
68
|
-
|
68
|
+
|
69
69
|
//! Enters a modal loop where the Window is visible on screen and
|
70
70
|
//! receives calls to draw, update etc.
|
71
|
-
void show();
|
71
|
+
virtual void show();
|
72
|
+
|
73
|
+
//! Performs a single mainloop step.
|
74
|
+
//! This method is only useful if you want to integrate Gosu with
|
75
|
+
//! another library that has its own main loop.
|
76
|
+
//! This method implicitly shows the window if it was hidden before, and
|
77
|
+
//! returns false when the window has been closed.
|
78
|
+
//! If you discard the return value and keep calling tick(), the window will be shown again,
|
79
|
+
//! or keep being shown.
|
80
|
+
virtual bool tick();
|
81
|
+
|
72
82
|
//! Closes the window if it is currently shown.
|
73
83
|
void close();
|
74
84
|
|
data/ext/gosu/gosu_wrap.cxx
CHANGED
@@ -8,10 +8,6 @@
|
|
8
8
|
* interface file instead.
|
9
9
|
* ----------------------------------------------------------------------------- */
|
10
10
|
|
11
|
-
// This file was afterwards patched using the following instructions:
|
12
|
-
// http://sourceforge.net/tracker/index.php?func=detail&aid=2034216&group_id=1645&atid=101645
|
13
|
-
// (Many thanks to Kevin Burge for that.)
|
14
|
-
|
15
11
|
#define SWIGRUBY
|
16
12
|
#define SWIG_DIRECTORS
|
17
13
|
|
@@ -874,7 +870,6 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
|
|
874
870
|
|
875
871
|
|
876
872
|
#include <ruby.h>
|
877
|
-
#include <map>
|
878
873
|
|
879
874
|
/* Ruby 1.9.1 has a "memoisation optimisation" when compiling with GCC which
|
880
875
|
* breaks using rb_intern as an lvalue, as SWIG does. We work around this
|
@@ -1215,7 +1210,7 @@ extern "C" {
|
|
1215
1210
|
/* Global Ruby hash table to store Trackings from C/C++
|
1216
1211
|
structs to Ruby Objects.
|
1217
1212
|
*/
|
1218
|
-
static
|
1213
|
+
static VALUE swig_ruby_trackings = Qnil;
|
1219
1214
|
|
1220
1215
|
/* Global variable that stores a reference to the ruby
|
1221
1216
|
hash table delete function. */
|
@@ -1232,18 +1227,34 @@ SWIGRUNTIME void SWIG_RubyInitializeTrackings(void) {
|
|
1232
1227
|
This is done to allow multiple DSOs to share the same
|
1233
1228
|
tracking table.
|
1234
1229
|
*/
|
1230
|
+
ID trackings_id = rb_intern( "@__trackings__" );
|
1235
1231
|
VALUE verbose = rb_gv_get("VERBOSE");
|
1236
1232
|
rb_gv_set("VERBOSE", Qfalse);
|
1233
|
+
swig_ruby_trackings = rb_ivar_get( _mSWIG, trackings_id );
|
1237
1234
|
rb_gv_set("VERBOSE", verbose);
|
1238
1235
|
|
1239
1236
|
/* No, it hasn't. Create one ourselves */
|
1240
|
-
swig_ruby_trackings
|
1237
|
+
if ( swig_ruby_trackings == Qnil )
|
1238
|
+
{
|
1239
|
+
swig_ruby_trackings = rb_hash_new();
|
1240
|
+
rb_ivar_set( _mSWIG, trackings_id, swig_ruby_trackings );
|
1241
|
+
}
|
1241
1242
|
|
1242
1243
|
/* Now store a reference to the hash table delete function
|
1243
1244
|
so that we only have to look it up once.*/
|
1244
1245
|
swig_ruby_hash_delete = rb_intern("delete");
|
1245
1246
|
}
|
1246
1247
|
|
1248
|
+
/* Get a Ruby number to reference a pointer */
|
1249
|
+
SWIGRUNTIME VALUE SWIG_RubyPtrToReference(void* ptr) {
|
1250
|
+
/* We cast the pointer to an unsigned long
|
1251
|
+
and then store a reference to it using
|
1252
|
+
a Ruby number object. */
|
1253
|
+
|
1254
|
+
/* Convert the pointer to a Ruby number */
|
1255
|
+
return SWIG2NUM(ptr);
|
1256
|
+
}
|
1257
|
+
|
1247
1258
|
/* Get a Ruby number to reference an object */
|
1248
1259
|
SWIGRUNTIME VALUE SWIG_RubyObjectToReference(VALUE object) {
|
1249
1260
|
/* We cast the object to an unsigned long
|
@@ -1265,16 +1276,39 @@ SWIGRUNTIME VALUE SWIG_RubyReferenceToObject(VALUE reference) {
|
|
1265
1276
|
|
1266
1277
|
/* Add a Tracking from a C/C++ struct to a Ruby object */
|
1267
1278
|
SWIGRUNTIME void SWIG_RubyAddTracking(void* ptr, VALUE object) {
|
1279
|
+
/* In a Ruby hash table we store the pointer and
|
1280
|
+
the associated Ruby object. The trick here is
|
1281
|
+
that we cannot store the Ruby object directly - if
|
1282
|
+
we do then it cannot be garbage collected. So
|
1283
|
+
instead we typecast it as a unsigned long and
|
1284
|
+
convert it to a Ruby number object.*/
|
1285
|
+
|
1286
|
+
/* Get a reference to the pointer as a Ruby number */
|
1287
|
+
VALUE key = SWIG_RubyPtrToReference(ptr);
|
1288
|
+
|
1289
|
+
/* Get a reference to the Ruby object as a Ruby number */
|
1290
|
+
VALUE value = SWIG_RubyObjectToReference(object);
|
1291
|
+
|
1268
1292
|
/* Store the mapping to the global hash table. */
|
1269
|
-
swig_ruby_trackings
|
1293
|
+
rb_hash_aset(swig_ruby_trackings, key, value);
|
1270
1294
|
}
|
1271
1295
|
|
1272
1296
|
/* Get the Ruby object that owns the specified C/C++ struct */
|
1273
1297
|
SWIGRUNTIME VALUE SWIG_RubyInstanceFor(void* ptr) {
|
1274
|
-
|
1298
|
+
/* Get a reference to the pointer as a Ruby number */
|
1299
|
+
VALUE key = SWIG_RubyPtrToReference(ptr);
|
1300
|
+
|
1301
|
+
/* Now lookup the value stored in the global hash table */
|
1302
|
+
VALUE value = rb_hash_aref(swig_ruby_trackings, key);
|
1303
|
+
|
1304
|
+
if (value == Qnil) {
|
1305
|
+
/* No object exists - return nil. */
|
1275
1306
|
return Qnil;
|
1276
|
-
|
1277
|
-
|
1307
|
+
}
|
1308
|
+
else {
|
1309
|
+
/* Convert this value to Ruby object */
|
1310
|
+
return SWIG_RubyReferenceToObject(value);
|
1311
|
+
}
|
1278
1312
|
}
|
1279
1313
|
|
1280
1314
|
/* Remove a Tracking from a C/C++ struct to a Ruby object. It
|
@@ -1282,7 +1316,12 @@ SWIGRUNTIME VALUE SWIG_RubyInstanceFor(void* ptr) {
|
|
1282
1316
|
since the same memory address may be reused later to create
|
1283
1317
|
a new object. */
|
1284
1318
|
SWIGRUNTIME void SWIG_RubyRemoveTracking(void* ptr) {
|
1285
|
-
|
1319
|
+
/* Get a reference to the pointer as a Ruby number */
|
1320
|
+
VALUE key = SWIG_RubyPtrToReference(ptr);
|
1321
|
+
|
1322
|
+
/* Delete the object from the hash table by calling Ruby's
|
1323
|
+
do this we need to call the Hash.delete method.*/
|
1324
|
+
rb_funcall(swig_ruby_trackings, swig_ruby_hash_delete, 1, key);
|
1286
1325
|
}
|
1287
1326
|
|
1288
1327
|
/* This is a helper method that unlinks a Ruby object from its
|
@@ -2236,20 +2275,6 @@ namespace Gosu {
|
|
2236
2275
|
#define RUBY_18_19(r18, r19) r18
|
2237
2276
|
#endif
|
2238
2277
|
|
2239
|
-
namespace GosusDarkSide
|
2240
|
-
{
|
2241
|
-
// TODO: Find a way for this to fit into Gosu's design.
|
2242
|
-
// This can point to a function that wants to be called every
|
2243
|
-
// frame, e.g. rb_thread_schedule.
|
2244
|
-
typedef void (*HookOfHorror)();
|
2245
|
-
extern HookOfHorror oncePerTick;
|
2246
|
-
|
2247
|
-
void yieldToOtherRubyThreads()
|
2248
|
-
{
|
2249
|
-
rb_thread_schedule();
|
2250
|
-
}
|
2251
|
-
}
|
2252
|
-
|
2253
2278
|
namespace
|
2254
2279
|
{
|
2255
2280
|
void callRubyBlock(VALUE block) {
|
@@ -3069,17 +3094,39 @@ SwigDirector_Window::SwigDirector_Window(VALUE self, unsigned int width, unsigne
|
|
3069
3094
|
SwigDirector_Window::~SwigDirector_Window() {
|
3070
3095
|
}
|
3071
3096
|
|
3097
|
+
void SwigDirector_Window::show() {
|
3098
|
+
VALUE result;
|
3099
|
+
|
3100
|
+
result = rb_funcall(swig_get_self(), rb_intern("show"), 0, NULL);
|
3101
|
+
}
|
3102
|
+
|
3103
|
+
|
3104
|
+
bool SwigDirector_Window::tick() {
|
3105
|
+
bool c_result ;
|
3106
|
+
VALUE result;
|
3107
|
+
|
3108
|
+
result = rb_funcall(swig_get_self(), rb_intern("tick"), 0, NULL);
|
3109
|
+
bool swig_val;
|
3110
|
+
int swig_res = SWIG_AsVal_bool(result, &swig_val);
|
3111
|
+
if (!SWIG_IsOK(swig_res)) {
|
3112
|
+
Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""bool""'");
|
3113
|
+
}
|
3114
|
+
c_result = static_cast< bool >(swig_val);
|
3115
|
+
return (bool) c_result;
|
3116
|
+
}
|
3117
|
+
|
3118
|
+
|
3072
3119
|
void SwigDirector_Window::update() {
|
3073
3120
|
VALUE result;
|
3074
3121
|
|
3075
|
-
result = rb_funcall(swig_get_self(), rb_intern("
|
3122
|
+
result = rb_funcall(swig_get_self(), rb_intern("update"), 0, NULL);
|
3076
3123
|
}
|
3077
3124
|
|
3078
3125
|
|
3079
3126
|
void SwigDirector_Window::draw() {
|
3080
3127
|
VALUE result;
|
3081
3128
|
|
3082
|
-
result = rb_funcall(swig_get_self(), rb_intern("
|
3129
|
+
result = rb_funcall(swig_get_self(), rb_intern("draw"), 0, NULL);
|
3083
3130
|
}
|
3084
3131
|
|
3085
3132
|
|
@@ -3087,7 +3134,7 @@ bool SwigDirector_Window::needsRedraw() const {
|
|
3087
3134
|
bool c_result ;
|
3088
3135
|
VALUE result;
|
3089
3136
|
|
3090
|
-
result = rb_funcall(swig_get_self(), rb_intern("
|
3137
|
+
result = rb_funcall(swig_get_self(), rb_intern("needs_redraw?"), 0, NULL);
|
3091
3138
|
bool swig_val;
|
3092
3139
|
int swig_res = SWIG_AsVal_bool(result, &swig_val);
|
3093
3140
|
if (!SWIG_IsOK(swig_res)) {
|
@@ -3102,7 +3149,7 @@ bool SwigDirector_Window::needsCursor() const {
|
|
3102
3149
|
bool c_result ;
|
3103
3150
|
VALUE result;
|
3104
3151
|
|
3105
|
-
result = rb_funcall(swig_get_self(), rb_intern("
|
3152
|
+
result = rb_funcall(swig_get_self(), rb_intern("needs_cursor?"), 0, NULL);
|
3106
3153
|
bool swig_val;
|
3107
3154
|
int swig_res = SWIG_AsVal_bool(result, &swig_val);
|
3108
3155
|
if (!SWIG_IsOK(swig_res)) {
|
@@ -3116,7 +3163,7 @@ bool SwigDirector_Window::needsCursor() const {
|
|
3116
3163
|
void SwigDirector_Window::loseFocus() {
|
3117
3164
|
VALUE result;
|
3118
3165
|
|
3119
|
-
result = rb_funcall(swig_get_self(), rb_intern("
|
3166
|
+
result = rb_funcall(swig_get_self(), rb_intern("lose_focus"), 0, NULL);
|
3120
3167
|
}
|
3121
3168
|
|
3122
3169
|
|
@@ -3137,7 +3184,7 @@ void SwigDirector_Window::buttonDown(Gosu::Button arg0) {
|
|
3137
3184
|
else
|
3138
3185
|
obj0 = LONG2NUM((&arg0)->id());
|
3139
3186
|
}
|
3140
|
-
result = rb_funcall(swig_get_self(), rb_intern("
|
3187
|
+
result = rb_funcall(swig_get_self(), rb_intern("button_down"), 1,obj0);
|
3141
3188
|
}
|
3142
3189
|
|
3143
3190
|
|
@@ -3151,7 +3198,7 @@ void SwigDirector_Window::buttonUp(Gosu::Button arg0) {
|
|
3151
3198
|
else
|
3152
3199
|
obj0 = LONG2NUM((&arg0)->id());
|
3153
3200
|
}
|
3154
|
-
result = rb_funcall(swig_get_self(), rb_intern("
|
3201
|
+
result = rb_funcall(swig_get_self(), rb_intern("button_up"), 1,obj0);
|
3155
3202
|
}
|
3156
3203
|
|
3157
3204
|
|
@@ -8813,6 +8860,8 @@ _wrap_Window_show(int argc, VALUE *argv, VALUE self) {
|
|
8813
8860
|
Gosu::Window *arg1 = (Gosu::Window *) 0 ;
|
8814
8861
|
void *argp1 = 0 ;
|
8815
8862
|
int res1 = 0 ;
|
8863
|
+
Swig::Director *director = 0;
|
8864
|
+
bool upcall = false;
|
8816
8865
|
|
8817
8866
|
if ((argc < 0) || (argc > 0)) {
|
8818
8867
|
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
|
@@ -8822,12 +8871,23 @@ _wrap_Window_show(int argc, VALUE *argv, VALUE self) {
|
|
8822
8871
|
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "Gosu::Window *","show", 1, self ));
|
8823
8872
|
}
|
8824
8873
|
arg1 = reinterpret_cast< Gosu::Window * >(argp1);
|
8825
|
-
|
8826
|
-
|
8827
|
-
|
8828
|
-
|
8829
|
-
|
8874
|
+
director = dynamic_cast<Swig::Director *>(arg1);
|
8875
|
+
upcall = (director && (director->swig_get_self() == self));
|
8876
|
+
try {
|
8877
|
+
{
|
8878
|
+
try {
|
8879
|
+
if (upcall) {
|
8880
|
+
(arg1)->Gosu::Window::show();
|
8881
|
+
} else {
|
8882
|
+
(arg1)->show();
|
8883
|
+
}
|
8884
|
+
} catch (const std::exception& e) {
|
8885
|
+
SWIG_exception(SWIG_RuntimeError, e.what());
|
8886
|
+
}
|
8830
8887
|
}
|
8888
|
+
} catch (Swig::DirectorException& e) {
|
8889
|
+
rb_exc_raise(e.getError());
|
8890
|
+
SWIG_fail;
|
8831
8891
|
}
|
8832
8892
|
return Qnil;
|
8833
8893
|
fail:
|
@@ -8835,6 +8895,49 @@ fail:
|
|
8835
8895
|
}
|
8836
8896
|
|
8837
8897
|
|
8898
|
+
SWIGINTERN VALUE
|
8899
|
+
_wrap_Window_tick(int argc, VALUE *argv, VALUE self) {
|
8900
|
+
Gosu::Window *arg1 = (Gosu::Window *) 0 ;
|
8901
|
+
void *argp1 = 0 ;
|
8902
|
+
int res1 = 0 ;
|
8903
|
+
Swig::Director *director = 0;
|
8904
|
+
bool upcall = false;
|
8905
|
+
bool result;
|
8906
|
+
VALUE vresult = Qnil;
|
8907
|
+
|
8908
|
+
if ((argc < 0) || (argc > 0)) {
|
8909
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
|
8910
|
+
}
|
8911
|
+
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_Gosu__Window, 0 | 0 );
|
8912
|
+
if (!SWIG_IsOK(res1)) {
|
8913
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "Gosu::Window *","tick", 1, self ));
|
8914
|
+
}
|
8915
|
+
arg1 = reinterpret_cast< Gosu::Window * >(argp1);
|
8916
|
+
director = dynamic_cast<Swig::Director *>(arg1);
|
8917
|
+
upcall = (director && (director->swig_get_self() == self));
|
8918
|
+
try {
|
8919
|
+
{
|
8920
|
+
try {
|
8921
|
+
if (upcall) {
|
8922
|
+
result = (bool)(arg1)->Gosu::Window::tick();
|
8923
|
+
} else {
|
8924
|
+
result = (bool)(arg1)->tick();
|
8925
|
+
}
|
8926
|
+
} catch (const std::exception& e) {
|
8927
|
+
SWIG_exception(SWIG_RuntimeError, e.what());
|
8928
|
+
}
|
8929
|
+
}
|
8930
|
+
} catch (Swig::DirectorException& e) {
|
8931
|
+
rb_exc_raise(e.getError());
|
8932
|
+
SWIG_fail;
|
8933
|
+
}
|
8934
|
+
vresult = SWIG_From_bool(static_cast< bool >(result));
|
8935
|
+
return vresult;
|
8936
|
+
fail:
|
8937
|
+
return Qnil;
|
8938
|
+
}
|
8939
|
+
|
8940
|
+
|
8838
8941
|
SWIGINTERN VALUE
|
8839
8942
|
_wrap_Window_close(int argc, VALUE *argv, VALUE self) {
|
8840
8943
|
Gosu::Window *arg1 = (Gosu::Window *) 0 ;
|
@@ -11105,8 +11208,8 @@ SWIGEXPORT void Init_gosu(void) {
|
|
11105
11208
|
SWIG_RubyInitializeTrackings();
|
11106
11209
|
rb_define_const(mGosu, "MAJOR_VERSION", SWIG_From_int(static_cast< int >(0)));
|
11107
11210
|
rb_define_const(mGosu, "MINOR_VERSION", SWIG_From_int(static_cast< int >(10)));
|
11108
|
-
rb_define_const(mGosu, "POINT_VERSION", SWIG_From_int(static_cast< int >(
|
11109
|
-
rb_define_const(mGosu, "VERSION", SWIG_FromCharPtr("0.10.
|
11211
|
+
rb_define_const(mGosu, "POINT_VERSION", SWIG_From_int(static_cast< int >(2)));
|
11212
|
+
rb_define_const(mGosu, "VERSION", SWIG_FromCharPtr("0.10.2.pre1"));
|
11110
11213
|
rb_define_const(mGosu, "GOSU_COPYRIGHT_NOTICE", SWIG_FromCharPtr("This software uses the following third-party libraries:\n\nGosu, http://www.libgosu.org, MIT License, http://opensource.org/licenses/MIT\nSDL 2, http://www.libsdl.org, MIT License, http://opensource.org/licenses/MIT\nlibsndfile, http://www.mega-nerd.com/libsndfile, GNU LGPL 3, http://www.gnu.org/copyleft/lesser.html\nOpenAL Soft, http://kcat.strangesoft.net/openal.html, GNU LGPL 2, http://www.gnu.org/licenses/old-licenses/lgpl-2.0.html\n"));
|
11111
11214
|
rb_define_module_function(mGosu, "milliseconds", VALUEFUNC(_wrap_milliseconds), -1);
|
11112
11215
|
rb_define_module_function(mGosu, "random", VALUEFUNC(_wrap_random), -1);
|
@@ -11470,12 +11573,6 @@ SWIGEXPORT void Init_gosu(void) {
|
|
11470
11573
|
rb_define_const(mGosu, "Gp3Button13", SWIG_From_int(static_cast< int >(Gosu::gp3Button13)));
|
11471
11574
|
rb_define_const(mGosu, "Gp3Button14", SWIG_From_int(static_cast< int >(Gosu::gp3Button14)));
|
11472
11575
|
rb_define_const(mGosu, "Gp3Button15", SWIG_From_int(static_cast< int >(Gosu::gp3Button15)));
|
11473
|
-
|
11474
|
-
GosusDarkSide::oncePerTick = GosusDarkSide::yieldToOtherRubyThreads;
|
11475
|
-
// While we are at it, call srand() - otherwise unavailable to Ruby people
|
11476
|
-
std::srand(static_cast<unsigned int>(std::time(0)));
|
11477
|
-
std::rand(); // and flush the first value
|
11478
|
-
|
11479
11576
|
rb_define_module_function(mGosu, "disown_TextInput", VALUEFUNC(_wrap_disown_TextInput), -1);
|
11480
11577
|
|
11481
11578
|
SwigClassTextInput.klass = rb_define_class_under(mGosu, "TextInput", rb_cObject);
|
@@ -11506,6 +11603,7 @@ SWIGEXPORT void Init_gosu(void) {
|
|
11506
11603
|
rb_define_method(SwigClassWindow.klass, "caption=", VALUEFUNC(_wrap_Window_captione___), -1);
|
11507
11604
|
rb_define_method(SwigClassWindow.klass, "update_interval", VALUEFUNC(_wrap_Window_update_interval), -1);
|
11508
11605
|
rb_define_method(SwigClassWindow.klass, "show", VALUEFUNC(_wrap_Window_show), -1);
|
11606
|
+
rb_define_method(SwigClassWindow.klass, "tick", VALUEFUNC(_wrap_Window_tick), -1);
|
11509
11607
|
rb_define_method(SwigClassWindow.klass, "close", VALUEFUNC(_wrap_Window_close), -1);
|
11510
11608
|
rb_define_method(SwigClassWindow.klass, "update", VALUEFUNC(_wrap_Window_update), -1);
|
11511
11609
|
rb_define_method(SwigClassWindow.klass, "draw", VALUEFUNC(_wrap_Window_draw), -1);
|
data/ext/gosu/gosu_wrap.h
CHANGED
@@ -30,6 +30,8 @@ class SwigDirector_Window : public Gosu::Window, public Swig::Director {
|
|
30
30
|
public:
|
31
31
|
SwigDirector_Window(VALUE self, unsigned int width, unsigned int height, bool fullscreen = false, double updateInterval = 16.666666);
|
32
32
|
virtual ~SwigDirector_Window();
|
33
|
+
virtual void show();
|
34
|
+
virtual bool tick();
|
33
35
|
virtual void update();
|
34
36
|
virtual void draw();
|
35
37
|
virtual bool needsRedraw() const;
|
data/lib/gosu/patches.rb
CHANGED
@@ -90,6 +90,7 @@ end
|
|
90
90
|
class Gosu::Window
|
91
91
|
# Backwards compatibility:
|
92
92
|
# Class methods that have been turned into module methods.
|
93
|
+
|
93
94
|
def self.button_id_to_char(id)
|
94
95
|
Gosu.button_id_to_char(id)
|
95
96
|
end
|
@@ -99,7 +100,8 @@ class Gosu::Window
|
|
99
100
|
end
|
100
101
|
|
101
102
|
# Backwards compatibility:
|
102
|
-
# Instance methods
|
103
|
+
# Instance methods that have been turned into module methods.
|
104
|
+
|
103
105
|
%w(draw_line draw_triangle draw_quad
|
104
106
|
flush gl clip_to record
|
105
107
|
transform translate rotate scale
|
@@ -108,6 +110,16 @@ class Gosu::Window
|
|
108
110
|
Gosu.send method, *args, &block
|
109
111
|
end
|
110
112
|
end
|
113
|
+
|
114
|
+
# Call Thread.pass every tick, which may or may not be necessary for friendly co-existence with
|
115
|
+
# Ruby's Thread class.
|
116
|
+
|
117
|
+
alias _tick tick
|
118
|
+
|
119
|
+
def tick
|
120
|
+
Thread.pass
|
121
|
+
_tick
|
122
|
+
end
|
111
123
|
end
|
112
124
|
|
113
125
|
# Release OpenAL resources during Ruby's shutdown, not Gosu's.
|
data/src/Window.cpp
CHANGED
@@ -167,55 +167,50 @@ double Gosu::Window::updateInterval() const
|
|
167
167
|
return pimpl->updateInterval;
|
168
168
|
}
|
169
169
|
|
170
|
-
|
170
|
+
void Gosu::Window::show()
|
171
171
|
{
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
172
|
+
unsigned long timeBeforeTick = milliseconds();
|
173
|
+
|
174
|
+
while (tick()) {
|
175
|
+
// Sleep to keep this loop from eating 100% CPU.
|
176
|
+
unsigned long tickTime = milliseconds() - timeBeforeTick;
|
177
|
+
if (tickTime < updateInterval())
|
178
|
+
sleep(updateInterval() - tickTime);
|
179
|
+
|
180
|
+
timeBeforeTick = milliseconds();
|
181
|
+
}
|
177
182
|
}
|
178
183
|
|
179
|
-
|
184
|
+
bool Gosu::Window::tick()
|
180
185
|
{
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
draw();
|
204
|
-
graphics().end();
|
205
|
-
FPS::registerFrame();
|
206
|
-
}
|
207
|
-
|
208
|
-
SDL_GL_SwapWindow(sharedWindow());
|
209
|
-
|
210
|
-
if (GosusDarkSide::oncePerTick) GosusDarkSide::oncePerTick();
|
186
|
+
SDL_Event e;
|
187
|
+
while (SDL_PollEvent(&e)) {
|
188
|
+
if (e.type == SDL_QUIT)
|
189
|
+
return false;
|
190
|
+
else
|
191
|
+
input().feedSDLEvent(&e);
|
192
|
+
}
|
193
|
+
|
194
|
+
Song::update();
|
195
|
+
|
196
|
+
input().update();
|
197
|
+
|
198
|
+
update();
|
199
|
+
|
200
|
+
SDL_ShowCursor(needsCursor());
|
201
|
+
|
202
|
+
if (needsRedraw()) {
|
203
|
+
ensureCurrentContext();
|
204
|
+
if (graphics().begin()) {
|
205
|
+
draw();
|
206
|
+
graphics().end();
|
207
|
+
FPS::registerFrame();
|
211
208
|
}
|
212
209
|
|
213
|
-
|
214
|
-
unsigned long frameTime = milliseconds() - startTime;
|
215
|
-
if (frameTime < pimpl->updateInterval) {
|
216
|
-
sleep(pimpl->updateInterval - frameTime);
|
217
|
-
}
|
210
|
+
SDL_GL_SwapWindow(sharedWindow());
|
218
211
|
}
|
212
|
+
|
213
|
+
return true;
|
219
214
|
}
|
220
215
|
|
221
216
|
void Gosu::Window::close()
|
data/src/WindowUIKit.mm
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gosu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.2.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julian Raschke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
2D game development library.
|
@@ -155,9 +155,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
155
|
version: 1.8.2
|
156
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- - '
|
158
|
+
- - '>'
|
159
159
|
- !ruby/object:Gem::Version
|
160
|
-
version:
|
160
|
+
version: 1.3.1
|
161
161
|
requirements: []
|
162
162
|
rubyforge_project:
|
163
163
|
rubygems_version: 2.0.14
|