gosu 0.7.22 → 0.7.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. data/Gosu/Audio.hpp +2 -0
  2. data/Gosu/Fwd.hpp +0 -1
  3. data/Gosu/Gosu.hpp +1 -1
  4. data/Gosu/Graphics.hpp +12 -11
  5. data/Gosu/GraphicsBase.hpp +5 -0
  6. data/Gosu/Image.hpp +0 -14
  7. data/Gosu/Input.hpp +32 -18
  8. data/Gosu/Text.hpp +3 -2
  9. data/Gosu/Version.hpp +2 -2
  10. data/Gosu/Window.hpp +21 -8
  11. data/GosuImpl/Audio/AudioOpenAL.mm +74 -8
  12. data/GosuImpl/Graphics/Common.hpp +25 -1
  13. data/GosuImpl/Graphics/DrawOp.hpp +54 -222
  14. data/GosuImpl/Graphics/DrawOpQueue.hpp +127 -0
  15. data/GosuImpl/Graphics/FormattedString.hpp +63 -20
  16. data/GosuImpl/Graphics/GosuView.hpp +5 -8
  17. data/GosuImpl/Graphics/GosuView.mm +36 -65
  18. data/GosuImpl/Graphics/Graphics.cpp +121 -110
  19. data/GosuImpl/Graphics/Image.cpp +0 -51
  20. data/GosuImpl/Graphics/Macro.hpp +1 -0
  21. data/GosuImpl/Graphics/RenderState.hpp +107 -0
  22. data/GosuImpl/Graphics/TexChunk.cpp +1 -10
  23. data/GosuImpl/Graphics/Text.cpp +22 -10
  24. data/GosuImpl/Graphics/TextMac.cpp +2 -4
  25. data/GosuImpl/Graphics/TextTouch.mm +14 -21
  26. data/GosuImpl/Graphics/TextWin.cpp +5 -2
  27. data/GosuImpl/Graphics/Texture.cpp +11 -10
  28. data/GosuImpl/Graphics/Transform.cpp +3 -1
  29. data/GosuImpl/Input/AccelerometerReader.hpp +10 -0
  30. data/GosuImpl/Input/AccelerometerReader.mm +31 -0
  31. data/GosuImpl/InputMac.mm +51 -24
  32. data/GosuImpl/InputTouch.mm +112 -1
  33. data/GosuImpl/InputWin.cpp +27 -3
  34. data/GosuImpl/InputX.cpp +21 -0
  35. data/GosuImpl/MacUtility.hpp +33 -0
  36. data/GosuImpl/Orientation.hpp +15 -0
  37. data/GosuImpl/Orientation.mm +34 -0
  38. data/GosuImpl/RubyGosu.swg +7 -9
  39. data/GosuImpl/RubyGosu_wrap.cxx +328 -82
  40. data/GosuImpl/RubyGosu_wrap.h +3 -0
  41. data/GosuImpl/TextInputWin.cpp +2 -0
  42. data/GosuImpl/Utility.cpp +2 -0
  43. data/GosuImpl/WindowMac.mm +13 -19
  44. data/GosuImpl/WindowTouch.mm +44 -32
  45. data/GosuImpl/WindowWin.cpp +20 -12
  46. data/GosuImpl/WindowX.cpp +33 -23
  47. data/examples/CptnRuby.rb +8 -9
  48. data/lib/gosu.rb +0 -0
  49. data/lib/gosu/swig_patches.rb +0 -12
  50. data/linux/extconf.rb +2 -2
  51. metadata +11 -7
  52. data/Gosu/RotFlip.hpp +0 -125
  53. data/GosuImpl/Graphics/RotFlip.cpp +0 -184
@@ -5,7 +5,9 @@
5
5
  #define GOSU_AUDIO_HPP
6
6
 
7
7
  #ifdef WIN32
8
+ #ifndef NOMINMAX
8
9
  #define NOMINMAX
10
+ #endif
9
11
  #include <windows.h>
10
12
  #endif
11
13
  #include <Gosu/Fwd.hpp>
@@ -19,7 +19,6 @@ namespace Gosu
19
19
  class Input;
20
20
  class Reader;
21
21
  class Resource;
22
- class RotFlip;
23
22
  class Sample;
24
23
  class Song;
25
24
  class TextInput;
@@ -22,12 +22,12 @@
22
22
  #include <Gosu/IO.hpp>
23
23
  #include <Gosu/Math.hpp>
