gosu 1.4.6 → 2.0.0.pre6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. checksums.yaml +4 -4
  2. data/COPYING +2 -1
  3. data/dependencies/SDL/include/SDL_atomic.h +2 -3
  4. data/dependencies/SDL/include/SDL_audio.h +7 -7
  5. data/dependencies/SDL/include/SDL_blendmode.h +1 -1
  6. data/dependencies/SDL/include/SDL_endian.h +3 -3
  7. data/dependencies/SDL/include/SDL_gamecontroller.h +4 -4
  8. data/dependencies/SDL/include/SDL_hints.h +72 -28
  9. data/dependencies/SDL/include/SDL_joystick.h +8 -5
  10. data/dependencies/SDL/include/SDL_keycode.h +1 -1
  11. data/dependencies/SDL/include/SDL_main.h +7 -0
  12. data/dependencies/SDL/include/SDL_mouse.h +6 -7
  13. data/dependencies/SDL/include/SDL_mutex.h +79 -5
  14. data/dependencies/SDL/include/SDL_opengl_glext.h +5 -1
  15. data/dependencies/SDL/include/SDL_power.h +7 -8
  16. data/dependencies/SDL/include/SDL_render.h +5 -0
  17. data/dependencies/SDL/include/SDL_revision.h +2 -2
  18. data/dependencies/SDL/include/SDL_sensor.h +1 -1
  19. data/dependencies/SDL/include/SDL_stdinc.h +19 -11
  20. data/dependencies/SDL/include/SDL_thread.h +2 -2
  21. data/dependencies/SDL/include/SDL_version.h +2 -2
  22. data/dependencies/SDL/include/SDL_video.h +30 -2
  23. data/dependencies/SDL/include/begin_code.h +7 -7
  24. data/dependencies/SDL/include/close_code.h +2 -2
  25. data/dependencies/SDL/lib/x64/libSDL2.dll.a +0 -0
  26. data/dependencies/SDL/lib/x86/libSDL2.dll.a +0 -0
  27. data/dependencies/SDL_sound/SDL_sound.h +1 -1
  28. data/dependencies/SDL_sound/dr_flac.h +48 -23
  29. data/dependencies/SDL_sound/dr_mp3.h +34 -14
  30. data/dependencies/SDL_sound/stb_vorbis.h +3 -2
  31. data/dependencies/mojoAL/mojoal.c +1 -1
  32. data/ext/{gosu → gosu-ffi}/extconf.rb +34 -33
  33. data/ext/gosu-ffi/gosu-ffi.def +464 -0
  34. data/ffi/Gosu.cpp +307 -0
  35. data/ffi/Gosu.h +84 -0
  36. data/ffi/Gosu_Channel.cpp +62 -0
  37. data/ffi/Gosu_Channel.h +17 -0
  38. data/ffi/Gosu_Color.cpp +132 -0
  39. data/ffi/Gosu_Color.h +31 -0
  40. data/ffi/Gosu_Constants.cpp +334 -0
  41. data/ffi/Gosu_FFI.h +34 -0
  42. data/ffi/Gosu_FFI_internal.h +161 -0
  43. data/ffi/Gosu_Font.cpp +92 -0
  44. data/ffi/Gosu_Font.h +32 -0
  45. data/ffi/Gosu_Image.cpp +206 -0
  46. data/ffi/Gosu_Image.h +60 -0
  47. data/ffi/Gosu_Sample.cpp +29 -0
  48. data/ffi/Gosu_Sample.h +14 -0
  49. data/ffi/Gosu_Song.cpp +69 -0
  50. data/ffi/Gosu_Song.h +18 -0
  51. data/ffi/Gosu_TextInput.cpp +94 -0
  52. data/ffi/Gosu_TextInput.h +25 -0
  53. data/ffi/Gosu_Window.cpp +314 -0
  54. data/ffi/Gosu_Window.h +78 -0
  55. data/include/Gosu/Audio.hpp +6 -11
  56. data/include/Gosu/Bitmap.hpp +38 -53
  57. data/include/Gosu/Buffer.hpp +54 -0
  58. data/include/Gosu/Color.hpp +27 -35
  59. data/include/Gosu/Directories.hpp +25 -28
  60. data/include/Gosu/Drawable.hpp +58 -0
  61. data/include/Gosu/Font.hpp +6 -5
  62. data/include/Gosu/Fwd.hpp +4 -6
  63. data/include/Gosu/Gosu.hpp +5 -5
  64. data/include/Gosu/Graphics.hpp +51 -61
  65. data/include/Gosu/GraphicsBase.hpp +1 -11
  66. data/include/Gosu/Image.hpp +11 -14
  67. data/include/Gosu/Math.hpp +50 -72
  68. data/include/Gosu/Transform.hpp +32 -0
  69. data/include/Gosu/Utility.hpp +51 -1
  70. data/include/Gosu/Version.hpp +3 -3
  71. data/include/Gosu/Window.hpp +15 -9
  72. data/lib/SDL2.dll +0 -0
  73. data/lib/gosu/channel.rb +49 -0
  74. data/lib/gosu/color.rb +150 -0
  75. data/lib/gosu/compat.rb +29 -8
  76. data/lib/gosu/constants.rb +386 -0
  77. data/lib/gosu/ffi.rb +258 -0
  78. data/lib/gosu/font.rb +56 -0
  79. data/lib/gosu/gl_tex_info.rb +33 -0
  80. data/lib/gosu/gosu.rb +210 -0
  81. data/lib/gosu/image.rb +141 -0
  82. data/lib/gosu/numeric.rb +17 -0
  83. data/lib/gosu/preview.rb +6 -6
  84. data/lib/gosu/sample.rb +24 -0
  85. data/lib/gosu/song.rb +56 -0
  86. data/lib/gosu/text_input.rb +69 -0
  87. data/lib/gosu/window.rb +228 -0
  88. data/lib/gosu.rb +29 -8
  89. data/lib64/SDL2.dll +0 -0
  90. data/rdoc/gosu.rb +0 -2
  91. data/src/Audio.cpp +12 -12
  92. data/src/AudioFile.hpp +5 -4
  93. data/src/AudioFileAudioToolbox.cpp +8 -8
  94. data/src/AudioFileSDLSound.cpp +7 -10
  95. data/src/BinPacker.cpp +187 -0
  96. data/src/BinPacker.hpp +55 -0
  97. data/src/Bitmap.cpp +166 -144
  98. data/src/BitmapIO.cpp +60 -86
  99. data/src/Buffer.cpp +159 -0
  100. data/src/Color.cpp +75 -80
  101. data/src/Directories.cpp +47 -0
  102. data/src/DirectoriesUIKit.cpp +50 -0
  103. data/src/DrawOp.hpp +9 -4
  104. data/src/DrawOpQueue.hpp +2 -2
  105. data/src/Drawable.cpp +95 -0
  106. data/src/EmptyDrawable.hpp +38 -0
  107. data/src/FPS.cpp +31 -0
  108. data/src/Font.cpp +104 -74
  109. data/src/GosuGLView.cpp +14 -6
  110. data/src/GosuViewController.cpp +2 -10
  111. data/src/Graphics.cpp +60 -126
  112. data/src/GraphicsImpl.hpp +17 -47
  113. data/src/Image.cpp +41 -35
  114. data/src/Input.cpp +7 -8
  115. data/src/Macro.cpp +6 -6
  116. data/src/Macro.hpp +4 -4
  117. data/src/MarkupParser.cpp +5 -5
  118. data/src/Math.cpp +35 -22
  119. data/src/OffScreenTarget.cpp +53 -49
  120. data/src/OffScreenTarget.hpp +13 -11
  121. data/src/OpenGLContext.cpp +117 -0
  122. data/src/OpenGLContext.hpp +41 -0
  123. data/src/RenderState.hpp +21 -19
  124. data/src/Resolution.cpp +23 -21
  125. data/src/TexChunk.cpp +35 -80
  126. data/src/TexChunk.hpp +44 -35
  127. data/src/Text.cpp +1 -1
  128. data/src/TextBuilder.cpp +35 -21
  129. data/src/TextBuilder.hpp +6 -9
  130. data/src/Texture.cpp +62 -80
  131. data/src/Texture.hpp +25 -23
  132. data/src/TiledDrawable.cpp +150 -0
  133. data/src/TiledDrawable.hpp +47 -0
  134. data/src/TimingApple.cpp +1 -1
  135. data/src/Transform.cpp +45 -50
  136. data/src/TransformStack.hpp +16 -16
  137. data/src/TrueTypeFont.cpp +59 -51
  138. data/src/TrueTypeFont.hpp +6 -7
  139. data/src/TrueTypeFontApple.cpp +28 -19
  140. data/src/TrueTypeFontUnix.cpp +27 -23
  141. data/src/TrueTypeFontWin.cpp +30 -30
  142. data/src/Utility.cpp +84 -21
  143. data/src/UtilityWin.cpp +45 -0
  144. data/src/Window.cpp +92 -142
  145. data/src/WindowUIKit.cpp +14 -14
  146. metadata +72 -31
  147. data/include/Gosu/IO.hpp +0 -254
  148. data/include/Gosu/ImageData.hpp +0 -53
  149. data/include/Gosu/Inspection.hpp +0 -7
  150. data/lib/gosu/patches.rb +0 -66
  151. data/lib/gosu/run.rb +0 -20
  152. data/lib/gosu/swig_patches.rb +0 -110
  153. data/src/BlockAllocator.cpp +0 -131
  154. data/src/BlockAllocator.hpp +0 -32
  155. data/src/DirectoriesApple.cpp +0 -69
  156. data/src/DirectoriesUnix.cpp +0 -46
  157. data/src/DirectoriesWin.cpp +0 -65
  158. data/src/EmptyImageData.hpp +0 -52
  159. data/src/FileUnix.cpp +0 -99
  160. data/src/FileWin.cpp +0 -88
  161. data/src/IO.cpp +0 -60
  162. data/src/Iconv.hpp +0 -51
  163. data/src/Inspection.cpp +0 -27
  164. data/src/LargeImageData.cpp +0 -215
  165. data/src/LargeImageData.hpp +0 -39
  166. data/src/Log.hpp +0 -19
  167. data/src/RubyGosu.cxx +0 -13100
  168. data/src/RubyGosu.h +0 -49
  169. data/src/WinUtility.cpp +0 -61
  170. data/src/WinUtility.hpp +0 -27
