gosu 1.4.1 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/dependencies/SDL_sound/SDL_sound.c +21 -63
  3. data/dependencies/SDL_sound/SDL_sound.h +2 -2
  4. data/dependencies/SDL_sound/SDL_sound_aiff.c +26 -23
  5. data/dependencies/SDL_sound/SDL_sound_au.c +8 -8
  6. data/dependencies/SDL_sound/SDL_sound_coreaudio.c +4 -5
  7. data/dependencies/SDL_sound/SDL_sound_flac.c +28 -30
  8. data/dependencies/SDL_sound/SDL_sound_internal.h +4 -4
  9. data/dependencies/SDL_sound/SDL_sound_modplug.c +1 -1
  10. data/dependencies/SDL_sound/SDL_sound_mp3.c +19 -23
  11. data/dependencies/SDL_sound/SDL_sound_raw.c +5 -6
  12. data/dependencies/SDL_sound/SDL_sound_shn.c +4 -4
  13. data/dependencies/SDL_sound/SDL_sound_voc.c +15 -15
  14. data/dependencies/SDL_sound/SDL_sound_vorbis.c +14 -7
  15. data/dependencies/SDL_sound/SDL_sound_wav.c +17 -17
  16. data/dependencies/SDL_sound/dr_flac.h +10840 -4779
  17. data/dependencies/SDL_sound/dr_mp3.h +2793 -1004
  18. data/dependencies/SDL_sound/libmodplug/fastmix.c +5 -0
  19. data/dependencies/SDL_sound/libmodplug/load_669.c +1 -1
  20. data/dependencies/SDL_sound/libmodplug/load_amf.c +1 -0
  21. data/dependencies/SDL_sound/libmodplug/load_ams.c +38 -22
  22. data/dependencies/SDL_sound/libmodplug/load_it.c +18 -14
  23. data/dependencies/SDL_sound/libmodplug/load_mdl.c +18 -9
  24. data/dependencies/SDL_sound/libmodplug/load_med.c +7 -6
  25. data/dependencies/SDL_sound/libmodplug/load_mt2.c +36 -17
  26. data/dependencies/SDL_sound/libmodplug/load_okt.c +51 -24
  27. data/dependencies/SDL_sound/libmodplug/load_psm.c +4 -2
  28. data/dependencies/SDL_sound/libmodplug/load_s3m.c +4 -4
  29. data/dependencies/SDL_sound/libmodplug/load_ult.c +4 -3
  30. data/dependencies/SDL_sound/libmodplug/load_xm.c +5 -5
  31. data/dependencies/SDL_sound/libmodplug/snd_fx.c +8 -1
  32. data/dependencies/SDL_sound/libmodplug/sndfile.c +21 -4
  33. data/dependencies/SDL_sound/stb_vorbis.h +10 -18
  34. data/dependencies/mojoAL/mojoal.c +260 -6
  35. data/dependencies/stb/stb_image.h +208 -73
  36. data/dependencies/stb/stb_image_write.h +57 -23
  37. data/dependencies/stb/stb_truetype.h +345 -279
  38. data/dependencies/utf8proc/utf8proc.c +37 -18
  39. data/dependencies/utf8proc/utf8proc.h +17 -5
  40. data/dependencies/utf8proc/utf8proc_data.h +12012 -10089
  41. data/ext/gosu/extconf.rb +6 -3
  42. data/include/Gosu/Buttons.hpp +103 -103
  43. data/include/Gosu/Directories.hpp +31 -24
  44. data/include/Gosu/Font.hpp +4 -2
  45. data/include/Gosu/Gosu.hpp +5 -8
  46. data/include/Gosu/IO.hpp +0 -3
  47. data/include/Gosu/Input.hpp +7 -1
  48. data/include/Gosu/Math.hpp +0 -3
  49. data/include/Gosu/TextInput.hpp +3 -3
  50. data/include/Gosu/Timing.hpp +3 -6
  51. data/include/Gosu/Version.hpp +1 -1
  52. data/include/Gosu/Window.hpp +3 -2
  53. data/rdoc/gosu.rb +16 -2
  54. data/src/Audio.cpp +2 -2
  55. data/src/AudioFileAudioToolbox.cpp +1 -1
  56. data/src/AudioFileSDLSound.cpp +1 -1
  57. data/src/AudioImpl.cpp +0 -7
  58. data/src/AudioImpl.hpp +1 -3
  59. data/src/BitmapIO.cpp +23 -2
  60. data/src/BlockAllocator.cpp +1 -1
  61. data/src/DirectoriesApple.cpp +25 -24
  62. data/src/DirectoriesUnix.cpp +14 -12
  63. data/src/DirectoriesWin.cpp +26 -30
  64. data/src/FileUnix.cpp +1 -1
  65. data/src/FileWin.cpp +1 -1
  66. data/src/Font.cpp +13 -3
  67. data/src/Graphics.cpp +1 -1
  68. data/src/Image.cpp +10 -15
  69. data/src/Input.cpp +16 -1
  70. data/src/InputUIKit.cpp +1 -1
  71. data/src/Macro.cpp +1 -1
  72. data/src/RubyGosu.cxx +76 -34
  73. data/src/TextInput.cpp +1 -1
  74. data/src/TimingApple.cpp +2 -2
  75. data/src/TimingUnix.cpp +3 -7
  76. data/src/TimingWin.cpp +1 -2
  77. data/src/TrueTypeFont.cpp +1 -1
  78. data/src/Window.cpp +5 -4
  79. data/src/WindowUIKit.cpp +1 -1
  80. metadata +3 -3
