gosu 1.1.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/COPYING +1 -1
- data/dependencies/SDL/include/SDL.h +108 -14
- data/dependencies/SDL/include/SDL_assert.h +81 -50
- data/dependencies/SDL/include/SDL_atomic.h +135 -35
- data/dependencies/SDL/include/SDL_audio.h +960 -355
- data/dependencies/SDL/include/SDL_bits.h +11 -6
- data/dependencies/SDL/include/SDL_blendmode.h +91 -14
- data/dependencies/SDL/include/SDL_clipboard.h +30 -7
- data/dependencies/SDL/include/SDL_config.h +277 -27
- data/dependencies/SDL/include/SDL_config_android.h +13 -38
- data/dependencies/SDL/include/SDL_config_iphoneos.h +21 -62
- data/dependencies/SDL/include/SDL_config_macosx.h +23 -92
- data/dependencies/SDL/include/SDL_config_minimal.h +1 -4
- data/dependencies/SDL/include/SDL_config_pandora.h +15 -22
- data/dependencies/SDL/include/SDL_config_psp.h +16 -37
- data/dependencies/SDL/include/SDL_config_windows.h +28 -91
- data/dependencies/SDL/include/SDL_config_winrt.h +33 -61
- data/dependencies/SDL/include/SDL_config_wiz.h +28 -56
- data/dependencies/SDL/include/SDL_copying.h +1 -1
- data/dependencies/SDL/include/SDL_cpuinfo.h +331 -71
- data/dependencies/SDL/include/SDL_egl.h +906 -280
- data/dependencies/SDL/include/SDL_endian.h +101 -47
- data/dependencies/SDL/include/SDL_error.h +70 -19
- data/dependencies/SDL/include/SDL_events.h +387 -79
- data/dependencies/SDL/include/SDL_filesystem.h +73 -64
- data/dependencies/SDL/include/SDL_gamecontroller.h +585 -125
- data/dependencies/SDL/include/SDL_gesture.h +36 -6
- data/dependencies/SDL/include/SDL_haptic.h +304 -210
- data/dependencies/SDL/include/SDL_hidapi.h +451 -0
- data/dependencies/SDL/include/SDL_hints.h +1286 -897
- data/dependencies/SDL/include/SDL_joystick.h +577 -130
- data/dependencies/SDL/include/SDL_keyboard.h +162 -63
- data/dependencies/SDL/include/SDL_keycode.h +7 -5
- data/dependencies/SDL/include/SDL_loadso.h +42 -8
- data/dependencies/SDL/include/SDL_locale.h +34 -32
- data/dependencies/SDL/include/SDL_log.h +212 -19
- data/dependencies/SDL/include/SDL_main.h +72 -17
- data/dependencies/SDL/include/SDL_messagebox.h +70 -23
- data/dependencies/SDL/include/SDL_metal.h +27 -32
- data/dependencies/SDL/include/SDL_misc.h +19 -15
- data/dependencies/SDL/include/SDL_mouse.h +262 -110
- data/dependencies/SDL/include/SDL_mutex.h +286 -66
- data/dependencies/SDL/include/SDL_name.h +1 -1
- data/dependencies/SDL/include/SDL_opengl.h +1 -1
- data/dependencies/SDL/include/SDL_opengles.h +1 -1
- data/dependencies/SDL/include/SDL_opengles2.h +2 -2
- data/dependencies/SDL/include/SDL_pixels.h +199 -34
- data/dependencies/SDL/include/SDL_platform.h +39 -2
- data/dependencies/SDL/include/SDL_power.h +23 -10
- data/dependencies/SDL/include/SDL_quit.h +1 -1
- data/dependencies/SDL/include/SDL_rect.h +78 -28
- data/dependencies/SDL/include/SDL_render.h +1204 -472
- data/dependencies/SDL/include/SDL_revision.h +2 -2
- data/dependencies/SDL/include/SDL_rwops.h +605 -33
- data/dependencies/SDL/include/SDL_scancode.h +1 -1
- data/dependencies/SDL/include/SDL_sensor.h +76 -42
- data/dependencies/SDL/include/SDL_shape.h +38 -27
- data/dependencies/SDL/include/SDL_stdinc.h +96 -24
- data/dependencies/SDL/include/SDL_surface.h +571 -139
- data/dependencies/SDL/include/SDL_system.h +339 -101
- data/dependencies/SDL/include/SDL_syswm.h +50 -20
- data/dependencies/SDL/include/SDL_test.h +1 -1
- data/dependencies/SDL/include/SDL_test_assert.h +2 -2
- data/dependencies/SDL/include/SDL_test_common.h +23 -6
- data/dependencies/SDL/include/SDL_test_compare.h +1 -1
- data/dependencies/SDL/include/SDL_test_crc32.h +1 -1
- data/dependencies/SDL/include/SDL_test_font.h +3 -3
- data/dependencies/SDL/include/SDL_test_fuzzer.h +28 -26
- data/dependencies/SDL/include/SDL_test_harness.h +6 -6
- data/dependencies/SDL/include/SDL_test_images.h +1 -1
- data/dependencies/SDL/include/SDL_test_log.h +1 -1
- data/dependencies/SDL/include/SDL_test_md5.h +1 -1
- data/dependencies/SDL/include/SDL_test_memory.h +1 -1
- data/dependencies/SDL/include/SDL_test_random.h +2 -2
- data/dependencies/SDL/include/SDL_thread.h +226 -128
- data/dependencies/SDL/include/SDL_timer.h +129 -22
- data/dependencies/SDL/include/SDL_touch.h +48 -8
- data/dependencies/SDL/include/SDL_types.h +1 -1
- data/dependencies/SDL/include/SDL_version.h +72 -46
- data/dependencies/SDL/include/SDL_video.h +1266 -460
- data/dependencies/SDL/include/SDL_vulkan.h +100 -161
- data/dependencies/SDL/include/begin_code.h +22 -1
- data/dependencies/SDL/include/close_code.h +1 -1
- 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.c +83 -7
- data/dependencies/SDL_sound/SDL_sound.h +4 -4
- data/dependencies/SDL_sound/SDL_sound_aiff.c +9 -12
- data/dependencies/SDL_sound/SDL_sound_au.c +7 -7
- data/dependencies/SDL_sound/SDL_sound_coreaudio.c +3 -3
- data/dependencies/SDL_sound/SDL_sound_flac.c +1 -1
- data/dependencies/SDL_sound/SDL_sound_internal.h +17 -10
- data/dependencies/SDL_sound/SDL_sound_modplug.c +25 -27
- data/dependencies/SDL_sound/SDL_sound_mp3.c +5 -17
- data/dependencies/SDL_sound/SDL_sound_raw.c +11 -11
- data/dependencies/SDL_sound/SDL_sound_shn.c +8 -7
- data/dependencies/SDL_sound/SDL_sound_voc.c +6 -4
- data/dependencies/SDL_sound/SDL_sound_vorbis.c +6 -11
- data/dependencies/SDL_sound/SDL_sound_wav.c +35 -29
- data/dependencies/SDL_sound/dr_flac.h +618 -220
- data/dependencies/SDL_sound/dr_mp3.h +263 -94
- data/dependencies/SDL_sound/libmodplug/fastmix.c +58 -64
- data/dependencies/SDL_sound/libmodplug/libmodplug.h +25 -103
- data/dependencies/SDL_sound/libmodplug/load_669.c +14 -17
- data/dependencies/SDL_sound/libmodplug/load_amf.c +11 -7
- data/dependencies/SDL_sound/libmodplug/load_ams.c +65 -22
- data/dependencies/SDL_sound/libmodplug/load_dbm.c +8 -4
- data/dependencies/SDL_sound/libmodplug/load_dmf.c +55 -25
- data/dependencies/SDL_sound/libmodplug/load_far.c +9 -13
- data/dependencies/SDL_sound/libmodplug/load_gdm.c +448 -0
- data/dependencies/SDL_sound/libmodplug/load_it.c +45 -49
- data/dependencies/SDL_sound/libmodplug/load_mdl.c +80 -53
- data/dependencies/SDL_sound/libmodplug/load_med.c +20 -12
- data/dependencies/SDL_sound/libmodplug/load_mod.c +40 -15
- data/dependencies/SDL_sound/libmodplug/load_mt2.c +29 -17
- data/dependencies/SDL_sound/libmodplug/load_okt.c +12 -8
- data/dependencies/SDL_sound/libmodplug/load_psm.c +101 -78
- data/dependencies/SDL_sound/libmodplug/load_ptm.c +18 -17
- data/dependencies/SDL_sound/libmodplug/load_s3m.c +9 -7
- data/dependencies/SDL_sound/libmodplug/load_stm.c +3 -2
- data/dependencies/SDL_sound/libmodplug/load_ult.c +2 -2
- data/dependencies/SDL_sound/libmodplug/load_umx.c +315 -35
- data/dependencies/SDL_sound/libmodplug/load_xm.c +25 -21
- data/dependencies/SDL_sound/libmodplug/mmcmp.c +295 -149
- data/dependencies/SDL_sound/libmodplug/modplug.c +7 -123
- data/dependencies/SDL_sound/libmodplug/modplug.h +32 -29
- data/dependencies/SDL_sound/libmodplug/snd_dsp.c +0 -1
- data/dependencies/SDL_sound/libmodplug/snd_flt.c +2 -2
- data/dependencies/SDL_sound/libmodplug/snd_fx.c +24 -18
- data/dependencies/SDL_sound/libmodplug/sndfile.c +55 -156
- data/dependencies/SDL_sound/libmodplug/sndmix.c +7 -12
- data/dependencies/SDL_sound/libmodplug/tables.h +10 -15
- data/dependencies/SDL_sound/stb_vorbis.h +508 -325
- data/dependencies/{al_soft → mojoAL}/AL/al.h +38 -30
- data/dependencies/{al_soft → mojoAL}/AL/alc.h +27 -56
- data/dependencies/mojoAL/mojoal.c +4594 -0
- data/ext/gosu/extconf.rb +33 -30
- data/include/Gosu/Audio.hpp +70 -85
- data/include/Gosu/Color.hpp +63 -107
- data/include/Gosu/Font.hpp +44 -50
- data/include/Gosu/Fwd.hpp +1 -1
- data/include/Gosu/Graphics.hpp +64 -75
- data/include/Gosu/GraphicsBase.hpp +32 -39
- data/include/Gosu/Image.hpp +56 -62
- data/include/Gosu/ImageData.hpp +23 -27
- data/include/Gosu/Inspection.hpp +1 -4
- data/include/Gosu/Math.hpp +4 -16
- data/include/Gosu/Platform.hpp +1 -51
- data/include/Gosu/Text.hpp +37 -40
- data/include/Gosu/TextInput.hpp +34 -40
- data/include/Gosu/Utility.hpp +10 -8
- data/include/Gosu/Version.hpp +1 -1
- data/include/Gosu/Window.hpp +73 -70
- data/lib/SDL2.dll +0 -0
- data/lib/gosu/compat.rb +28 -37
- data/lib/gosu/swig_patches.rb +31 -3
- data/lib/gosu.rb +2 -2
- data/lib64/SDL2.dll +0 -0
- data/rdoc/gosu.rb +9 -1
- data/src/Audio.cpp +86 -86
- data/src/AudioFile.hpp +6 -6
- data/src/AudioFileAudioToolbox.cpp +1 -1
- data/src/AudioFileSDLSound.cpp +1 -1
- data/src/AudioImpl.hpp +5 -5
- data/src/Bitmap.cpp +13 -13
- data/src/BitmapIO.cpp +0 -20
- data/src/BlockAllocator.cpp +2 -1
- data/src/Channel.cpp +22 -20
- data/src/Color.cpp +62 -55
- data/src/EmptyImageData.hpp +16 -18
- data/src/FileUnix.cpp +1 -1
- data/src/FileWin.cpp +1 -1
- data/src/Font.cpp +52 -57
- data/src/GosuViewController.cpp +2 -0
- data/src/Graphics.cpp +135 -143
- data/src/Image.cpp +42 -42
- data/src/Input.cpp +1 -1
- data/src/InputUIKit.cpp +1 -1
- data/src/LargeImageData.cpp +120 -113
- data/src/LargeImageData.hpp +18 -16
- data/src/Log.hpp +6 -6
- data/src/Macro.cpp +124 -169
- data/src/Macro.hpp +11 -11
- data/src/Math.cpp +8 -1
- data/src/RenderState.hpp +5 -5
- data/src/Resolution.cpp +114 -61
- data/src/RubyGosu.cxx +470 -501
- data/src/RubyGosu.h +3 -2
- data/src/TexChunk.cpp +50 -41
- data/src/TexChunk.hpp +22 -22
- data/src/Text.cpp +58 -59
- data/src/TextBuilder.cpp +60 -57
- data/src/TextBuilder.hpp +20 -20
- data/src/TextInput.cpp +127 -135
- data/src/TrueTypeFont.cpp +108 -108
- data/src/TrueTypeFont.hpp +39 -38
- data/src/TrueTypeFontApple.cpp +27 -23
- data/src/TrueTypeFontUnix.cpp +21 -26
- data/src/TrueTypeFontWin.cpp +30 -30
- data/src/Utility.cpp +82 -23
- data/src/WinUtility.hpp +2 -1
- data/src/Window.cpp +103 -86
- data/src/WindowUIKit.cpp +48 -51
- metadata +8 -20
- data/dependencies/SDL/include/SDL_config_os2.h +0 -188
- data/dependencies/SDL_sound/libmodplug/load_abc.c +0 -4725
- data/dependencies/SDL_sound/libmodplug/load_mid.c +0 -1405
- data/dependencies/SDL_sound/libmodplug/load_pat.c +0 -1143
- data/dependencies/SDL_sound/libmodplug/load_pat.h +0 -25
- data/dependencies/al_soft/AL/alext.h +0 -585
- data/dependencies/al_soft/AL/efx-creative.h +0 -3
- data/dependencies/al_soft/AL/efx-presets.h +0 -402
- data/dependencies/al_soft/AL/efx.h +0 -762
- data/dependencies/al_soft/x64/libOpenAL32.dll.a +0 -0
- data/dependencies/al_soft/x86/libOpenAL32.dll.a +0 -0
- data/lib/OpenAL32.dll +0 -0
- data/lib64/OpenAL32.dll +0 -0
- data/src/UtilityApple.cpp +0 -16
- data/src/UtilityWin.cpp +0 -17
data/include/Gosu/Font.hpp
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
//! \file Font.hpp
|
2
|
-
//! Interface of the Font class.
|
3
|
-
|
4
1
|
#pragma once
|
5
2
|
|
6
3
|
#include <Gosu/Fwd.hpp>
|
@@ -13,68 +10,65 @@
|
|
13
10
|
|
14
11
|
namespace Gosu
|
15
12
|
{
|
16
|
-
|
17
|
-
|
13
|
+
/// A simple bitmap font that renders and caches glyphs on demand.
|
14
|
+
/// For large, static texts you should use Gosu::layout_text and turn the result into an image.
|
18
15
|
class Font
|
19
16
|
{
|
20
17
|
struct Impl;
|
21
|
-
std::shared_ptr<Impl>
|
18
|
+
std::shared_ptr<Impl> m_impl;
|
22
19
|
|
23
20
|
public:
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
//! Returns the name of the font that was used to create it.
|
21
|
+
/// @param name Name of a system font, or path to a TTF file (must contain '/').
|
22
|
+
/// @param height Height of the font, in pixels.
|
23
|
+
/// @param flags Flags used to render individual characters of the font (FontFlags enum).
|
24
|
+
explicit Font(int height, const std::string& name = default_font_name(),
|
25
|
+
unsigned flags = 0);
|
26
|
+
|
27
|
+
/// Returns the name of the font that was used to create it, i.e. the filename, nor the
|
28
|
+
/// internal TTF name. (TODO: Why not?)
|
33
29
|
const std::string& name() const;
|
34
|
-
|
35
|
-
|
30
|
+
|
31
|
+
/// Returns the height of the font, in pixels.
|
36
32
|
int height() const;
|
37
|
-
|
38
|
-
|
33
|
+
|
34
|
+
/// Returns the flags used to render the characters of the font (FontFlags enum).
|
39
35
|
unsigned flags() const;
|
40
|
-
|
41
|
-
|
36
|
+
|
37
|
+
/// Returns the width, in pixels, that the given text would occupy if drawn.
|
42
38
|
double text_width(const std::string& text) const;
|
43
|
-
|
39
|
+
/// Returns the width, in pixels, that the given markup would occupy if drawn.
|
44
40
|
double markup_width(const std::string& markup) const;
|
45
|
-
|
46
|
-
|
47
|
-
void draw_text(const std::string& text, double x, double y, ZPos z,
|
41
|
+
|
42
|
+
/// Draws text so the top left corner of the text is at (x; y).
|
43
|
+
void draw_text(const std::string& text, double x, double y, ZPos z, //
|
48
44
|
double scale_x = 1, double scale_y = 1, Color c = Color::WHITE,
|
49
|
-
|
50
|
-
|
51
|
-
void draw_markup(const std::string& markup, double x, double y, ZPos z,
|
45
|
+
BlendMode mode = BM_DEFAULT) const;
|
46
|
+
/// Draws markup so the top left corner of the text is at (x; y).
|
47
|
+
void draw_markup(const std::string& markup, double x, double y, ZPos z, //
|
52
48
|
double scale_x = 1, double scale_y = 1, Color c = Color::WHITE,
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
void draw_text_rel(const std::string& text, double x, double y, ZPos z,
|
49
|
+
BlendMode mode = BM_DEFAULT) const;
|
50
|
+
|
51
|
+
/// Draws text at a position relative to (x; y).
|
52
|
+
/// @param rel_x Determines where the text is drawn horizontally. If rel_x is 0.0, the text
|
53
|
+
/// will be to the right of x, if it is 1.0, the text will be to the left of x, if it is
|
54
|
+
/// 0.5, it will be centered on x.
|
55
|
+
/// @param rel_y See rel_x.
|
56
|
+
void draw_text_rel(const std::string& text, double x, double y, ZPos z, //
|
62
57
|
double rel_x, double rel_y, double scale_x = 1, double scale_y = 1,
|
63
|
-
Color c = Color::WHITE,
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
void draw_markup_rel(const std::string& markup, double x, double y, ZPos z,
|
58
|
+
Color c = Color::WHITE, BlendMode mode = BM_DEFAULT) const;
|
59
|
+
/// Draws markup at a position relative to (x; y).
|
60
|
+
/// @param rel_x Determines where the text is drawn horizontally. If rel_x is 0.0, the text
|
61
|
+
/// will be to the right of x, if it is 1.0, the text will be to the left of x, if it is
|
62
|
+
/// 0.5, it will be centered on x.
|
63
|
+
/// @param rel_y See rel_x.
|
64
|
+
void draw_markup_rel(const std::string& markup, double x, double y, ZPos z, //
|
71
65
|
double rel_x, double rel_y, double scale_x = 1, double scale_y = 1,
|
72
|
-
Color c = Color::WHITE,
|
73
|
-
|
74
|
-
|
75
|
-
|
66
|
+
Color c = Color::WHITE, BlendMode mode = BM_DEFAULT) const;
|
67
|
+
|
68
|
+
/// Maps a letter to a specific image, instead of generating one using Gosu's built-in text
|
69
|
+
/// rendering.
|
76
70
|
void set_image(std::string codepoint, unsigned font_flags, const Gosu::Image& image);
|
77
|
-
|
71
|
+
/// A shortcut for mapping a character to an image regardless of font_flags.
|
78
72
|
void set_image(std::string codepoint, const Gosu::Image& image);
|
79
73
|
};
|
80
74
|
}
|
data/include/Gosu/Fwd.hpp
CHANGED
data/include/Gosu/Graphics.hpp
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
//! \file Graphics.hpp
|
2
|
-
//! Interface of the Graphics class.
|
3
|
-
|
4
1
|
#pragma once
|
5
2
|
|
6
3
|
#include <Gosu/Fwd.hpp>
|
@@ -12,19 +9,17 @@
|
|
12
9
|
namespace Gosu
|
13
10
|
{
|
14
11
|
struct DrawOp;
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
//! Useful when extending Gosu using OpenGL.
|
12
|
+
|
13
|
+
/// Returns the maximum size of an texture that will be allocated internally by Gosu.
|
14
|
+
/// Useful when extending Gosu using OpenGL.
|
19
15
|
const unsigned MAX_TEXTURE_SIZE = 1024;
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
//! Usually created internally by Gosu::Window.
|
16
|
+
|
17
|
+
/// Serves as the target of all drawing and provides primitive drawing functionality.
|
18
|
+
/// Usually created internally by Gosu::Window.
|
24
19
|
class Graphics
|
25
20
|
{
|
26
21
|
struct Impl;
|
27
|
-
std::unique_ptr<Impl>
|
22
|
+
std::unique_ptr<Impl> m_impl;
|
28
23
|
|
29
24
|
public:
|
30
25
|
Graphics(unsigned physical_width, unsigned physical_height);
|
@@ -32,78 +27,72 @@ namespace Gosu
|
|
32
27
|
|
33
28
|
void set_resolution(unsigned logical_width, unsigned logical_height,
|
34
29
|
double black_bar_width = 0, double black_bar_height = 0);
|
35
|
-
|
30
|
+
|
36
31
|
unsigned width() const;
|
37
32
|
unsigned height() const;
|
38
33
|
|
39
|
-
|
40
|
-
|
41
|
-
void frame(const std::function<void
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
34
|
+
/// Prepares the graphics object for drawing and then runs the rendering code in f.
|
35
|
+
/// Nothing must be drawn outside of frame() and record().
|
36
|
+
void frame(const std::function<void()>& f);
|
37
|
+
|
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.
|
46
41
|
static void flush();
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
static void gl(const std::function<void
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
//! Renders everything drawn in f clipped to a rectangle on the screen.
|
42
|
+
|
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);
|
46
|
+
|
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);
|
51
|
+
|
52
|
+
/// Renders everything drawn in f clipped to a rectangle on the screen.
|
59
53
|
static void clip_to(double x, double y, double width, double height,
|
60
|
-
const std::function<void
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
static Gosu::Image render(int width, int height, const std::function<void
|
54
|
+
const std::function<void()>& f);
|
55
|
+
|
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,
|
66
60
|
unsigned image_flags = 0);
|
67
|
-
|
68
|
-
|
69
|
-
static Gosu::Image record(int width, int height, const std::function<void
|
70
|
-
|
71
|
-
|
72
|
-
static void transform(const Transform& transform,
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
static void draw_rect(double x, double y, double width, double height,
|
95
|
-
Color c, ZPos z, AlphaMode mode = AM_DEFAULT);
|
96
|
-
|
97
|
-
//! For internal use only.
|
61
|
+
|
62
|
+
/// Records a macro and returns it as an Image.
|
63
|
+
static Gosu::Image record(int width, int height, const std::function<void()>& f);
|
64
|
+
|
65
|
+
/// Pushes one transformation onto the transformation stack.
|
66
|
+
static void transform(const Transform& transform, const std::function<void()>& f);
|
67
|
+
|
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);
|
74
|
+
|
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);
|
79
|
+
|
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);
|
83
|
+
|
84
|
+
static void draw_rect(double x, double y, double width, double height, Color c, ZPos z,
|
85
|
+
BlendMode mode = BM_DEFAULT);
|
86
|
+
|
87
|
+
/// For internal use only.
|
98
88
|
void set_physical_resolution(unsigned physical_width, unsigned physical_height);
|
99
89
|
|
100
|
-
|
90
|
+
/// For internal use only.
|
101
91
|
static void schedule_draw_op(const DrawOp& op);
|
102
92
|
|
103
|
-
|
104
|
-
static std::unique_ptr<ImageData> create_image(const Bitmap& src,
|
105
|
-
unsigned
|
106
|
-
unsigned
|
107
|
-
unsigned image_flags);
|
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);
|
108
97
|
};
|
109
98
|
}
|
@@ -1,6 +1,3 @@
|
|
1
|
-
//! \file GraphicsBase.hpp
|
2
|
-
//! Contains general typedefs and enums related to graphics.
|
3
|
-
|
4
1
|
#pragma once
|
5
2
|
|
6
3
|
#include <Gosu/Platform.hpp>
|
@@ -8,35 +5,32 @@
|
|
8
5
|
|
9
6
|
namespace Gosu
|
10
7
|
{
|
11
|
-
|
12
|
-
|
13
|
-
//! lower ZPos value.
|
8
|
+
/// 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.
|
14
10
|
typedef double ZPos;
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
enum AlphaMode
|
11
|
+
|
12
|
+
/// Determines the way pixel colors are combined when images overlap.
|
13
|
+
enum BlendMode
|
19
14
|
{
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
AM_MULTIPLY
|
15
|
+
BM_DEFAULT,
|
16
|
+
/// The color's channels will be interpolated. The alpha channel specifies the opacity of
|
17
|
+
/// the new color, 255 is full opacity.
|
18
|
+
BM_INTERPOLATE = BM_DEFAULT,
|
19
|
+
/// The colors' channels will be added. The alpha channel specifies the percentage of the
|
20
|
+
/// new color's channels that will be added to the old color's channels.
|
21
|
+
BM_ADD,
|
22
|
+
/// The color's channels will be multiplied with each other.
|
23
|
+
BM_MULTIPLY
|
30
24
|
};
|
31
|
-
|
25
|
+
|
32
26
|
enum FontFlags
|
33
27
|
{
|
34
|
-
FF_BOLD
|
35
|
-
FF_ITALIC
|
36
|
-
FF_UNDERLINE
|
28
|
+
FF_BOLD = 1,
|
29
|
+
FF_ITALIC = 2,
|
30
|
+
FF_UNDERLINE = 4,
|
37
31
|
FF_COMBINATIONS = 8
|
38
32
|
};
|
39
|
-
|
33
|
+
|
40
34
|
enum Alignment
|
41
35
|
{
|
42
36
|
AL_LEFT,
|
@@ -44,26 +38,25 @@ namespace Gosu
|
|
44
38
|
AL_CENTER,
|
45
39
|
AL_JUSTIFY
|
46
40
|
};
|
47
|
-
|
48
|
-
|
41
|
+
|
42
|
+
/// Flags that affect the tileability or interpolation of an image.
|
49
43
|
enum ImageFlags
|
50
44
|
{
|
51
45
|
IF_SMOOTH = 0,
|
52
|
-
|
53
|
-
// Note: No constant for '1', but Gosu treats '1' as
|
46
|
+
|
47
|
+
// Note: No constant for '1', but Gosu treats '1' as IF_TILEABLE for
|
54
48
|
// backward compatibility reasons (this parameter used to be a bool).
|
55
|
-
|
56
|
-
IF_TILEABLE_LEFT
|
57
|
-
IF_TILEABLE_TOP
|
58
|
-
IF_TILEABLE_RIGHT
|
49
|
+
|
50
|
+
IF_TILEABLE_LEFT = 1 << 1,
|
51
|
+
IF_TILEABLE_TOP = 1 << 2,
|
52
|
+
IF_TILEABLE_RIGHT = 1 << 3,
|
59
53
|
IF_TILEABLE_BOTTOM = 1 << 4,
|
60
|
-
IF_TILEABLE
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
IF_RETRO = 1 << 5
|
54
|
+
IF_TILEABLE = IF_TILEABLE_LEFT | IF_TILEABLE_TOP | IF_TILEABLE_RIGHT | IF_TILEABLE_BOTTOM,
|
55
|
+
|
56
|
+
/// Apply nearest-neighbor interpolation when scaling this image up or down.
|
57
|
+
IF_RETRO = 1 << 5
|
65
58
|
};
|
66
|
-
|
59
|
+
|
67
60
|
typedef std::array<double, 16> Transform;
|
68
61
|
Transform translate(double x, double y);
|
69
62
|
Transform rotate(double angle, double around_x = 0, double around_y = 0);
|
data/include/Gosu/Image.hpp
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
//! \file Image.hpp
|
2
|
-
//! Interface of the Image class and helper functions.
|
3
|
-
|
4
1
|
#pragma once
|
5
2
|
|
6
3
|
#include <Gosu/Fwd.hpp>
|
@@ -12,80 +9,77 @@
|
|
12
9
|
|
13
10
|
namespace Gosu
|
14
11
|
{
|
15
|
-
|
12
|
+
/// Provides functionality for drawing rectangular images.
|
16
13
|
class Image
|
17
14
|
{
|
18
|
-
std::shared_ptr<ImageData>
|
15
|
+
std::shared_ptr<ImageData> m_data;
|
19
16
|
|
20
17
|
public:
|
21
|
-
|
18
|
+
/// Creates an empty image. It will have a width and height of 0, and not contain anything.
|
22
19
|
Image();
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
20
|
+
|
21
|
+
/// Loads an image from a given filename.
|
22
|
+
///
|
23
|
+
/// A color key of #ff00ff is automatically applied to BMP image files.
|
24
|
+
/// For more flexibility, use the corresponding constructor that uses a Bitmap object.
|
28
25
|
explicit Image(const std::string& filename, unsigned image_flags = IF_SMOOTH);
|
29
|
-
|
26
|
+
|
30
27
|
//! Loads a portion of the the image at the given filename..
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
Image(const std::string& filename, int src_x, int src_y,
|
35
|
-
|
36
|
-
|
37
|
-
|
28
|
+
///
|
29
|
+
/// A color key of #ff00ff is automatically applied to BMP image files.
|
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,
|
32
|
+
unsigned image_flags = IF_SMOOTH);
|
33
|
+
|
34
|
+
/// Converts the given bitmap into an image.
|
38
35
|
explicit Image(const Bitmap& source, unsigned image_flags = IF_SMOOTH);
|
39
|
-
|
40
|
-
|
41
|
-
Image(const Bitmap& source, int src_x, int src_y, int src_width,
|
42
|
-
|
43
|
-
|
44
|
-
|
36
|
+
|
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);
|
40
|
+
|
41
|
+
/// Creates an Image from a user-supplied instance of the ImageData interface.
|
45
42
|
explicit Image(std::unique_ptr<ImageData>&& data);
|
46
43
|
|
47
44
|
unsigned width() const;
|
48
45
|
unsigned height() const;
|
49
46
|
|
50
|
-
|
47
|
+
/// Draws the image so its upper left corner is at (x; y).
|
51
48
|
void draw(double x, double y, ZPos z = 0, double scale_x = 1, double scale_y = 1,
|
52
|
-
|
53
|
-
|
54
|
-
void draw_mod(double x, double y, ZPos z, double scale_x, double scale_y,
|
55
|
-
|
49
|
+
Color c = Color::WHITE, BlendMode mode = BM_DEFAULT) const;
|
50
|
+
/// Like draw(), but with modulation colors for all four corners.
|
51
|
+
void draw_mod(double x, double y, ZPos z, double scale_x, double scale_y, Color c1,
|
52
|
+
Color c2, Color c3, Color c4, BlendMode mode = BM_DEFAULT) const;
|
53
|
+
|
54
|
+
/// Draws the image rotated by the given angle so that its rotation center is at (x; y).
|
55
|
+
/// Note that this is different from how all the other drawing functions work!
|
56
|
+
/// @param angle See Math.hpp for an explanation of how Gosu interprets angles.
|
57
|
+
/// @param center_x Relative horizontal position of the rotation center on the image.
|
58
|
+
/// 0 is the left border, 1 is the right border, 0.5 is the center (and default).
|
59
|
+
/// @param center_y See center_x.
|
60
|
+
void draw_rot(double x, double y, ZPos z = 0, double angle = 0, double center_x = 0.5,
|
61
|
+
double center_y = 0.5, double scale_x = 1, double scale_y = 1,
|
62
|
+
Color c = Color::WHITE, BlendMode mode = BM_DEFAULT) const;
|
56
63
|
|
57
|
-
|
58
|
-
|
59
|
-
//! other drawing functions work!
|
60
|
-
//! \param angle See Math.hpp for an explanation of how Gosu interprets
|
61
|
-
//! angles.
|
62
|
-
//! \param center_x Relative horizontal position of the rotation center
|
63
|
-
//! on the image. 0 is the left border, 1 is the right border, 0.5 is
|
64
|
-
//! the center (and default).
|
65
|
-
//! \param center_y See center_x.
|
66
|
-
void draw_rot(double x, double y, ZPos z = 0, double angle = 0,
|
67
|
-
double center_x = 0.5, double center_y = 0.5, double scale_x = 1, double scale_y = 1,
|
68
|
-
Color c = Color::WHITE, AlphaMode mode = AM_DEFAULT) const;
|
69
|
-
|
70
|
-
#ifndef SWIG
|
71
|
-
//! Provides access to the underlying image data object.
|
64
|
+
#ifndef SWIG
|
65
|
+
/// Provides access to the underlying image data object.
|
72
66
|
ImageData& data() const;
|
73
|
-
|
67
|
+
#endif
|
74
68
|
};
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
std::vector<Gosu::Image> load_tiles(const Bitmap& bmp,
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
std::vector<Gosu::Image> load_tiles(const std::string& filename,
|
89
|
-
|
90
|
-
|
69
|
+
|
70
|
+
#ifndef SWIG
|
71
|
+
/// Convenience function that slices an image file into a grid and creates images from them.
|
72
|
+
/// @param tile_width If positive, specifies the width of one tile in pixels.
|
73
|
+
/// If negative, the bitmap is divided into -tile_width rows.
|
74
|
+
/// @param tile_height See tile_width.
|
75
|
+
std::vector<Gosu::Image> load_tiles(const Bitmap& bmp, int tile_width, int tile_height,
|
76
|
+
unsigned image_flags = IF_SMOOTH);
|
77
|
+
|
78
|
+
/// Convenience function that slices a bitmap into a grid and creates images from them.
|
79
|
+
/// @param tile_width If positive, specifies the width of one tile in pixels.
|
80
|
+
/// If negative, the bitmap is divided into -tile_width rows.
|
81
|
+
/// @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
|
91
85
|
}
|
data/include/Gosu/ImageData.hpp
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
//! \file ImageData.hpp
|
2
|
-
//! Interface of the ImageData class.
|
3
|
-
|
4
1
|
#pragma once
|
5
2
|
|
6
3
|
#include <Gosu/Fwd.hpp>
|
@@ -11,47 +8,46 @@
|
|
11
8
|
|
12
9
|
namespace Gosu
|
13
10
|
{
|
14
|
-
|
15
|
-
|
16
|
-
//! to use them in OpenGL operations.
|
11
|
+
/// Contains information about the underlying OpenGL texture and the u/v space used for image
|
12
|
+
/// data. Can be retrieved from some images to use them in OpenGL operations.
|
17
13
|
struct GLTexInfo
|
18
14
|
{
|
19
15
|
int tex_name;
|
20
16
|
double left, right, top, bottom;
|
21
17
|
};
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
//! intuitive drawing interface.
|
19
|
+
/// The ImageData class is an abstract base class for drawable images.
|
20
|
+
/// Instances of classes derived by ImageData are usually returned by Graphics::create_image and
|
21
|
+
/// usually only used to implement drawing primitives like Image, which then provide a more
|
22
|
+
/// specialized and intuitive drawing interface.
|
28
23
|
class ImageData
|
29
24
|
{
|
30
|
-
// Non-copyable
|
31
|
-
ImageData(const ImageData&);
|
32
|
-
ImageData& operator=(const ImageData&);
|
33
|
-
|
34
25
|
public:
|
35
|
-
|
36
|
-
|
37
|
-
|
26
|
+
// Classes inside a hierarchy should not be copyable to avoid slicing.
|
27
|
+
ImageData(const ImageData&) = delete;
|
28
|
+
ImageData(ImageData&&) = delete;
|
29
|
+
ImageData& operator=(const ImageData&) = delete;
|
30
|
+
ImageData& operator=(ImageData&&) = delete;
|
31
|
+
|
32
|
+
ImageData() = default;
|
33
|
+
virtual ~ImageData() = default;
|
38
34
|
|
39
35
|
virtual int width() const = 0;
|
40
|
-
|
36
|
+
|
41
37
|
virtual int height() const = 0;
|
42
38
|
|
43
|
-
virtual void draw(double x1, double y1, Color c1,
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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 = 0;
|
48
44
|
|
49
45
|
virtual const GLTexInfo* gl_tex_info() const = 0;
|
50
|
-
|
46
|
+
|
51
47
|
virtual Bitmap to_bitmap() const = 0;
|
52
|
-
|
48
|
+
|
53
49
|
virtual std::unique_ptr<ImageData> subimage(int x, int y, int width, int height) const = 0;
|
54
|
-
|
50
|
+
|
55
51
|
virtual void insert(const Bitmap& bitmap, int x, int y) = 0;
|
56
52
|
};
|
57
53
|
}
|