@@ -1,47 +1,39 @@
1
1
  #pragma once
2
2
 
3
- #include <Gosu/Platform.hpp>
3
+ #include <compare>
4
4
  #include <cstdint>
5
+ #include <ostream>
5
6
 
6
7
  namespace Gosu
7
8
  {
8
- /// Represents an RGBA color value with 8 bit for each channel.
9
- /// Can be implicitly constructed from literals of the form 0xaarrggbb.
9
+ /// Color represents an RGBA 32-bit color value, using 8 bit for each channel.
10
+ /// Colors can be implicitly constructed from literals of the form 0xaarrggbb.
10
11
  struct Color
11
12
  {
12
- static const unsigned GL_FORMAT = 0x1908; // GL_RGBA
13
+ using Channel = std::uint8_t;
14
+ Channel red = 0, green = 0, blue = 0, alpha = 0;
13
15
 
14
- typedef std::uint8_t Channel;
16
+ Color() = default;
15
17
 
16
- Channel red, green, blue, alpha;
17
-
18
- constexpr Color()
19
- : red{0},
20
- green{0},
21
- blue{0},
22
- alpha{0}
23
- {
24
- }
25
-
26
- /// Conversion constructor for literals of the form 0xaarrggbb.
18
+ /// Implicit conversion constructor for literals of the form 0xaarrggbb.
27
19
  // NOLINTNEXTLINE: We want to allow implicit conversions.
28
- constexpr Color(std::uint32_t argb)
29
- : red{static_cast<Channel>(argb >> 16)},
30
- green{static_cast<Channel>(argb >> 8)},
31
- blue{static_cast<Channel>(argb >> 0)},
32
- alpha{static_cast<Channel>(argb >> 24)}
20
+ Color(std::uint32_t argb)
21
+ : red(argb >> 16),
22
+ green(argb >> 8),
23
+ blue(argb >> 0),
24
+ alpha(argb >> 24)
33
25
  {
34
26
  }
35
27
 
36
- constexpr Color(Channel red, Channel green, Channel blue)
37
- : red{red},
38
- green{green},
39
- blue{blue},
40
- alpha{255}
28
+ Color(Channel red, Channel green, Channel blue)
29
+ : red(red),
30
+ green(green),
31
+ blue(blue),
32
+ alpha(255)
41
33
  {
42
34
  }
43
35
 
44
- Color with_alpha(Channel new_alpha)
36
+ Color with_alpha(Channel new_alpha) const
45
37
  {
46
38
  Color result = *this;
47
39
  result.alpha = new_alpha;
@@ -49,13 +41,14 @@ namespace Gosu
49
41
  }
50
42
 
51
43
  /// Constructs a color from the given hue/saturation/value triple.
52
- /// Ranges of these values are given as 0..360, 0..1, and 0..1, respectively.
44
+ /// s and v will be clamped into the range 0...1, and h will be normalized to 0...360.
53
45
  static Color from_hsv(double h, double s, double v);
54
46
 
55
47
  /// Returns the hue of the color, in the usual range of 0..360.
56
48
  double hue() const;
57
49
 
58
50
  /// Changes the current color so hue() will return h.
51
+ /// Note: This is a no-op when called on a grey tone (saturation() == 0).
59
52
  void set_hue(double h);
60
53
 
61
54
  /// Returns the saturation of the color, in the range of 0..1.
@@ -73,7 +66,8 @@ namespace Gosu
73
66
  /// Returns the color in 0xaarrggbb representation.
74
67
  std::uint32_t argb() const { return alpha << 24 | red << 16 | green << 8 | blue; }
75
68
 
76
- /// Returns the color in 0x00bbggrr representation. Useful for Win32 programming.
69
+ /// Returns the color in 0xbbggrr representation. Useful for Win32 programming, as this
70
+ /// corresponds to the COLORREF type that can be created using the RGB() macro.
77
71
  std::uint32_t bgr() const { return blue << 16 | green << 8 | red; }
78
72
 
79
73
  /// Returns the color in 0xaabbggrr representation.
@@ -96,16 +90,13 @@ namespace Gosu
96
90
  static const Color FUCHSIA;
97
91
  /// Same as Color::AQUA.
98
92
  static const Color CYAN;
93
+
94
+ std::strong_ordering operator<=>(const Color&) const = default;
99
95
  };
100
96
 
101
97
  // Ensure that we can pass vectors of Gosu::Color straight to OpenGL and back.
102
98
  static_assert(sizeof(Color) == sizeof(std::uint32_t));
103
99
 
104
- #ifndef SWIG
105
- inline bool operator<(Color a, Color b) { return a.gl() < b.gl(); }
106
- inline bool operator==(Color a, Color b) { return a.gl() == b.gl(); }
107
- inline bool operator!=(Color a, Color b) { return a.gl() != b.gl(); }
108
-
109
100
  /// Interpolates linearly between two colors, with a given weight towards
110
101
  /// the second color.
111
102
  Color lerp(Color a, Color b, double t = 0.5);
@@ -113,5 +104,6 @@ namespace Gosu
113
104
  /// Combines two colors as if their channels were mapped to the 0..1 range
114
105
  /// and then multiplied with each other.
115
106
  Color multiply(Color a, Color b);
116
- #endif
107
+
108
+ std::ostream& operator<<(std::ostream& stream, Color color);
117
109
  }