data/ext/gosu/extconf.rb CHANGED
@@ -74,9 +74,12 @@ elsif macos
74
74
  $LDFLAGS << " #{`sdl2-config --static-libs`.chomp} -framework OpenGL -framework Metal"
75
75
  # And yet another hack: `sdl2-config --static-libs` uses `-lSDL2` instead of linking to the static library,
76
76
  # even if it exists. -> Manually replace it. (Ugh!)
77
- %w(/usr/local/lib/libSDL2.a /opt/homebrew/opt/sdl2/lib/libSDL2.a).each do |static_lib|
78
- $LDFLAGS.sub! " -lSDL2 ", " #{static_lib} " if File.exist? static_lib
79
- end
77
+ static_lib = if RbConfig::CONFIG["target_cpu"] == "arm64"
78
+ "/opt/homebrew/opt/sdl2/lib/libSDL2.a"
79
+ else
80
+ "/usr/local/lib/libSDL2.a"
81
+ end
82
+ $LDFLAGS.sub! " -lSDL2 ", " #{static_lib} " if File.exist? static_lib
80
83
 
81
84
  # Disable building of 32-bit slices in Apple's Ruby.
82
85
  # (RbConfig::CONFIG['CXXFLAGS'] on 10.11: -arch x86_64 -arch i386 -g -Os -pipe)
@@ -7,111 +7,111 @@ namespace Gosu
7
7
  /// mouse buttons and mouse wheel (MS_*), as well as gamepad buttons (GP_*).
8
8
  enum Button