24
24
  #include <Gosu/Platform.hpp>
25
- #include <Gosu/RotFlip.hpp>
26
25
  #include <Gosu/Sockets.hpp>
27
26
  #include <Gosu/Text.hpp>
28
27
  #include <Gosu/TextInput.hpp>
29
28
  #include <Gosu/Timing.hpp>
30
29
  #include <Gosu/Utility.hpp>
30
+ #include <Gosu/Version.hpp>
31
31
  #include <Gosu/Window.hpp>
32
32
 
33
33
  #endif
@@ -19,21 +19,20 @@ namespace Gosu
19
19
  //! Returns the height, in pixels, of the user's primary screen.
20
20
  unsigned screenHeight();
21
21
 
22
- // Returns the maximum size of an image that can fit on a single
23
- // texture.
24
- // Only useful when extending Gosu using OpenGL.
25
- // (Held back until it will not cause a stock Ubuntu to crash. Don't ask me!)
26
- //extern unsigned const MAX_TEXTURE_SIZE;
22
+ //! Returns the maximum size of an texture that will be allocated
23
+ //! internally by Gosu.
24
+ //! Useful when extending Gosu using OpenGL.
25
+ extern unsigned const MAX_TEXTURE_SIZE;
27
26
 
28
27
  typedef boost::array<double, 16> Transform;
29
- Transform rotate(double angle, double aroundX = 0, double aroundY = 0);
30
28
  Transform translate(double x, double y);
29
+ Transform rotate(double angle, double aroundX = 0, double aroundY = 0);
31
30
  Transform scale(double factor);
32
- Transform scale(double factorX, double factorY);
31
+ Transform scale(double factorX, double factorY, double fromX = 0, double fromY = 0);
33
32
 
34
- //! Serves as the target of all drawing and provides basic drawing
33
+ //! Serves as the target of all drawing and provides primitive drawing
35
34
  //! functionality.
36
- //! Usually created by Gosu::Window.
35
+ //! Usually created internally by Gosu::Window.
37
36
  class Graphics
38
37
  {
39
38
  struct Impl;
@@ -44,8 +43,6 @@ namespace Gosu
44
43
  ~Graphics();
45
44
 
46
45
  // Undocumented until I have thought about this...
47
- double factorX() const;
48
- double factorY() const;
49
46
  void setResolution(unsigned virtualWidth, unsigned virtualHeight);
50
47
  // End of Undocumented
51
48
 
@@ -58,6 +55,10 @@ namespace Gosu
58
55
  bool begin(Color clearWithColor = Color::BLACK);
59
56
  //! Every call to begin must have a matching call to end.
60
57
  void end();
58
+ //! Flushes the Z queue to the screen and starts a new one.
59
+ //! Useful for games that are *very* composite in nature (splitscreen).
60
+ void flush();
61
+
61
62
  //! Finishes all pending Gosu drawing operations and executes
62
63
  //! the following OpenGL code in a clean environment.
63
64
  void beginGL();
@@ -4,6 +4,7 @@
4
4
  #ifndef GOSU_GRAPHICSBASE_HPP
5
5
  #define GOSU_GRAPHICSBASE_HPP
6
6
 
7
+ #include <Gosu/Platform.hpp>
7
8
  #include <limits>
8
9
 
9
10
  namespace Gosu
@@ -16,6 +17,10 @@ namespace Gosu
16
17
  //! The lowest possible Z position. By using this, you tell Gosu that
17
18
  //! your drawing operation does not need Z ordering and can be performed
18
19
  //! immediately.
20
+ //! Deprecated because this turned out not be very useful in optimizing.
21
+ #ifndef SWIG
22
+ GOSU_DEPRECATED
23
+ #endif
19
24
  const double zImmediate = -std::numeric_limits<double>::infinity();
20
25
 
21
26
  //! Determines the way colors are combined when one is drawn onto
@@ -6,7 +6,6 @@
6
6
 
7
7
  #include <Gosu/Fwd.hpp>
8
8
  #include <Gosu/Bitmap.hpp>
9
- #include <Gosu/RotFlip.hpp>
10
9
  #include <boost/scoped_ptr.hpp>
11
10
  #include <memory>
12
11
 
@@ -79,21 +78,8 @@ namespace Gosu
79
78
  Color c = Color::WHITE,
80
79
  AlphaMode mode = amDefault) const;
81
80
 