@@ -6,38 +6,35 @@ namespace Gosu
6
6
  {
7
7
  /// Changes the current directory to the result of resource_prefix().
8
8
  void use_resource_directory();
9
-
10
- /// Prefix for a program's own resources.
11
- /// <ul>
12
- /// <li> Windows: The parent directory of the executable.
13
- /// <li> macOS, iOS: The 'Resources' directory inside the .app bundle.
14
- /// <li> Linux: The current directory (empty string).
15
- /// </ul>
16
- const std::string& resource_prefix();
17
-
18
- /// Prefix for shared resources of a group of programs, e.g. the game and its level editor.
9
+
10
+ /// Builds a filename for reading (not writing) game resources.
11
+ /// An image file can be loaded as e.g. Gosu::Image(Gosu::resource_path("gfx/image.png")).
12
+ ///
13
+ /// This function will use the following directory:
19
14
  /// <ul>
20
15
  /// <li> Windows: The parent directory of the executable.
21
- /// <li> macOS: The parent directory of the .app bundle.
16
+ /// <li> macOS, iOS: The 'Resources' directory inside the .app bundle, or the current directory
17
+ /// if this code is not being run from an .app bundle.
22
18
  /// <li> Linux: The current directory (empty string).
23
- /// </uil>
24
- const std::string& shared_resource_prefix();
25
-
26
- /// Prefix for user settings.
27
- /// <ul>
28
- /// <li> Windows: The same as %APPDATA%.
29
- /// <li> macOS: The user's Library/Preferences folder.
30
- /// <li> Linux: The home directory plus a trailing dot for hidden files.
31
19
  /// </ul>
32
- const std::string& user_settings_prefix();
33
-
34
- /// Prefix for user documents, e.g. saved games.
20
+ ///
21
+ /// Note: This uses SDL_GetBasePath internally. https://wiki.libsdl.org/SDL2/SDL_GetBasePath
22
+ std::string resource_path(const std::string& relative_filename = "");
23
+
24
+ /// Builds a filename for reading or writing game settings. This method will automatically
25
+ /// create all intermediate directories needed to save files at the returned path.
26
+ ///
27
+ /// Preferences might be saved using e.g.:
28
+ /// Gosu::save_file(buffer, Gosu::user_settings_path("MyStudio", "MyGame", "settings.ini")).
29
+ ///
30
+ /// This function will use the following directory:
35
31
  /// <ul>
36
- /// <li> Windows: The "My Documents" folder.
37
- /// <li> macOS: The user's "Documents" folder.
38
- /// <li> Linux: The home directory.
32
+ /// <li> Windows: The "organization/application" folder in %APPDATA%.
33
+ /// <li> macOS: "~/Library/Application Support/organization/application".
34
+ /// <li> Linux: "~.local/share/application".
39
35
  /// </ul>
40
- const std::string& user_documents_prefix();
41
-
42
- // TODO: Instead of re-inventing wheels here, we should wrap SDL_GetBasePath / SDL_GetPrefPath.
36
+ ///
37
+ /// Note: This uses SDL_GetPrefPath internally. https://wiki.libsdl.org/SDL2/SDL_GetPrefPath
38
+ std::string user_settings_path(const std::string& organization, const std::string& application,
39
+ const std::string& relative_filename = "");
43
40
  }