9
9
  {
10
- KB_ESCAPE = 41,
11
- KB_F1 = 58,
12
- KB_F2 = 59,
13
- KB_F3 = 60,
14
- KB_F4 = 61,
15
- KB_F5 = 62,
16
- KB_F6 = 63,
17
- KB_F7 = 64,
18
- KB_F8 = 65,
19
- KB_F9 = 66,
20
- KB_F10 = 67,
21
- KB_F11 = 68,
22
- KB_F12 = 69,
23
- KB_0 = 39,
24
- KB_1 = 30,
25
- KB_2 = 31,
26
- KB_3 = 32,
27
- KB_4 = 33,
28
- KB_5 = 34,
29
- KB_6 = 35,
30
- KB_7 = 36,
31
- KB_8 = 37,
32
- KB_9 = 38,
33
- KB_TAB = 43,
34
- KB_RETURN = 40,
35
- KB_SPACE = 44,
36
- KB_LEFT_SHIFT = 225,
37
- KB_RIGHT_SHIFT = 229,
38
- KB_LEFT_CONTROL = 224,
39
- KB_RIGHT_CONTROL = 228,
40
- KB_LEFT_ALT = 226,
41
- KB_RIGHT_ALT = 230,
42
- KB_LEFT_META = 227,
43
- KB_RIGHT_META = 231,
44
- KB_BACKSPACE = 42,
45
- KB_LEFT = 80,
46
- KB_RIGHT = 79,
47
- KB_UP = 82,
48
- KB_DOWN = 81,
49
- KB_HOME = 74,
50
- KB_END = 77,
51
- KB_PRINT_SCREEN = 70,
52
- KB_SCROLL_LOCK = 71,
53
- KB_PAUSE = 72,
54
- KB_INSERT = 73,
55
- KB_DELETE = 76,
56
- KB_PAGE_UP = 75,
57
- KB_PAGE_DOWN = 78,
58
- KB_ENTER = 88,
59
- KB_BACKTICK = 53,
60
- KB_MINUS = 45,
61
- KB_EQUALS = 46,
62
- KB_LEFT_BRACKET = 47,
63
- KB_RIGHT_BRACKET = 48,
64
- KB_BACKSLASH = 49,
65
- KB_SEMICOLON = 51,
66
- KB_APOSTROPHE = 52,
67
- KB_COMMA = 54,
68
- KB_PERIOD = 55,
69
- KB_SLASH = 56,
70
- KB_CAPS_LOCK = 57,
71
- KB_A = 4,
72
- KB_B = 5,
73
- KB_C = 6,
74
- KB_D = 7,
75
- KB_E = 8,
76
- KB_F = 9,
77
- KB_G = 10,
78
- KB_H = 11,
79
- KB_I = 12,
80
- KB_J = 13,
81
- KB_K = 14,
82
- KB_L = 15,
83
- KB_M = 16,
84
- KB_N = 17,
85
- KB_O = 18,
86
- KB_P = 19,
87
- KB_Q = 20,
88
- KB_R = 21,
89
- KB_S = 22,
90
- KB_T = 23,
91
- KB_U = 24,
92
- KB_V = 25,
93
- KB_W = 26,
94
- KB_X = 27,
95
- KB_Y = 28,
96
- KB_Z = 29,
10
+ KB_ESCAPE = 41,
11
+ KB_F1 = 58,
12
+ KB_F2 = 59,
13
+ KB_F3 = 60,
14
+ KB_F4 = 61,
15
+ KB_F5 = 62,
16
+ KB_F6 = 63,
17
+ KB_F7 = 64,
18
+ KB_F8 = 65,
19
+ KB_F9 = 66,
20
+ KB_F10 = 67,
21
+ KB_F11 = 68,
22
+ KB_F12 = 69,
23
+ KB_0 = 39,
24
+ KB_1 = 30,
25
+ KB_2 = 31,
26
+ KB_3 = 32,
27
+ KB_4 = 33,
28
+ KB_5 = 34,
29
+ KB_6 = 35,
30
+ KB_7 = 36,
31
+ KB_8 = 37,
32
+ KB_9 = 38,
33
+ KB_TAB = 43,
34
+ KB_RETURN = 40,
35
+ KB_SPACE = 44,
36
+ KB_LEFT_SHIFT = 225,
37
+ KB_RIGHT_SHIFT = 229,
38
+ KB_LEFT_CONTROL = 224,
39
+ KB_RIGHT_CONTROL = 228,
40
+ KB_LEFT_ALT = 226,
41
+ KB_RIGHT_ALT = 230,
42
+ KB_LEFT_META = 227,
43
+ KB_RIGHT_META = 231,
44
+ KB_BACKSPACE = 42,
45
+ KB_LEFT = 80,
46
+ KB_RIGHT = 79,
47
+ KB_UP = 82,
48
+ KB_DOWN = 81,
49
+ KB_HOME = 74,
50
+ KB_END = 77,
51
+ KB_PRINT_SCREEN = 70,
52
+ KB_SCROLL_LOCK = 71,
53
+ KB_PAUSE = 72,
54
+ KB_INSERT = 73,
55
+ KB_DELETE = 76,
56
+ KB_PAGE_UP = 75,
57
+ KB_PAGE_DOWN = 78,
58
+ KB_ENTER = 88,
59
+ KB_BACKTICK = 53,
60
+ KB_MINUS = 45,
61
+ KB_EQUALS = 46,
62
+ KB_LEFT_BRACKET = 47,
63
+ KB_RIGHT_BRACKET = 48,
64
+ KB_BACKSLASH = 49,
65
+ KB_SEMICOLON = 51,
66
+ KB_APOSTROPHE = 52,
67
+ KB_COMMA = 54,
68
+ KB_PERIOD = 55,
69
+ KB_SLASH = 56,
70
+ KB_CAPS_LOCK = 57,
71
+ KB_A = 4,
72
+ KB_B = 5,
73
+ KB_C = 6,
74
+ KB_D = 7,
75
+ KB_E = 8,
76
+ KB_F = 9,
77
+ KB_G = 10,
78
+ KB_H = 11,
79
+ KB_I = 12,
80
+ KB_J = 13,
81
+ KB_K = 14,
82
+ KB_L = 15,
83
+ KB_M = 16,
84
+ KB_N = 17,
85
+ KB_O = 18,
86
+ KB_P = 19,
87
+ KB_Q = 20,
88
+ KB_R = 21,
89
+ KB_S = 22,
90
+ KB_T = 23,
91
+ KB_U = 24,
92
+ KB_V = 25,
93
+ KB_W = 26,
94
+ KB_X = 27,
95
+ KB_Y = 28,
96
+ KB_Z = 29,
97
97
  /// ` on US/UK macOS, < on EU macOS, \ on US/UK Windows
98
- KB_ISO = 100,
99
- KB_NUMPAD_0 = 98,
100
- KB_NUMPAD_1 = 89,
101
- KB_NUMPAD_2 = 90,
102
- KB_NUMPAD_3 = 91,
103
- KB_NUMPAD_4 = 92,
104
- KB_NUMPAD_5 = 93,
105
- KB_NUMPAD_6 = 94,
106
- KB_NUMPAD_7 = 95,
107
- KB_NUMPAD_8 = 96,
108
- KB_NUMPAD_9 = 97,
109
- KB_NUMPAD_DELETE = 99,
110
- KB_NUMPAD_PLUS = 87,
111
- KB_NUMPAD_MINUS = 86,
98
+ KB_ISO = 100,
99
+ KB_NUMPAD_0 = 98,
100
+ KB_NUMPAD_1 = 89,
101
+ KB_NUMPAD_2 = 90,
102
+ KB_NUMPAD_3 = 91,
103
+ KB_NUMPAD_4 = 92,
104
+ KB_NUMPAD_5 = 93,
105
+ KB_NUMPAD_6 = 94,
106
+ KB_NUMPAD_7 = 95,
107
+ KB_NUMPAD_8 = 96,
108
+ KB_NUMPAD_9 = 97,
109
+ KB_NUMPAD_DELETE = 99,
110
+ KB_NUMPAD_PLUS = 87,
111
+ KB_NUMPAD_MINUS = 86,
112
112
  KB_NUMPAD_MULTIPLY = 85,
113
- KB_NUMPAD_DIVIDE = 84,
114
- KB_RANGE_END = 0xff,
113
+ KB_NUMPAD_DIVIDE = 84,
114
+ KB_RANGE_END = 0xff,
115
115
 
116
116
  MS_RANGE_BEGIN,
117
117
  MS_LEFT = MS_RANGE_BEGIN,
@@ -1,36 +1,43 @@
1
- //! \file Directories.hpp
2
- //! Access to a small set of system paths.
3
-
4
1
  #pragma once
5
2
 
6
3
  #include <string>
7
4
 
8
5
  namespace Gosu
9
6
  {
10
- //! Changes the current directory to the result of resource_prefix().
7
+ /// Changes the current directory to the result of resource_prefix().
11
8
  void use_resource_directory();
12
9
 
13
- //! Prefix for a program's own resources.
14
- //! On Windows, the parent directory of the executable.
15
- //! On macOS, the 'Resources' directory inside the .app bundle.
16
- //! On Linux, the current directory (empty string).
17
- std::string resource_prefix();
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();
18
17
 
19
- //! Prefix for shared resources of a group of programs.
20
- //! On Windows, the parent directory of the executable.
21
- //! On macOS, the parent directory of the .app bundle.
22
- //! On Linux, the current directory (empty string).
23
- std::string shared_resource_prefix();
18
+ /// Prefix for shared resources of a group of programs, e.g. the game and its level editor.
19
+ /// <ul>
20
+ /// <li> Windows: The parent directory of the executable.
21
+ /// <li> macOS: The parent directory of the .app bundle.
22
+ /// <li> Linux: The current directory (empty string).
23
+ /// </uil>
24
+ const std::string& shared_resource_prefix();
24
25
 
25
- //! Prefix for user settings.
26
- //! On Windows, the same as %APPDATA%.
27
- //! On macOS, the user's Library/Preferences folder.
28
- //! On Linux, the home directory plus a trailing dot for hidden files.
29
- std::string user_settings_prefix();
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
+ /// </ul>
32
+ const std::string& user_settings_prefix();
30
33
 
31
- //! Prefix for user documents, e.g. saved games.
32
- //! On Windows, the My Documents folder.
33
- //! On macOS, the user's Documents folder.
34
- //! On Linux, the home directory.
35
- std::string user_documents_prefix();
34
+ /// Prefix for user documents, e.g. saved games.
35
+ /// <ul>
36
+ /// <li> Windows: The "My Documents" folder.
37
+ /// <li> macOS: The user's "Documents" folder.
38
+ /// <li> Linux: The home directory.
39
+ /// </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
43
  }
@@ -20,9 +20,10 @@ namespace Gosu
20
20
  public:
21
21
  /// @param name Name of a system font, or path to a TTF file (must contain '/').
22
22
  /// @param height Height of the font, in pixels.
23
- /// @param flags Flags used to render individual characters of the font (FontFlags enum).
23
+ /// @param font_flags Flags used to render individual characters of the font (FontFlags enum).
24
+ /// @param image_flags Flags used to render individual characters of the font (ImageFlags enum).
24
25
  explicit Font(int height, const std::string& name = default_font_name(),
25
- unsigned flags = 0);
26
+ unsigned font_flags = 0, unsigned image_flags = 0);
26
27
 