82
- #ifndef SWIG
83
- void drawRotFlip(double x, double y, ZPos z,
84
- RotFlip rf,
85
- double factorX = 1, double factorY = 1,
86
- Color c = Color::WHITE,
87
- AlphaMode mode = amDefault) const;
88
- void drawRotFlipMod(double x, double y, ZPos z,
89
- RotFlip rf,
90
- double factorX, double factorY,
91
- Color c1, Color c2, Color c3, Color c4,
92
- AlphaMode mode = amDefault) const;
93
-
94
81
  //! Provides access to the underlying image data object.
95
82
  const ImageData& getData() const;
96
- #endif
97
83
  };
98
84
 
99
85
  //! Convenience function that splits a BMP or PNG file into an array
@@ -9,7 +9,9 @@
9
9
 
10
10
  #ifdef GOSU_IS_WIN
11
11
  #include <Gosu/ButtonsWin.hpp>
12
+ #ifndef NOMINMAX
12
13
  #define NOMINMAX
14
+ #endif
13
15
  #include <windows.h>
14
16
  #endif
15
17
 
@@ -50,20 +52,6 @@ namespace Gosu
50
52
  Button(ButtonName name) : id_(name) {}
51
53
  };
52
54
 
53
- // Available even on non-iPhone platforms to make it easier to compile the
54
- // same source for multiple platforms.
55
-
56
- //! Struct that saves information about a touch on the surface of a multi-
57
- //! touch device.
58
- struct Touch
59
- {
60
- //! Allows for identification of a touch across calls.
61
- void* id;
62
- //! Position of a touch on the touch screen.
63
- double x, y;
64
- };
65
- typedef std::vector<Touch> Touches;
66
-
67
55
  //! Tests whether two Buttons identify the same physical button.
68
56
  inline bool operator==(Button lhs, Button rhs)
69
57
  {
@@ -78,6 +66,19 @@ namespace Gosu
78
66
  return lhs.id() < rhs.id();
79
67
  }
80
68
 
69
+ //! Struct that saves information about a touch on the surface of a multi-
70
+ //! touch device.
71
+ //! Available even on non-iPhone platforms to make it easier to compile the
72
+ //! same source for multiple platforms.
73
+ struct Touch
74
+ {
75
+ //! Allows for identification of a touch across calls.
76
+ void* id;
77
+ //! Position of a touch on the touch screen.
78
+ float x, y;
79
+ };
80
+ typedef std::vector<Touch> Touches;
81
+
81
82
  //! Manages initialization and shutdown of the input system. Only one Input
82
83
  //! instance can exist per application.
83
84
  class Input
@@ -92,9 +93,10 @@ namespace Gosu
92
93
 
93
94
  #ifdef GOSU_IS_MAC
94
95
  #ifdef GOSU_IS_IPHONE
95
- Input();
96
+ Input(void* view, float updateInterval);
97
+ void feedTouchEvent(int type, void* touches);
96
98
  #else
97
- Input(void* nswindow);
99
+ Input(void* window);
98
100
  bool feedNSEvent(void* event);
99
101
  #endif
100
102
  #endif
@@ -121,15 +123,23 @@ namespace Gosu
121
123
  double mouseX() const;
122
124
  //! See mouseX.
123
125
  double mouseY() const;
124
-
126
+
125
127
  //! Immediately moves the mouse as far towards the desired position
126
128
  //! as possible. x and y are relativ to the window just as in the mouse
127
129
  //! position accessors.
128
130
  void setMousePosition(double x, double y);
129
131
 
130
- // Undocumented for the moment.
132
+ // Undocumented for the moment. Also applies to currentTouches().
131
133
  void setMouseFactors(double factorX, double factorY);
132
134
 
135
+ //! Currently known touches.
136
+ const Touches& currentTouches() const;
137
+
138
+ //! Accelerometer positions in all three dimensions (smoothened).
139
+ double accelerometerX() const;
140
+ double accelerometerY() const;
141
+ double accelerometerZ() const;
142
+
133
143
  //! Collects new information about which buttons are pressed, where the
134
144
  //! mouse is and calls onButtonUp/onButtonDown, if assigned.
135
145
  void update();
@@ -138,6 +148,10 @@ namespace Gosu
138
148
  //! If you use the Window class, it will assign forward these to its own methods.
139
149
  boost::function<void (Button)> onButtonDown, onButtonUp;
140
150
 
151
+ //! Assignable events that are called by update. You can bind these to your own functions.
152
+ //! If you use the Window class, it will assign forward these to its own methods.
153
+ boost::function<void (Touch)> onTouchBegan, onTouchMoved, onTouchEnded;
154
+
141
155
  //! Returns the currently active TextInput instance, or 0.