@@ -0,0 +1,58 @@
1
+ #pragma once
2
+
3
+ #include <Gosu/Fwd.hpp>
4
+ #include <Gosu/Color.hpp>
5
+ #include <Gosu/GraphicsBase.hpp>
6
+ #include <Gosu/Utility.hpp>
7
+ #include <cstdint>
8
+ #include <memory>
9
+
10
+ namespace Gosu
11
+ {
12
+ /// Returns the maximum size of an texture that will be allocated internally by Gosu.
13
+ /// Useful when extending Gosu using OpenGL.
14
+ const unsigned MAX_TEXTURE_SIZE = 1024;
15
+
16
+ /// Contains information about the underlying OpenGL texture and the u/v space used for image
17
+ /// data. Can be retrieved from some drawables to use them in OpenGL operations.
18
+ struct GLTexInfo
19
+ {
20
+ /// This uses std::uint32_t instead of GLuint to avoid publicly including OpenGL headers.
21
+ /// Both types must be the same because GLuint is guaranteed to be an unsigned 32-bit type.
22
+ std::uint32_t tex_name;
23
+ double left, right, top, bottom;
24
+ };
25
+
26
+ /// Abstract base class for a rectangular thing that can be drawn.
27
+ /// Instances are usually created through Graphics::create_drawable and used to implement
28
+ /// drawing primitives like Image, which then provide a more convenient drawing interface.
29
+ class Drawable : private Noncopyable
30
+ {
31
+ public:
32
+ Drawable() = default;
33
+ virtual ~Drawable() = default;
34
+
35
+ virtual int width() const = 0;
36
+
37
+ virtual int height() const = 0;
38
+
39
+ virtual void draw(double x1, double y1, Color c1, //
40
+ double x2, double y2, Color c2, //
41
+ double x3, double y3, Color c3, //
42
+ double x4, double y4, Color c4, //
43
+ ZPos z, BlendMode mode) const
44
+ = 0;
45
+
46
+ virtual const GLTexInfo* gl_tex_info() const = 0;
47
+
48
+ virtual Bitmap to_bitmap() const = 0;
49
+
50
+ virtual std::unique_ptr<Drawable> subimage(const Rect& rect) const = 0;
51
+
52
+ virtual void insert(const Bitmap& bitmap, int x, int y) = 0;
53
+ };
54
+
55
+ /// Turns a portion of a bitmap into something that can be drawn, typically a TexChunk instance.
56
+ std::unique_ptr<Drawable> create_drawable(const Bitmap& source, const Rect& source_rect,
57
+ unsigned image_flags);
58
+ }
@@ -7,6 +7,7 @@
7
7
  #include <Gosu/Text.hpp>