27
28
  /// Returns the name of the font that was used to create it, i.e. the filename, nor the
28
29
  /// internal TTF name. (TODO: Why not?)
@@ -33,6 +34,7 @@ namespace Gosu
33
34
 
34
35
  /// Returns the flags used to render the characters of the font (FontFlags enum).
35
36
  unsigned flags() const;
37
+ unsigned image_flags() const;
36
38
 
37
39
  /// Returns the width, in pixels, that the given text would occupy if drawn.
38
40
  double text_width(const std::string& text) const;
@@ -1,11 +1,8 @@
1
- //! \file Gosu.hpp
2
- //! Umbrella header for all of Gosu.
3
-
4
- //! \mainpage Gosu C++ Documentation
5
- //!
6
- //! These pages serve as a reference on the C++ interface of Gosu. For a higher-level
7
- //! discussion of concepts and ideas behind the library, see the Wiki entries linked
8
- //! from the official website, https://www.libgosu.org/.
1
+ /// \mainpage Gosu C++ Documentation
2
+ ///
3
+ /// These pages serve as a reference on the C++ interface of Gosu. For a higher-level
4
+ /// discussion of concepts and ideas behind the library, see the Wiki entries linked
5
+ /// from the official website, https://www.libgosu.org/.
9
6
 
10
7
  #pragma once
