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.
- checksums.yaml +4 -4
- data/COPYING +2 -1
- data/dependencies/SDL/include/SDL_atomic.h +2 -3
- data/dependencies/SDL/include/SDL_audio.h +7 -7
- data/dependencies/SDL/include/SDL_blendmode.h +1 -1
- data/dependencies/SDL/include/SDL_endian.h +3 -3
- data/dependencies/SDL/include/SDL_gamecontroller.h +4 -4
- data/dependencies/SDL/include/SDL_hints.h +72 -28
- data/dependencies/SDL/include/SDL_joystick.h +8 -5
- data/dependencies/SDL/include/SDL_keycode.h +1 -1
- data/dependencies/SDL/include/SDL_main.h +7 -0
- data/dependencies/SDL/include/SDL_mouse.h +6 -7
- data/dependencies/SDL/include/SDL_mutex.h +79 -5
- data/dependencies/SDL/include/SDL_opengl_glext.h +5 -1
- data/dependencies/SDL/include/SDL_power.h +7 -8
- data/dependencies/SDL/include/SDL_render.h +5 -0
- data/dependencies/SDL/include/SDL_revision.h +2 -2
- data/dependencies/SDL/include/SDL_sensor.h +1 -1
- data/dependencies/SDL/include/SDL_stdinc.h +19 -11
- data/dependencies/SDL/include/SDL_thread.h +2 -2
- data/dependencies/SDL/include/SDL_version.h +2 -2
- data/dependencies/SDL/include/SDL_video.h +30 -2
- data/dependencies/SDL/include/begin_code.h +7 -7
- data/dependencies/SDL/include/close_code.h +2 -2
- data/dependencies/SDL/lib/x64/libSDL2.dll.a +0 -0
- data/dependencies/SDL/lib/x86/libSDL2.dll.a +0 -0
- data/dependencies/SDL_sound/SDL_sound.h +1 -1
- data/dependencies/SDL_sound/dr_flac.h +48 -23
- data/dependencies/SDL_sound/dr_mp3.h +34 -14
- data/dependencies/SDL_sound/stb_vorbis.h +3 -2
- data/dependencies/mojoAL/mojoal.c +1 -1
- data/ext/{gosu → gosu-ffi}/extconf.rb +34 -33
- data/ext/gosu-ffi/gosu-ffi.def +464 -0
- data/ffi/Gosu.cpp +307 -0
- data/ffi/Gosu.h +84 -0
- data/ffi/Gosu_Channel.cpp +62 -0
- data/ffi/Gosu_Channel.h +17 -0
- data/ffi/Gosu_Color.cpp +132 -0
- data/ffi/Gosu_Color.h +31 -0
- data/ffi/Gosu_Constants.cpp +334 -0
- data/ffi/Gosu_FFI.h +34 -0
- data/ffi/Gosu_FFI_internal.h +161 -0
- data/ffi/Gosu_Font.cpp +92 -0
- data/ffi/Gosu_Font.h +32 -0
- data/ffi/Gosu_Image.cpp +206 -0
- data/ffi/Gosu_Image.h +60 -0
- data/ffi/Gosu_Sample.cpp +29 -0
- data/ffi/Gosu_Sample.h +14 -0
- data/ffi/Gosu_Song.cpp +69 -0
- data/ffi/Gosu_Song.h +18 -0
- data/ffi/Gosu_TextInput.cpp +94 -0
- data/ffi/Gosu_TextInput.h +25 -0
- data/ffi/Gosu_Window.cpp +314 -0
- data/ffi/Gosu_Window.h +78 -0
- data/include/Gosu/Audio.hpp +6 -11
- data/include/Gosu/Bitmap.hpp +38 -53
- data/include/Gosu/Buffer.hpp +54 -0
- data/include/Gosu/Color.hpp +27 -35
- data/include/Gosu/Directories.hpp +25 -28
- data/include/Gosu/Drawable.hpp +58 -0
- data/include/Gosu/Font.hpp +6 -5
- data/include/Gosu/Fwd.hpp +4 -6
- data/include/Gosu/Gosu.hpp +5 -5
- data/include/Gosu/Graphics.hpp +51 -61
- data/include/Gosu/GraphicsBase.hpp +1 -11
- data/include/Gosu/Image.hpp +11 -14
- data/include/Gosu/Math.hpp +50 -72
- data/include/Gosu/Transform.hpp +32 -0
- data/include/Gosu/Utility.hpp +51 -1
- data/include/Gosu/Version.hpp +3 -3
- data/include/Gosu/Window.hpp +15 -9
- data/lib/SDL2.dll +0 -0
- data/lib/gosu/channel.rb +49 -0
- data/lib/gosu/color.rb +150 -0
- data/lib/gosu/compat.rb +29 -8
- data/lib/gosu/constants.rb +386 -0
- data/lib/gosu/ffi.rb +258 -0
- data/lib/gosu/font.rb +56 -0
- data/lib/gosu/gl_tex_info.rb +33 -0
- data/lib/gosu/gosu.rb +210 -0
- data/lib/gosu/image.rb +141 -0
- data/lib/gosu/numeric.rb +17 -0
- data/lib/gosu/preview.rb +6 -6
- data/lib/gosu/sample.rb +24 -0
- data/lib/gosu/song.rb +56 -0
- data/lib/gosu/text_input.rb +69 -0
- data/lib/gosu/window.rb +228 -0
- data/lib/gosu.rb +29 -8
- data/lib64/SDL2.dll +0 -0
- data/rdoc/gosu.rb +0 -2
- data/src/Audio.cpp +12 -12
- data/src/AudioFile.hpp +5 -4
- data/src/AudioFileAudioToolbox.cpp +8 -8
- data/src/AudioFileSDLSound.cpp +7 -10
- data/src/BinPacker.cpp +187 -0
- data/src/BinPacker.hpp +55 -0
- data/src/Bitmap.cpp +166 -144
- data/src/BitmapIO.cpp +60 -86
- data/src/Buffer.cpp +159 -0
- data/src/Color.cpp +75 -80
- data/src/Directories.cpp +47 -0
- data/src/DirectoriesUIKit.cpp +50 -0
- data/src/DrawOp.hpp +9 -4
- data/src/DrawOpQueue.hpp +2 -2
- data/src/Drawable.cpp +95 -0
- data/src/EmptyDrawable.hpp +38 -0
- data/src/FPS.cpp +31 -0
- data/src/Font.cpp +104 -74
- data/src/GosuGLView.cpp +14 -6
- data/src/GosuViewController.cpp +2 -10
- data/src/Graphics.cpp +60 -126
- data/src/GraphicsImpl.hpp +17 -47
- data/src/Image.cpp +41 -35
- data/src/Input.cpp +7 -8
- data/src/Macro.cpp +6 -6
- data/src/Macro.hpp +4 -4
- data/src/MarkupParser.cpp +5 -5
- data/src/Math.cpp +35 -22
- data/src/OffScreenTarget.cpp +53 -49
- data/src/OffScreenTarget.hpp +13 -11
- data/src/OpenGLContext.cpp +117 -0
- data/src/OpenGLContext.hpp +41 -0
- data/src/RenderState.hpp +21 -19
- data/src/Resolution.cpp +23 -21
- data/src/TexChunk.cpp +35 -80
- data/src/TexChunk.hpp +44 -35
- data/src/Text.cpp +1 -1
- data/src/TextBuilder.cpp +35 -21
- data/src/TextBuilder.hpp +6 -9
- data/src/Texture.cpp +62 -80
- data/src/Texture.hpp +25 -23
- data/src/TiledDrawable.cpp +150 -0
- data/src/TiledDrawable.hpp +47 -0
- data/src/TimingApple.cpp +1 -1
- data/src/Transform.cpp +45 -50
- data/src/TransformStack.hpp +16 -16
- data/src/TrueTypeFont.cpp +59 -51
- data/src/TrueTypeFont.hpp +6 -7
- data/src/TrueTypeFontApple.cpp +28 -19
- data/src/TrueTypeFontUnix.cpp +27 -23
- data/src/TrueTypeFontWin.cpp +30 -30
- data/src/Utility.cpp +84 -21
- data/src/UtilityWin.cpp +45 -0
- data/src/Window.cpp +92 -142
- data/src/WindowUIKit.cpp +14 -14
- metadata +72 -31
- data/include/Gosu/IO.hpp +0 -254
- data/include/Gosu/ImageData.hpp +0 -53
- data/include/Gosu/Inspection.hpp +0 -7
- data/lib/gosu/patches.rb +0 -66
- data/lib/gosu/run.rb +0 -20
- data/lib/gosu/swig_patches.rb +0 -110
- data/src/BlockAllocator.cpp +0 -131
- data/src/BlockAllocator.hpp +0 -32
- data/src/DirectoriesApple.cpp +0 -69
- data/src/DirectoriesUnix.cpp +0 -46
- data/src/DirectoriesWin.cpp +0 -65
- data/src/EmptyImageData.hpp +0 -52
- data/src/FileUnix.cpp +0 -99
- data/src/FileWin.cpp +0 -88
- data/src/IO.cpp +0 -60
- data/src/Iconv.hpp +0 -51
- data/src/Inspection.cpp +0 -27
- data/src/LargeImageData.cpp +0 -215
- data/src/LargeImageData.hpp +0 -39
- data/src/Log.hpp +0 -19
- data/src/RubyGosu.cxx +0 -13100
- data/src/RubyGosu.h +0 -49
- data/src/WinUtility.cpp +0 -61
- data/src/WinUtility.hpp +0 -27
data/include/Gosu/Color.hpp
CHANGED
@@ -1,47 +1,39 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
|
-
#include <
|
3
|
+
#include <compare>
|
4
4
|
#include <cstdint>
|
5
|
+
#include <ostream>
|
5
6
|
|
6
7
|
namespace Gosu
|
7
8
|
{
|
8
|
-
///
|
9
|
-
///
|
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
|
-
|
13
|
+
using Channel = std::uint8_t;
|
14
|
+
Channel red = 0, green = 0, blue = 0, alpha = 0;
|
13
15
|
|
14
|
-
|
16
|
+
Color() = default;
|
15
17
|
|
16
|
-
|
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
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
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
|
-
///
|
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
|
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
|
-
|
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
|
-
///
|
11
|
-
///
|
12
|
-
///
|
13
|
-
///
|
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
|
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
|
-
|
33
|
-
|
34
|
-
|
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 "
|
37
|
-
/// <li> macOS:
|
38
|
-
/// <li> Linux:
|
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
|
-
|
41
|
-
|
42
|
-
|
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
|
+
}
|
data/include/Gosu/Font.hpp
CHANGED
@@ -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,
|
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
|
29
|
-
///
|
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::
|
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::
|
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
|
11
|
+
class Drawable;
|
14
12
|
class Input;
|
15
|
-
|
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
|
}
|
data/include/Gosu/Gosu.hpp
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
/// \mainpage Gosu C++
|
1
|
+
/// \mainpage Gosu: C++ Interface Reference
|
2
2
|
///
|
3
|
-
/// These pages serve as a reference
|
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>
|
data/include/Gosu/Graphics.hpp
CHANGED
@@ -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
|
-
|
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
|
-
|
26
|
-
~
|
19
|
+
Viewport(int physical_width, int physical_height);
|
20
|
+
~Viewport();
|
27
21
|
|
28
|
-
void set_resolution(
|
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
|
-
|
32
|
-
|
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
|
-
///
|
39
|
-
|
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
|
-
|
44
|
-
|
45
|
-
|
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
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
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
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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
|
-
|
63
|
-
|
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
|
-
|
66
|
-
|
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
|
-
|
69
|
-
|
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
|
-
|
76
|
-
|
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
|
-
|
81
|
-
|
82
|
-
|
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
|
-
|
85
|
-
|
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
|
-
|
88
|
-
|
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
|
-
|
91
|
-
|
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
|
-
///
|
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
|
}
|
data/include/Gosu/Image.hpp
CHANGED
@@ -12,7 +12,7 @@ namespace Gosu
|
|
12
12
|
/// Provides functionality for drawing rectangular images.
|
13
13
|
class Image
|
14
14
|
{
|
15
|
-
std::shared_ptr<
|
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,
|
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,
|
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
|
42
|
-
explicit Image(std::unique_ptr<
|
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
|
-
|
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&
|
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,
|
83
|
-
int
|
84
|
-
|
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
|
}
|