8
8
  #include <memory>
9
9
  #include <string>
10
+ #include <string_view>
10
11
 
11
12
  namespace Gosu
12
13
  {
@@ -22,11 +23,11 @@ namespace Gosu
22
23
  /// @param height Height of the font, in pixels.
23
24
  /// @param font_flags Flags used to render individual characters of the font (FontFlags enum).
24
25
  /// @param image_flags Flags used to render individual characters of the font (ImageFlags enum).
25
- explicit Font(int height, const std::string& name = default_font_name(),
26
+ explicit Font(int height, std::string_view name = default_font_name(),
26
27
  unsigned font_flags = 0, unsigned image_flags = 0);
27
28
 
28
- /// Returns the name of the font that was used to create it, i.e. the filename, nor the
29
- /// internal TTF name. (TODO: Why not?)
29
+ /// Returns the name of the font that was used to create it. If the font was loaded from a
30
+ /// filename, the same filename string will be returned here unmodified.
30
31
  const std::string& name() const;
31
32
 
32
33
  /// Returns the height of the font, in pixels.
@@ -69,8 +70,8 @@ namespace Gosu
69
70
 
70
71
  /// Maps a letter to a specific image, instead of generating one using Gosu's built-in text
71
72
  /// rendering.
72
- void set_image(std::string codepoint, unsigned font_flags, const Gosu::Image& image);
73
+ void set_image(std::string_view codepoint, unsigned font_flags, const Gosu::Image& image);
73
74
  /// A shortcut for mapping a character to an image regardless of font_flags.
74
- void set_image(std::string codepoint, const Gosu::Image& image);
75
+ void set_image(std::string_view codepoint, const Gosu::Image& image);
75
76
  };
76
77
  }
data/include/Gosu/Fwd.hpp CHANGED
@@ -6,17 +6,15 @@ namespace Gosu
6
6
  class Buffer;
7
7
  class Channel;
8
8
  struct Color;
9
- class File;
10
9
  class Font;
11
- class Graphics;
12
10
  class Image;
13
- class ImageData;
11
+ class Drawable;
14
12
  class Input;
15
- class Reader;
16
- class Resource;
13
+ struct Rect;
17
14
  class Sample;
18
15
  class Song;
19
16
  class TextInput;
17
+ struct Transform;
18
+ class Viewport;
20
19
  class Window;