11
8
 
data/include/Gosu/IO.hpp CHANGED
@@ -1,6 +1,3 @@
1
- //! \file IO.hpp
2
- //! Contains everything related to input and output.
3
-
4
1
  #pragma once
5
2
 
6
3
  #include <Gosu/Platform.hpp>
@@ -24,7 +24,7 @@ namespace Gosu
24
24
 
25
25
  /// Manages initialization and shutdown of the input system.
26
26
  /// Only one Input instance can exist per application.
27
- class Input : Noncopyable
27
+ class Input : private Noncopyable
28
28
  {
29
29
  struct Impl;
30
30
  std::unique_ptr<Impl> pimpl;
@@ -107,5 +107,11 @@ namespace Gosu
107
107
  TextInput* text_input() const;
108
108
  //! Sets the currently active TextInput, or resets it to the nullptr.
109
109
  void set_text_input(TextInput* input);
110
+
111
+ /// Returns the contents of the clipboard as plain text, or an empty string if none is available.
112
+ static std::string clipboard();
113
+
114
+ /// Replaces the contents of the clipboard with the given string.
115
+ static void set_clipboard(const std::string& text);
110
116
  };
111
117
  }
@@ -1,6 +1,3 @@
1
- //! \file Math.hpp
2
- //! Contains simple math functionality.
3
-
4
1
  #pragma once
