gosu 1.1.1.1 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- 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 +29 -30
- data/include/Gosu/Audio.hpp +70 -85
- data/include/Gosu/Color.hpp +63 -107
- data/include/Gosu/Font.hpp +44 -48
- 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 +88 -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 +35 -37
- data/src/Macro.hpp +11 -11
- data/src/Math.cpp +8 -1
- data/src/RenderState.hpp +5 -5
- data/src/Resolution.cpp +12 -7
- data/src/RubyGosu.cxx +471 -502
- 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/src/Bitmap.cpp
CHANGED
@@ -31,20 +31,20 @@ void Gosu::Bitmap::resize(int width, int height, Color c)
|
|
31
31
|
|
32
32
|
void Gosu::Bitmap::blend_pixel(int x, int y, Color c)
|
33
33
|
{
|
34
|
-
if (c.alpha
|
34
|
+
if (c.alpha == 0) return;
|
35
35
|
|
36
36
|
Color out = get_pixel(x, y);
|
37
|
-
if (out.alpha
|
37
|
+
if (out.alpha == 0) {
|
38
38
|
set_pixel(x, y, c);
|
39
39
|
return;
|
40
40
|
}
|
41
41
|
|
42
|
-
int inv_alpha = out.alpha
|
42
|
+
int inv_alpha = out.alpha * (255 - c.alpha) / 255;
|
43
43
|
|
44
|
-
out.
|
45
|
-
out.
|
46
|
-
out.
|
47
|
-
out.
|
44
|
+
out.alpha = (c.alpha + inv_alpha);
|
45
|
+
out.red = ((c.red * c.alpha + out.red * inv_alpha) / out.alpha);
|
46
|
+
out.green = ((c.green * c.alpha + out.green * inv_alpha) / out.alpha);
|
47
|
+
out.blue = ((c.blue * c.alpha + out.blue * inv_alpha) / out.alpha);
|
48
48
|
|
49
49
|
set_pixel(x, y, out);
|
50
50
|
}
|
@@ -108,9 +108,9 @@ void Gosu::apply_color_key(Bitmap& bitmap, Color key)
|
|
108
108
|
auto visit = [&](Color c) {
|
109
109
|
if (c != key) {
|
110
110
|
neighbors += 1;
|
111
|
-
red += c.red
|
112
|
-
green += c.green
|
113
|
-
blue += c.blue
|
111
|
+
red += c.red;
|
112
|
+
green += c.green;
|
113
|
+
blue += c.blue;
|
114
114
|
}
|
115
115
|
};
|
116
116
|
|
@@ -121,9 +121,9 @@ void Gosu::apply_color_key(Bitmap& bitmap, Color key)
|
|
121
121
|
|
122
122
|
Color replacement = Color::NONE;
|
123
123
|
if (neighbors > 0) {
|
124
|
-
replacement.
|
125
|
-
replacement.
|
126
|
-
replacement.
|
124
|
+
replacement.red = red / neighbors;
|
125
|
+
replacement.green = green / neighbors;
|
126
|
+
replacement.blue = blue / neighbors;
|
127
127
|
}
|
128
128
|
bitmap.set_pixel(x, y, replacement);
|
129
129
|
}
|
data/src/BitmapIO.cpp
CHANGED
@@ -7,18 +7,8 @@
|
|
7
7
|
#define STBI_NO_STDIO
|
8
8
|
#define STBI_NO_LINEAR
|
9
9
|
|
10
|
-
// Disable comma warnings in stb headers.
|
11
|
-
#ifdef __GNUC__
|
12
|
-
#pragma GCC diagnostic push
|
13
|
-
#pragma GCC diagnostic ignored "-Wcomma"
|
14
|
-
#endif
|
15
|
-
|
16
10
|
#include <stb_image.h>
|
17
11
|
|
18
|
-
#ifdef __GNUC__
|
19
|
-
#pragma GCC diagnostic pop
|
20
|
-
#endif
|
21
|
-
|
22
12
|
static int read_callback(void* user, char* data, int size)
|
23
13
|
{
|
24
14
|
Gosu::Reader* reader = static_cast<Gosu::Reader*>(user);
|
@@ -82,19 +72,9 @@ Gosu::Bitmap Gosu::load_image_file(Reader input)
|
|
82
72
|
return bitmap;
|
83
73
|
}
|
84
74
|
|
85
|
-
// Disable comma warnings in stb headers.
|
86
|
-
#ifdef __GNUC__
|
87
|
-
#pragma GCC diagnostic push
|
88
|
-
#pragma GCC diagnostic ignored "-Wcomma"
|
89
|
-
#endif
|
90
|
-
|
91
75
|
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
92
76
|
#include <stb_image_write.h>
|
93
77
|
|
94
|
-
#ifdef __GNUC__
|
95
|
-
#pragma GCC diagnostic pop
|
96
|
-
#endif
|
97
|
-
|
98
78
|
void Gosu::save_image_file(const Gosu::Bitmap& bitmap, const std::string& filename)
|
99
79
|
{
|
100
80
|
int ok;
|
data/src/BlockAllocator.cpp
CHANGED
data/src/Channel.cpp
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#include <Gosu/Audio.hpp>
|
2
2
|
#include "AudioImpl.hpp"
|
3
|
-
|
3
|
+
#include <algorithm>
|
4
4
|
|
5
|
-
|
5
|
+
/// Returns the current state of a source.
|
6
6
|
static ALint state(int& channel)
|
7
7
|
{
|
8
8
|
ALint state;
|
@@ -14,41 +14,43 @@ static ALint state(int& channel)
|
|
14
14
|
}
|
15
15
|
|
16
16
|
Gosu::Channel::Channel()
|
17
|
-
:
|
17
|
+
: m_channel{NO_CHANNEL},
|
18
|
+
m_token{0}
|
18
19
|
{
|
19
20
|
}
|
20
21
|
|
21
22
|
Gosu::Channel::Channel(int channel, int token)
|
22
|
-
: channel
|
23
|
+
: m_channel{channel},
|
24
|
+
m_token{token}
|
23
25
|
{
|
24
26
|
}
|
25
27
|
|
26
28
|
int Gosu::Channel::current_channel() const
|
27
29
|
{
|
28
|
-
if (
|
29
|
-
|
30
|
+
if (m_channel != NO_CHANNEL && channel_expired(m_channel, m_token)) {
|
31
|
+
m_channel = NO_CHANNEL;
|
30
32
|
}
|
31
|
-
return
|
33
|
+
return m_channel;
|
32
34
|
}
|
33
35
|
|
34
36
|
bool Gosu::Channel::playing() const
|
35
37
|
{
|
36
38
|
if (current_channel() == NO_CHANNEL) return false;
|
37
|
-
|
38
|
-
return state(
|
39
|
+
|
40
|
+
return state(m_channel) == AL_PLAYING;
|
39
41
|
}
|
40
42
|
|
41
43
|
bool Gosu::Channel::paused() const
|
42
44
|
{
|
43
45
|
if (current_channel() == NO_CHANNEL) return false;
|
44
46
|
|
45
|
-
return state(
|
47
|
+
return state(m_channel) == AL_PAUSED;
|
46
48
|
}
|
47
49
|
|
48
50
|
void Gosu::Channel::pause()
|
49
51
|
{
|
50
52
|
if (playing()) {
|
51
|
-
ALuint source = al_source_for_channel(
|
53
|
+
ALuint source = al_source_for_channel(m_channel);
|
52
54
|
alSourcePause(source);
|
53
55
|
}
|
54
56
|
}
|
@@ -56,7 +58,7 @@ void Gosu::Channel::pause()
|
|
56
58
|
void Gosu::Channel::resume()
|
57
59
|
{
|
58
60
|
if (paused()) {
|
59
|
-
ALuint source = al_source_for_channel(
|
61
|
+
ALuint source = al_source_for_channel(m_channel);
|
60
62
|
alSourcePlay(source);
|
61
63
|
}
|
62
64
|
}
|
@@ -65,31 +67,31 @@ void Gosu::Channel::stop()
|
|
65
67
|
{
|
66
68
|
if (current_channel() == NO_CHANNEL) return;
|
67
69
|
|
68
|
-
ALuint source = al_source_for_channel(
|
70
|
+
ALuint source = al_source_for_channel(m_channel);
|
69
71
|
alSourceStop(source);
|
70
|
-
|
72
|
+
m_channel = NO_CHANNEL;
|
71
73
|
}
|
72
74
|
|
73
75
|
void Gosu::Channel::set_volume(double volume)
|
74
76
|
{
|
75
77
|
if (current_channel() == NO_CHANNEL) return;
|
76
78
|
|
77
|
-
ALuint source = al_source_for_channel(
|
78
|
-
alSourcef(source, AL_GAIN, max(volume, 0.0));
|
79
|
+
ALuint source = al_source_for_channel(m_channel);
|
80
|
+
alSourcef(source, AL_GAIN, static_cast<ALfloat>(std::max(volume, 0.0)));
|
79
81
|
}
|
80
82
|
|
81
83
|
void Gosu::Channel::set_pan(double pan)
|
82
84
|
{
|
83
85
|
if (current_channel() == NO_CHANNEL) return;
|
84
86
|
|
85
|
-
ALuint source = al_source_for_channel(
|
86
|
-
alSource3f(source, AL_POSITION, pan * 10, 0, 0);
|
87
|
+
ALuint source = al_source_for_channel(m_channel);
|
88
|
+
alSource3f(source, AL_POSITION, static_cast<ALfloat>(pan * 10), 0, 0);
|
87
89
|
}
|
88
90
|
|
89
91
|
void Gosu::Channel::set_speed(double speed)
|
90
92
|
{
|
91
93
|
if (current_channel() == NO_CHANNEL) return;
|
92
94
|
|
93
|
-
ALuint source = al_source_for_channel(
|
94
|
-
alSourcef(source, AL_PITCH, speed);
|
95
|
+
ALuint source = al_source_for_channel(m_channel);
|
96
|
+
alSourcef(source, AL_PITCH, static_cast<ALfloat>(speed));
|
95
97
|
}
|
data/src/Color.cpp
CHANGED
@@ -1,35 +1,38 @@
|
|
1
1
|
#include <Gosu/Color.hpp>
|
2
2
|
#include <Gosu/Math.hpp>
|
3
|
-
#include <cmath>
|
4
3
|
#include <algorithm>
|
4
|
+
#include <cmath>
|
5
5
|
|
6
6
|
namespace
|
7
7
|
{
|
8
|
-
struct HSV
|
9
|
-
|
8
|
+
struct HSV
|
9
|
+
{
|
10
|
+
double h, s, v;
|
11
|
+
};
|
12
|
+
|
10
13
|
HSV color_to_hsv(const Gosu::Color& c)
|
11
14
|
{
|
12
|
-
double r = c.red
|
13
|
-
double g = c.green
|
14
|
-
double b = c.blue
|
15
|
-
|
15
|
+
double r = c.red / 255.0;
|
16
|
+
double g = c.green / 255.0;
|
17
|
+
double b = c.blue / 255.0;
|
18
|
+
|
16
19
|
double min = std::min(std::min(r, g), b);
|
17
20
|
double max = std::max(std::max(r, g), b);
|
18
21
|
double delta = max - min;
|
19
22
|
|
20
23
|
if (max == 0) {
|
21
|
-
HSV hsv = {
|
24
|
+
HSV hsv = {0, 0, 0};
|
22
25
|
return hsv;
|
23
26
|
}
|
24
|
-
|
25
|
-
HSV hsv;
|
27
|
+
|
28
|
+
HSV hsv{};
|
26
29
|
|
27
30
|
// Value.
|
28
31
|
hsv.v = max;
|
29
|
-
|
32
|
+
|
30
33
|
// Saturation.
|
31
34
|
hsv.s = delta / max;
|
32
|
-
|
35
|
+
|
33
36
|
// Hue.
|
34
37
|
if (delta == 0) {
|
35
38
|
hsv.h = 0;
|
@@ -44,44 +47,39 @@ namespace
|
|
44
47
|
hsv.h = (r - g) / delta + 4;
|
45
48
|
}
|
46
49
|
hsv.h *= 60;
|
47
|
-
|
50
|
+
|
48
51
|
return hsv;
|
49
52
|
}
|
50
53
|
}
|
51
54
|
|
52
55
|
Gosu::Color Gosu::Color::from_hsv(double h, double s, double v)
|
53
|
-
{
|
54
|
-
return from_ahsv(255, h, s, v);
|
55
|
-
}
|
56
|
-
|
57
|
-
Gosu::Color Gosu::Color::from_ahsv(Channel alpha, double h, double s, double v)
|
58
56
|
{
|
59
57
|
// Normalize hue so that is always in the [0, 360) range and wraps around.
|
60
58
|
h = normalize_angle(h);
|
61
59
|
// Clamp s and v for consistency with the Ruby/Gosu ARGB getters/setters.
|
62
|
-
s = clamp(s, 0.0, 1.0);
|
63
|
-
v = clamp(v, 0.0, 1.0);
|
64
|
-
|
60
|
+
s = std::clamp(s, 0.0, 1.0);
|
61
|
+
v = std::clamp(v, 0.0, 1.0);
|
62
|
+
|
65
63
|
int sector = static_cast<int>(h / 60);
|
66
64
|
double factorial = h / 60 - sector;
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
65
|
+
|
66
|
+
Channel p = static_cast<Channel>(255 * v * (1 - s));
|
67
|
+
Channel q = static_cast<Channel>(255 * v * (1 - s * factorial));
|
68
|
+
Channel t = static_cast<Channel>(255 * v * (1 - s * (1 - factorial)));
|
69
|
+
|
72
70
|
switch (sector) {
|
73
71
|
case 0:
|
74
|
-
return Color(
|
72
|
+
return Color{static_cast<Channel>(255 * v), t, p};
|
75
73
|
case 1:
|
76
|
-
return Color
|
74
|
+
return Color{q, static_cast<Channel>(255 * v), p};
|
77
75
|
case 2:
|
78
|
-
return Color
|
76
|
+
return Color{p, static_cast<Channel>(255 * v), t};
|
79
77
|
case 3:
|
80
|
-
return Color
|
78
|
+
return Color{p, q, static_cast<Channel>(255 * v)};
|
81
79
|
case 4:
|
82
|
-
return Color
|
80
|
+
return Color{t, p, static_cast<Channel>(255 * v)};
|
83
81
|
default: // sector 5
|
84
|
-
return Color(
|
82
|
+
return Color{static_cast<Channel>(255 * v), p, q};
|
85
83
|
}
|
86
84
|
}
|
87
85
|
|
@@ -92,7 +90,7 @@ double Gosu::Color::hue() const
|
|
92
90
|
|
93
91
|
void Gosu::Color::set_hue(double h)
|
94
92
|
{
|
95
|
-
*this =
|
93
|
+
*this = from_hsv(h, saturation(), value()).with_alpha(alpha);
|
96
94
|
}
|
97
95
|
|
98
96
|
double Gosu::Color::saturation() const
|
@@ -102,7 +100,7 @@ double Gosu::Color::saturation() const
|
|
102
100
|
|
103
101
|
void Gosu::Color::set_saturation(double s)
|
104
102
|
{
|
105
|
-
*this =
|
103
|
+
*this = from_hsv(hue(), s, value()).with_alpha(alpha);
|
106
104
|
}
|
107
105
|
|
108
106
|
double Gosu::Color::value() const
|
@@ -112,33 +110,42 @@ double Gosu::Color::value() const
|
|
112
110
|
|
113
111
|
void Gosu::Color::set_value(double v)
|
114
112
|
{
|
115
|
-
*this =
|
113
|
+
*this = from_hsv(hue(), saturation(), v).with_alpha(alpha);
|
116
114
|
}
|
117
115
|
|
118
|
-
Gosu::Color Gosu::
|
116
|
+
Gosu::Color Gosu::lerp(Color a, Color b, double t)
|
119
117
|
{
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
118
|
+
const auto lerp_channel = [](Color::Channel a, Color::Channel b, double t) {
|
119
|
+
return static_cast<Color::Channel>(std::clamp(std::round(lerp(a, b, t)), 0.0, 255.0));
|
120
|
+
};
|
121
|
+
|
122
|
+
Color result;
|
123
|
+
result.red = lerp_channel(a.red, b.red, t);
|
124
|
+
result.green = lerp_channel(a.green, b.green, t);
|
125
|
+
result.blue = lerp_channel(a.blue, b.blue, t);
|
126
|
+
result.alpha = lerp_channel(a.alpha, b.alpha, t);
|
127
|
+
return result;
|
124
128
|
}
|
125
129
|
|
126
130
|
Gosu::Color Gosu::multiply(Color a, Color b)
|
127
131
|
{
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
+
Color result;
|
133
|
+
result.red = static_cast<Color::Channel>(std::round(a.red * b.red / 255.0));
|
134
|
+
result.green = static_cast<Color::Channel>(std::round(a.green * b.green / 255.0));
|
135
|
+
result.blue = static_cast<Color::Channel>(std::round(a.blue * b.blue / 255.0));
|
136
|
+
result.alpha = static_cast<Color::Channel>(std::round(a.alpha * b.alpha / 255.0));
|
137
|
+
return result;
|
132
138
|
}
|
133
139
|
|
134
|
-
const Gosu::Color Gosu::Color::NONE
|
135
|
-
const Gosu::Color Gosu::Color::BLACK
|
136
|
-
const Gosu::Color Gosu::Color::GRAY
|
137
|
-
const Gosu::Color Gosu::Color::WHITE
|
138
|
-
|
139
|
-
const Gosu::Color Gosu::Color::
|
140
|
-
const Gosu::Color Gosu::Color::
|
141
|
-
const Gosu::Color Gosu::Color::
|
142
|
-
const Gosu::Color Gosu::Color::
|
143
|
-
const Gosu::Color Gosu::Color::
|
144
|
-
const Gosu::Color Gosu::Color::
|
140
|
+
const Gosu::Color Gosu::Color::NONE{0x00'000000};
|
141
|
+
const Gosu::Color Gosu::Color::BLACK{0, 0, 0};
|
142
|
+
const Gosu::Color Gosu::Color::GRAY{128, 128, 128};
|
143
|
+
const Gosu::Color Gosu::Color::WHITE{255, 255, 255};
|
144
|
+
|
145
|
+
const Gosu::Color Gosu::Color::AQUA{0, 255, 255};
|
146
|
+
const Gosu::Color Gosu::Color::RED{255, 0, 0};
|
147
|
+
const Gosu::Color Gosu::Color::GREEN{0, 255, 0};
|
148
|
+
const Gosu::Color Gosu::Color::BLUE{0, 0, 255};
|
149
|
+
const Gosu::Color Gosu::Color::YELLOW{255, 255, 0};
|
150
|
+
const Gosu::Color Gosu::Color::FUCHSIA{255, 0, 255};
|
151
|
+
const Gosu::Color Gosu::Color::CYAN{0, 255, 255};
|
data/src/EmptyImageData.hpp
CHANGED
@@ -8,43 +8,41 @@ namespace Gosu
|
|
8
8
|
class EmptyImageData : public ImageData
|
9
9
|
{
|
10
10
|
public:
|
11
|
-
int width() const override
|
11
|
+
int width() const override //
|
12
12
|
{
|
13
13
|
return 0;
|
14
14
|
}
|
15
|
-
|
16
|
-
int height() const override
|
15
|
+
|
16
|
+
int height() const override //
|
17
17
|
{
|
18
18
|
return 0;
|
19
19
|
}
|
20
|
-
|
21
|
-
void draw(double, double, Color,
|
22
|
-
double, double, Color,
|
23
|
-
|
24
|
-
double, double, Color,
|
25
|
-
ZPos, AlphaMode) const override
|
20
|
+
|
21
|
+
void draw(double, double, Color, double, double, Color, //
|
22
|
+
double, double, Color, double, double, Color, //
|
23
|
+
ZPos, BlendMode) const override
|
26
24
|
{
|
27
25
|
}
|
28
|
-
|
29
|
-
GLTexInfo* gl_tex_info() const override
|
26
|
+
|
27
|
+
GLTexInfo* gl_tex_info() const override //
|
30
28
|
{
|
31
29
|
return nullptr;
|
32
30
|
}
|
33
|
-
|
34
|
-
Bitmap to_bitmap() const override
|
31
|
+
|
32
|
+
Bitmap to_bitmap() const override //
|
35
33
|
{
|
36
34
|
return Bitmap();
|
37
35
|
}
|
38
|
-
|
39
|
-
|
36
|
+
|
37
|
+
std::unique_ptr<ImageData> subimage(int, int, int, int) const override //
|
40
38
|
{
|
41
39
|
return nullptr;
|
42
40
|
}
|
43
|
-
|
44
|
-
|
41
|
+
|
42
|
+
void insert(const Bitmap&, int x, int y) override //
|
45
43
|
{
|
46
44
|
}
|
47
|
-
|
45
|
+
|
48
46
|
static const std::shared_ptr<EmptyImageData>& instance_ptr()
|
49
47
|
{
|
50
48
|
static std::shared_ptr<EmptyImageData> instance = std::make_shared<EmptyImageData>();
|
data/src/FileUnix.cpp
CHANGED