21
- class Writer;
22
20
  }
@@ -1,6 +1,6 @@
1
- /// \mainpage Gosu C++ Documentation
1
+ /// \mainpage Gosu: C++ Interface Reference
2
2
  ///
3
- /// These pages serve as a reference on the C++ interface of Gosu. For a higher-level
3
+ /// These pages serve as a reference for the C++ interface of Gosu. For a higher-level
4
4
  /// discussion of concepts and ideas behind the library, see the Wiki entries linked
5
5
  /// from the official website, https://www.libgosu.org/.
6
6
 
@@ -8,20 +8,20 @@
8
8
 
9
9
  #include <Gosu/Audio.hpp>
10
10
  #include <Gosu/Bitmap.hpp>
11
+ #include <Gosu/Buffer.hpp>
11
12
  #include <Gosu/Color.hpp>
12
13
  #include <Gosu/Directories.hpp>
14
+ #include <Gosu/Drawable.hpp>
13
15
  #include <Gosu/Font.hpp>
14
16
  #include <Gosu/Graphics.hpp>
15
17
  #include <Gosu/Image.hpp>
16
- #include <Gosu/ImageData.hpp>
17
18
  #include <Gosu/Input.hpp>
18
- #include <Gosu/Inspection.hpp>
19
- #include <Gosu/IO.hpp>
20
19
  #include <Gosu/Math.hpp>
21
20
  #include <Gosu/Platform.hpp>
22
21
  #include <Gosu/Text.hpp>
23
22
  #include <Gosu/TextInput.hpp>
24
23
  #include <Gosu/Timing.hpp>
24
+ #include <Gosu/Transform.hpp>
25
25
  #include <Gosu/Utility.hpp>
26
26
  #include <Gosu/Version.hpp>
27
27
  #include <Gosu/Window.hpp>
@@ -3,96 +3,86 @@
3
3
  #include <Gosu/Fwd.hpp>
4
4
  #include <Gosu/Color.hpp>
5
5
  #include <Gosu/GraphicsBase.hpp>
6
+ #include <Gosu/Utility.hpp>
6
7
  #include <functional>
7
8
  #include <memory>
8
9
 
9
10
  namespace Gosu