142
156
  TextInput* textInput() const;
143
157
  //! Sets the currently active TextInput, or clears it (input = 0).
@@ -51,7 +51,8 @@ namespace Gosu
51
51
  //! \param text Formatted text.
52
52
  //! \param fontName Name of a system font, or a filename to a TTF file (must contain '/', does not work on Linux).
53
53
  //! \param fontHeight Height of the font in pixels.
54
- //! \param lineSpacing Spacing between two lines of text in pixels.
54
+ //! \param lineSpacing Spacing between two lines of text in pixels. Can be negative to make
55
+ //! text stick together more closely.
55
56
  //! \param maxWidth Width of the bitmap that will be returned. Text
56
57
  //! will be split into multiple lines to avoid drawing over the right
57
58
  //! border. When a single word is too long, it will be truncated.
@@ -59,7 +60,7 @@ namespace Gosu
59
60
  //! enum.
60
61
  Bitmap createText(const std::wstring& text,
61
62
  const std::wstring& fontName, unsigned fontHeight,
62
- unsigned lineSpacing, unsigned maxWidth, TextAlign align,
63
+ int lineSpacing, unsigned maxWidth, TextAlign align,
63
64
  unsigned fontFlags = 0);
64
65
 
65
66
  //! Registers a new HTML-style entity that can subsequently be used
@@ -3,7 +3,7 @@
3
3
 
4
4
  #define GOSU_MAJOR_VERSION 0
5
5
  #define GOSU_MINOR_VERSION 7
6
- #define GOSU_POINT_VERSION 22
7
- #define GOSU_VERSION "0.7.22"
6
+ #define GOSU_POINT_VERSION 23
7
+ #define GOSU_VERSION "0.7.23"
8
8
 
9
9
  #endif
@@ -13,7 +13,9 @@
13
13
  #include <string>
14
14
 
15
15
  #ifdef GOSU_IS_WIN
16
+ #ifndef NOMINMAX
16
17
  #define NOMINMAX
18
+ #endif
17
19
  #include <windows.h>
18
20
  #endif
19
21
 
@@ -28,7 +30,7 @@ namespace Gosu
28
30
  {
29
31
  struct Impl;
30
32
  boost::scoped_ptr<Impl> pimpl;
31
-
33
+
32
34
  public:
33
35
  //! Constructs a Window.
34
36
  //! \param updateInterval Interval in milliseconds between two calls
@@ -59,6 +61,19 @@ namespace Gosu
59
61
  //! redraws for one reason or another.
60
62
  //! By default, the window is redrawn all the time.
61
63
  virtual bool needsRedraw() const { return true; }
64
+
65
+ //! If this function returns true, the system arrow cursor is drawn while
66
+ //! over the window.
67
+ virtual bool needsCursor() const { return false; }
68
+
69
+ //! This function is called when the window loses focus on some platforms.
70
+ //! Most importantly, it is called on the iPhone or iPad when the user
71
+ //! locks the screen.
72
+ virtual void loseFocus() {}
73
+
74
+ //! This function is called when the operating system's memory is low.
75
+ //! So far, it is only called in iOS applications.
76
+ virtual void releaseMemory() {}
62
77
 
63
78
  //! Called before update when the user pressed a button while the
64
79
  //! window had the focus.
@@ -94,15 +109,13 @@ namespace Gosu
94
109
  // Note that it does not hurt to override them even if you compile
95
110
  // for another platform; if you don't specify "virtual" the code
96
111
  // should even be stripped away cleanly.
97
- virtual void touchesBegan(const Touches& touches) {}
98
- virtual void touchesMoved(const Touches& touches) {}
99
- virtual void touchesEnded(const Touches& touches) {}
100
- // Currently known touches.
101
- const Touches& currentTouches() const;
112
+ virtual void touchBegan(Touch touch) {}
113
+ virtual void touchMoved(Touch touch) {}
114
+ virtual void touchEnded(Touch touch) {}
102
115
  #endif
103
116
 
104
- GOSU_DEPRECATED const Audio& audio() const;
105
- GOSU_DEPRECATED Audio& audio();
117
+ const Audio& audio() const;
118
+ Audio& audio();
106
119
 
107
120
  #endif
108
121
  };
@@ -22,6 +22,10 @@
22
22
  #include <OpenAL/al.h>