5
2
 
6
3
  #include <cmath>
@@ -2,6 +2,7 @@
2
2
 
3
3
  #include <Gosu/Fwd.hpp>
4
4
  #include <Gosu/Platform.hpp>
5
+ #include <Gosu/Utility.hpp>
5
6
  #include <memory>
6
7
  #include <string>
7
8
 
@@ -15,11 +16,10 @@ namespace Gosu
15
16
  /// build a text that can be accessed via TextInput::text().
16
17
  /// A TextInput object has no built-in UI. It is up to you to actually draw a text field.
17
18
  /// TextInput only provides a portable base for your own GUI to build upon.
18
- class TextInput
19
+ class TextInput : private Noncopyable
19
20
  {
20
21
  struct Impl;
21
- // Non-movable (const) to avoid dangling references to TextInput instances.
22
- const std::unique_ptr<Impl> m_impl;
22
+ std::unique_ptr<Impl> m_impl;
23
23
 
24
24
  public:
25
25
  TextInput();
@@ -1,14 +1,11 @@
1
- //! \file Timing.hpp
2
- //! Functions for timing.
3
-
4
1
  #pragma once
5
2
 
6
3
  namespace Gosu
7
4
  {
8
- //! Freezes the current thread for at least the specified time.
5
+ /// Freezes the current thread for the given amount of milliseconds.
9
6
  void sleep(unsigned milliseconds);
10
7
 
11
- //! Returns the milliseconds since first calling this function.
12
- //! Can wrap after running for a long time.
8
+ /// Returns the milliseconds since first calling this function.
9
+ /// Can wrap after running for a long time.
13
10
  unsigned long milliseconds();
14
11
  }
@@ -4,7 +4,7 @@
4
4
 
5
5
  #define GOSU_MAJOR_VERSION 1
6
6
  #define GOSU_MINOR_VERSION 4
7
- #define GOSU_POINT_VERSION 1
7
+ #define GOSU_POINT_VERSION 4
8
8
 
9
9
  namespace Gosu
10
10
  {
@@ -3,6 +3,7 @@
3
3
  #include <Gosu/Fwd.hpp>
4
4
  #include <Gosu/Input.hpp>
5
5
  #include <Gosu/Platform.hpp>
6
+ #include <Gosu/Utility.hpp>
6
7
  #include <memory>
7
8
  #include <string>
8
9
 
@@ -19,10 +20,10 @@ namespace Gosu
19
20
  /// Convenient all-in-one class that serves as the foundation of a standard Gosu application.
20
21
  /// Manages initialization of all of Gosu's core components and provides timing functionality.
21
22
  /// Note that you can only use one instance of this class at the same time.
22
- class Window
23
+ class Window : private Noncopyable
23
24
  {
24
25
  struct Impl;
25
- const std::unique_ptr<Impl> m_impl;
26
+ std::unique_ptr<Impl> m_impl;
26
27
 
27
28
  public:
28
29
  /// Constructs a Window.
data/rdoc/gosu.rb CHANGED
@@ -272,6 +272,7 @@ module Gosu
272
272
  # @option options [bool] :bold (false)
273
273
  # @option options [bool] :italic (false)
274
274
  # @option options [bool] :underline (false)
275
+ # @option options [bool] :retro (false) see Gosu::Image
275
276
  #
276
277
  # @overload initialize(height, options = {})
277
278
  # @overload initialize(window, font_name, height)
@@ -1042,6 +1043,19 @@ module Gosu
1042
1043
  #
1043
1044
  def axis(id); end
1044
1045
 
1046
+ ##
1047
+ # Returns the contents of the clipboard as plain text, or an empty string if none is available.
1048
+ #
1049
+ # @return [String]
1050
+ def clipboard(); end
1051
+
1052
+ ##
1053
+ # Replaces the contents of the clipboard with the given string.
1054
+ #
1055
+ # @return [nil]
1056
+ def clipboard=(text); end
1057
+
1058
+
1045
1059
  # @!group Drawing primitives
1046
1060
 
1047
1061
  ##
@@ -1295,7 +1309,7 @@ module Gosu
1295
1309
  # @see char_to_button_id
1296
1310
  # @see Window#text_input
1297
1311
  # @see TextInput
1298
- def self.button_id_to_char(id); end
1312
+ def button_id_to_char(id); end
1299
1313
 
1300
1314
  ##
1301
1315
  # Returns the button that usually produces a character, if any.
@@ -1306,7 +1320,7 @@ module Gosu
1306
1320
  # @see button_id_to_char
1307
1321
  # @see Window#text_input
1308
1322
  # @see TextInput
1309
- def self.char_to_button_id(char); end
1323
+ def char_to_button_id(char); end
1310
1324
 
1311
1325
  ##
1312
1326
  # @return [Float] a random number in the range [min; max).
data/src/Audio.cpp CHANGED
@@ -13,7 +13,7 @@ static Gosu::Song* cur_song = nullptr;
13
13
  // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
14
14
  static bool cur_song_looping;
15
15
 
16
- struct Gosu::Sample::Impl : Gosu::Noncopyable
16
+ struct Gosu::Sample::Impl : private Gosu::Noncopyable
17
17
  {
18
18
  ALuint buffer;
19
19
 
@@ -76,7 +76,7 @@ Gosu::Channel Gosu::Sample::play_pan(double pan, double volume, double speed, bo
76
76
  }
77
77
 
78
78
  // AudioFile impl
79
- struct Gosu::Song::Impl : Gosu::Noncopyable
79
+ struct Gosu::Song::Impl : private Gosu::Noncopyable
80
80
  {
81
81
  private:
82
82
  double m_volume = 1.0;
@@ -35,7 +35,7 @@ static void throw_os_error(OSStatus status, unsigned line)
35
35
 
36
36
  #define CHECK_OS(status) do { if (status) throw_os_error(status, __LINE__); } while (0)
37
37
 
38
- struct Gosu::AudioFile::Impl : Gosu::Noncopyable
38
+ struct Gosu::AudioFile::Impl : private Gosu::Noncopyable
39
39
  {
40
40
  Buffer buffer;
41
41
  AudioFileID file_id;
@@ -14,7 +14,7 @@
14
14
  #include <mutex>
15
15
  #include <vector>
16
16
 
17
- struct Gosu::AudioFile::Impl : Gosu::Noncopyable
17
+ struct Gosu::AudioFile::Impl : private Gosu::Noncopyable
18
18
  {
19
19
  Buffer buffer;
20
20
 
data/src/AudioImpl.cpp CHANGED
@@ -33,13 +33,6 @@ bool Gosu::al_initialized()
33
33
  return _device != nullptr;
34
34
  }
35
35
 
36
- ALCdevice* Gosu::al_device()
37
- {
38
- al_initialize();
39
-
40
- return _device;
41
- }
42
-
43
36
  ALCcontext* Gosu::al_context()
44
37
  {
45
38
  al_initialize();
data/src/AudioImpl.hpp CHANGED
@@ -3,7 +3,7 @@
3
3
  #include <Gosu/Audio.hpp>
4
4
  #include <Gosu/Platform.hpp>
5
5
  #ifdef GOSU_IS_IPHONE
6
- // Ignore OpenAL deprecation warnings. If macOS stops shipping OpenAL, it's more likely that we bundle our own version
6
+ // Ignore OpenAL deprecation warnings. If iOS stops shipping OpenAL, it's more likely that we bundle our own version
7
7
  // of it than that we switch to another audio API.
8
8
  #define OPENAL_DEPRECATED
9
9
  #include <OpenAL/al.h>
@@ -18,8 +18,6 @@ namespace Gosu
18
18
  void al_initialize();
19
19
  bool al_initialized();
20
20
 
21
- // Will initialize OpenAL if necessary.
22
- ALCdevice* al_device();
23
21
  // Will initialize OpenAL if necessary.
24
22
  ALCcontext* al_context();
25
23
 
data/src/BitmapIO.cpp CHANGED
@@ -39,6 +39,26 @@ static bool is_bmp(Gosu::Reader reader)
39
39
  return magic_bytes[0] == 'B' && magic_bytes[1] == 'M';
40
40
  }
41
41
 
42
+ /// Returns a copy of the given Gosu::Image with the alpha channel removed.
43
+ /// Every pixel with alpha==0 will be replaced by Gosu::Color::FUCHSIA.
44
+ static std::vector<Gosu::Color::Channel> bitmap_to_rgb(const Gosu::Bitmap& bmp)
45
+ {
46
+ std::vector<Gosu::Color::Channel> rgb(static_cast<std::size_t>(bmp.width() * bmp.height() * 3));
47
+ for (std::size_t offset = 0; offset < rgb.size(); offset += 3) {
48
+ const Gosu::Color& color = bmp.data()[offset / 3];
49
+ if (color.alpha == 0) {
50
+ rgb[offset + 0] = 0xff;
51
+ rgb[offset + 1] = 0x00;
52
+ rgb[offset + 2] = 0xff;
53
+ } else {
54
+ rgb[offset + 0] = color.red;
55
+ rgb[offset + 1] = color.green;
56
+ rgb[offset + 2] = color.blue;
57
+ }
58
+ }
59
+ return rgb;
60
+ }
61
+
42
62
  Gosu::Bitmap Gosu::load_image_file(const std::string& filename)
43
63
  {
44
64
  Buffer buffer;
@@ -80,7 +100,8 @@ void Gosu::save_image_file(const Gosu::Bitmap& bitmap, const std::string& filena
80
100
  int ok;
81
101
 
82
102
  if (has_extension(filename, "bmp")) {
83
- ok = stbi_write_bmp(filename.c_str(), bitmap.width(), bitmap.height(), 4, bitmap.data());
103
+ ok = stbi_write_bmp(filename.c_str(), bitmap.width(), bitmap.height(), 3,
104
+ bitmap_to_rgb(bitmap).data());
84
105
  }
85
106
  else if (has_extension(filename, "tga")) {
86
107
  ok = stbi_write_tga(filename.c_str(), bitmap.width(), bitmap.height(), 4, bitmap.data());
@@ -106,7 +127,7 @@ void Gosu::save_image_file(const Gosu::Bitmap& bitmap, Gosu::Writer writer,
106
127
 
107
128
  if (has_extension(format_hint, "bmp")) {
108
129
  ok = stbi_write_bmp_to_func(stbi_write_to_writer, &writer, bitmap.width(), bitmap.height(),
109
- 4, bitmap.data());
130
+ 3, bitmap_to_rgb(bitmap).data());
110
131
  }
111
132
  else if (has_extension(format_hint, "tga")) {
112
133
  stbi_write_tga_with_rle = 0;
@@ -4,7 +4,7 @@
4
4
  #include <vector>
5
5
  using namespace std;
6
6
 
7
- struct Gosu::BlockAllocator::Impl : Gosu::Noncopyable
7
+ struct Gosu::BlockAllocator::Impl : private Gosu::Noncopyable
8
8
  {
9
9
  unsigned width, height;
10
10