10
11
  {
11
- struct DrawOp;
12
-
13
- /// Returns the maximum size of an texture that will be allocated internally by Gosu.
14
- /// Useful when extending Gosu using OpenGL.
15
- const unsigned MAX_TEXTURE_SIZE = 1024;
16
-
17
- /// Serves as the target of all drawing and provides primitive drawing functionality.
18
- /// Usually created internally by Gosu::Window.
19
- class Graphics
12
+ /// Serves as the target of all drawing. Usually created internally by Gosu::Window.
13
+ class Viewport : private Noncopyable
20
14
  {
21
15
  struct Impl;
22
16
  std::unique_ptr<Impl> m_impl;
23
17
 
24
18
  public:
25
- Graphics(unsigned physical_width, unsigned physical_height);
26
- ~Graphics();
19
+ Viewport(int physical_width, int physical_height);
20
+ ~Viewport();
27
21
 
28
- void set_resolution(unsigned logical_width, unsigned logical_height,
22
+ void set_resolution(int logical_width, int logical_height, //
29
23
  double black_bar_width = 0, double black_bar_height = 0);
30
24
 
31
- unsigned width() const;
32
- unsigned height() const;
25
+ int width() const;
26
+ int height() const;
33
27
 
34
28
  /// Prepares the graphics object for drawing and then runs the rendering code in f.
35
29
  /// Nothing must be drawn outside of frame() and record().
36
30
  void frame(const std::function<void()>& f);
37
31
 
38
- /// Flushes the Z queue to the screen and starts a new one.
39
- /// This can be useful to separate the Z queues of two parts of the game, e.g. the two
40
- /// halves of a game that runs in split-screen mode.
41
- static void flush();
32
+ /// For internal use only.
33
+ void set_physical_resolution(int physical_width, int physical_height);
42
34
 
43
- /// Finishes all pending Gosu drawing operations and executes the code in f in a clean
44
- /// OpenGL environment.
45
- static void gl(const std::function<void()>& f);
35
+ friend void gl(const std::function<void()>&);
36
+ friend void gl(ZPos, const std::function<void()>&);
37
+ friend void clip_to(double, double, double, double, const std::function<void()>&);
38
+ };
46
39
 
47
- /// Schedules a custom GL functor to be executed at a certain Z level.
48
- /// The functor f is run in a clean GL context.
49
- /// Note: You may not call any Gosu rendering functions from within the functor.
50
- static void gl(ZPos z, const std::function<void()>& f);
40
+ /// Flushes the Z queue to the screen and starts a new one.
41
+ /// This can be useful to separate the Z queues of two parts of the game, e.g. the two
42
+ /// halves of a game that runs in split-screen mode.
43
+ void flush();
51
44
 
52
- /// Renders everything drawn in f clipped to a rectangle on the screen.
53
- static void clip_to(double x, double y, double width, double height,
54
- const std::function<void()>& f);
45
+ /// Finishes all pending Gosu drawing operations and executes the code in f in a clean
46
+ /// OpenGL environment.
47
+ void gl(const std::function<void()>& f);
55
48
 
56
- /// Renders everything drawn in f onto a new Image of size (width, height).
57
- /// @param image_flags Pass Gosu::IF_RETRO if you do not want the resulting image to use
58
- /// interpolation when it is scaled or rotated.
59
- static Gosu::Image render(int width, int height, const std::function<void()>& f,
60
- unsigned image_flags = 0);
49
+ /// Schedules a custom GL functor to be executed at a certain Z level.
50
+ /// The functor f is run in a clean GL context.
51
+ /// Note: You may not call any Gosu rendering functions from within the functor.
52
+ void gl(ZPos z, const std::function<void()>& f);
61
53
 
62
- /// Records a macro and returns it as an Image.
63
- static Gosu::Image record(int width, int height, const std::function<void()>& f);
54
+ /// Renders everything drawn in f clipped to a rectangle on the screen.
55
+ void clip_to(double x, double y, double width, double height, const std::function<void()>& f);
64
56
 
65
- /// Pushes one transformation onto the transformation stack.
66
- static void transform(const Transform& transform, const std::function<void()>& f);
57
+ /// Renders everything drawn in f onto a new Image of size (width, height).
58
+ /// @param image_flags Pass Gosu::IF_RETRO if you do not want the resulting image to use
59
+ /// interpolation when it is scaled or rotated.
60
+ Gosu::Image render(int width, int height, const std::function<void()>& f,
61
+ unsigned image_flags = 0);
67
62
 
68
- /// Draws a line from one point to another (last pixel exclusive).
69
- /// Note: OpenGL lines are not reliable at all and may have a missing pixel at the start
70
- /// or end point. Please only use this for debugging purposes. Otherwise, use a quad or
71
- /// image to simulate lines, or contribute a better draw_line to Gosu.
72
- static void draw_line(double x1, double y1, Color c1, double x2, double y2, Color c2,
73
- ZPos z, BlendMode mode = BM_DEFAULT);
63
+ /// Records a macro and returns it as an Image.
64
+ Gosu::Image record(int width, int height, const std::function<void()>& f);
74
65
 
75
- static void draw_triangle(double x1, double y1, Color c1, //
76
- double x2, double y2, Color c2, //
77
- double x3, double y3, Color c3, //
78
- ZPos z, BlendMode mode = BM_DEFAULT);
66
+ /// Pushes one transformation onto the transformation stack.
67
+ void transform(const Transform& transform, const std::function<void()>& f);
79
68
 
80
- static void draw_quad(double x1, double y1, Color c1, double x2, double y2, Color c2,
81
- double x3, double y3, Color c3, double x4, double y4, Color c4,
82
- ZPos z, BlendMode mode = BM_DEFAULT);
69
+ /// Draws a line from one point to another (last pixel exclusive).
70
+ /// Note: OpenGL lines are not reliable at all and may have a missing pixel at the start
71
+ /// or end point. Please only use this for debugging purposes. Otherwise, use a quad or
72
+ /// image to simulate lines, or contribute a better draw_line to Gosu.
73
+ void draw_line(double x1, double y1, Color c1, double x2, double y2, Color c2, ZPos z,
74
+ BlendMode mode = BM_DEFAULT);
83
75
 
84
- static void draw_rect(double x, double y, double width, double height, Color c, ZPos z,
85
- BlendMode mode = BM_DEFAULT);
76
+ void draw_triangle(double x1, double y1, Color c1, //
77
+ double x2, double y2, Color c2, //
78
+ double x3, double y3, Color c3, //
79
+ ZPos z, BlendMode mode = BM_DEFAULT);
86
80
 
87
- /// For internal use only.
88
- void set_physical_resolution(unsigned physical_width, unsigned physical_height);
81
+ void draw_quad(double x1, double y1, Color c1, double x2, double y2, Color c2, double x3,
82
+ double y3, Color c3, double x4, double y4, Color c4, ZPos z,
83
+ BlendMode mode = BM_DEFAULT);
89
84
 
90
- /// For internal use only.
91
- static void schedule_draw_op(const DrawOp& op);
85
+ void draw_rect(double x, double y, double width, double height, Color c, ZPos z,
86
+ BlendMode mode = BM_DEFAULT);
92
87
 
93
- /// Turns a portion of a bitmap into something that can be drawn on a Graphics object.
94
- static std::unique_ptr<ImageData> create_image(const Bitmap& src, unsigned src_x,
95
- unsigned src_y, unsigned src_width,
96
- unsigned src_height, unsigned image_flags);
97
- };
98
88
  }