23
23
  #include <OpenAL/alc.h>
24
24
 
25
+ #ifdef GOSU_IS_IPHONE
26
+ #import <AVFoundation/AVFoundation.h>
27
+ #endif
28
+
25
29
  using namespace std;
26
30
 
27
31
  namespace
@@ -245,7 +249,7 @@ protected:
245
249
  public:
246
250
  virtual ~BaseData() {}
247
251
 
248
- virtual void play() = 0;
252
+ virtual void play(bool looping) = 0;
249
253
  virtual void pause() = 0;
250
254
  virtual void resume() = 0;
251
255
  virtual bool paused() const = 0;
@@ -265,6 +269,62 @@ public:
265
269
  }
266
270
  };
267
271
 
272
+ #ifdef GOSU_IS_IPHONE
273
+ // AVAudioPlayer impl
274
+ class Gosu::Song::ModuleData : public BaseData
275
+ {
276
+ ObjRef<AVAudioPlayer> player;
277
+
278
+ void applyVolume()
279
+ {
280
+ player.obj().volume = volume();
281
+ }
282
+
283
+ public:
284
+ ModuleData(const std::wstring& filename)
285
+ {
286
+ std::string utf8Filename = Gosu::wstringToUTF8(filename);
287
+ ObjRef<NSString> nsFilename([[NSString alloc] initWithUTF8String: utf8Filename.c_str()]);
288
+ ObjRef<NSURL> url([[NSURL alloc] initFileURLWithPath: nsFilename.obj()]);
289
+ player.reset([[AVAudioPlayer alloc] initWithContentsOfURL: url.obj() error: NULL]);
290
+ }
291
+
292
+ void play(bool looping)
293
+ {
294
+ if (paused())
295
+ stop();
296
+ player.obj().numberOfLoops = looping ? -1 : 0;
297
+ [player.obj() play];
298
+ }
299
+
300
+ void pause()
301
+ {
302
+ [player.obj() pause];
303
+ }
304
+
305
+ void resume()
306
+ {
307
+ [player.obj() play];
308
+ }
309
+
310
+ bool paused() const
311
+ {
312
+ return !player.obj().playing;
313
+ };
314
+
315
+ void stop()
316
+ {
317
+ [player.obj() stop];
318
+ player.obj().currentTime = 0;
319
+ }
320
+
321
+ void update()
322
+ {
323
+ }
324
+ };
325
+ #endif
326
+
327
+ // AudioToolbox impl
268
328
  class Gosu::Song::StreamData : public BaseData
269
329
  {
270
330
  boost::scoped_ptr<AudioFile> file;
@@ -327,7 +387,7 @@ public:
327
387
  }
328
388
  }
329
389
 
330
- void play()
390
+ void play(bool looping)
331
391
  {
332
392
  int source = lookupSource();
333
393
  if (source != ALChannelManagement::NO_SOURCE)
@@ -401,7 +461,7 @@ public:
401
461
  int source = lookupSource();
402
462
 
403
463
  ALuint buffer;
404
- int queued, processed;
464
+ int processed;
405
465
  bool active = true;
406
466
 
407
467
  alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed);
@@ -428,7 +488,7 @@ public:
428
488
 
429
489
  if (curSongLooping)
430
490
  // Start anew.
431
- play();
491
+ play(true);
432
492
  else
433
493
  // Let the world know we're finished.
434
494
  curSong = 0;
@@ -438,9 +498,15 @@ public:
438
498
 
439
499
  Gosu::Song::Song(const std::wstring& filename)
440
500
  {
441
- CONSTRUCTOR_COMMON;
442
-
443
- data.reset(new StreamData(filename));
501
+ #ifdef GOSU_IS_IPHONE
502
+ if (boost::iends_with(filename, L".mp3") || boost::iends_with(filename, L".aac") || boost::iends_with(filename, L".m4a"))
503
+ data.reset(new ModuleData(filename));
504
+ else
505
+ #endif
506
+ {
507
+ CONSTRUCTOR_COMMON;
508
+ data.reset(new StreamData(filename));
509
+ }
444
510
  }
445
511
 
446
512
  Gosu::Song::Song(Type type, Reader reader)
@@ -472,7 +538,7 @@ void Gosu::Song::play(bool looping)
472
538
  }
473
539
 
474
540
  if (curSong == 0)
475
- data->play();
541
+ data->play(looping);
476
542
 
477
543
  curSong = this;
478
544
  curSongLooping = looping;