@@ -1,12 +1,9 @@
1
1
  #pragma once
2
2
 
3
- #include <Gosu/Platform.hpp>
4
- #include <array>
5
-
6
3
  namespace Gosu
7
4
  {
8
5
  /// Represents the Z position of something drawn with Gosu's graphics system.
9
- /// Draw calls with higher ZPos values will cover those with a lower ZPos value.
6
+ /// Images drawn with higher ZPos values will cover those with a lower ZPos value.
10
7
  typedef double ZPos;
11
8
 
12
9
  /// Determines the way pixel colors are combined when images overlap.
@@ -56,11 +53,4 @@ namespace Gosu
56
53
  /// Apply nearest-neighbor interpolation when scaling this image up or down.
57
54
  IF_RETRO = 1 << 5
58
55
  };
59
-
60
- typedef std::array<double, 16> Transform;
61
- Transform translate(double x, double y);
62
- Transform rotate(double angle, double around_x = 0, double around_y = 0);
63
- Transform scale(double factor);
64
- Transform scale(double scale_x, double scale_y, double from_x = 0, double from_y = 0);
65
- Transform concat(const Transform& lhs, const Transform& rhs);
66
56
  }
@@ -12,7 +12,7 @@ namespace Gosu
12
12
  /// Provides functionality for drawing rectangular images.
13
13
  class Image
14
14
  {
15
- std::shared_ptr<ImageData> m_data;
15
+ std::shared_ptr<Drawable> m_drawable;
16
16
 
17
17
  public:
18
18
  /// Creates an empty image. It will have a width and height of 0, and not contain anything.
@@ -28,18 +28,17 @@ namespace Gosu
28
28
  ///
29
29
  /// A color key of #ff00ff is automatically applied to BMP image files.
30
30
  /// For more flexibility, use the corresponding constructor that uses a Bitmap object.
31
- Image(const std::string& filename, int src_x, int src_y, int src_width, int src_height,
31
+ Image(const std::string& filename, const Rect& source_rect,
32
32
  unsigned image_flags = IF_SMOOTH);
33
33
 
34
34
  /// Converts the given bitmap into an image.
35
35
  explicit Image(const Bitmap& source, unsigned image_flags = IF_SMOOTH);
36
36
 
37
37
  /// Converts a portion of the given bitmap into an image.
38
- Image(const Bitmap& source, int src_x, int src_y, int src_width, int src_height,
39
- unsigned image_flags = IF_SMOOTH);
38
+ Image(const Bitmap& source, const Rect& source_rect, unsigned image_flags = IF_SMOOTH);
40
39
 
41
- /// Creates an Image from a user-supplied instance of the ImageData interface.
42
- explicit Image(std::unique_ptr<ImageData>&& data);
40
+ /// Creates an Image from a user-supplied instance of the Drawable interface.
41
+ explicit Image(std::unique_ptr<Drawable> data);
43
42
 
44
43
  unsigned width() const;
45
44
  unsigned height() const;
@@ -61,25 +60,23 @@ namespace Gosu
61
60
  double center_y = 0.5, double scale_x = 1, double scale_y = 1,
62
61
  Color c = Color::WHITE, BlendMode mode = BM_DEFAULT) const;
63
62
 
64
- #ifndef SWIG
65
63
  /// Provides access to the underlying image data object.
66
- ImageData& data() const;
67
- #endif
64
+ Drawable& drawable() const;
68
65
  };
69
66
 
70
- #ifndef SWIG
71
67
  /// Convenience function that slices an image file into a grid and creates images from them.
72
68
  /// @param tile_width If positive, specifies the width of one tile in pixels.
73
69
  /// If negative, the bitmap is divided into -tile_width rows.
74
70
  /// @param tile_height See tile_width.
75
- std::vector<Gosu::Image> load_tiles(const Bitmap& bmp, int tile_width, int tile_height,
71
+ std::vector<Gosu::Image> load_tiles(const Bitmap& bitmap, //
72
+ int tile_width, int tile_height,
76
73
  unsigned image_flags = IF_SMOOTH);
77
74
 
78
75
  /// Convenience function that slices a bitmap into a grid and creates images from them.
79
76
  /// @param tile_width If positive, specifies the width of one tile in pixels.
80
77
  /// If negative, the bitmap is divided into -tile_width rows.
81
78
  /// @param tile_height See tile_width.
82
- std::vector<Gosu::Image> load_tiles(const std::string& filename, int tile_width,
83
- int tile_height, unsigned image_flags = IF_SMOOTH);
84
- #endif
79
+ std::vector<Gosu::Image> load_tiles(const std::string& filename, //
80
+ int tile_width, int tile_height,
81
+ unsigned image_flags = IF_SMOOTH);
85
82
  }