gosu 1.2.0 → 1.3.0

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.
data/src/RubyGosu.h CHANGED
@@ -37,6 +37,7 @@ public:
37
37
  virtual void draw();
38
38
  virtual bool needs_redraw() const;
39
39
  virtual bool needs_cursor() const;
40
+ virtual void gain_focus();
40
41
  virtual void lose_focus();
41
42
  virtual void release_memory();
42
43
  virtual void button_down(Gosu::Button arg0);
data/src/Text.cpp CHANGED
@@ -1,36 +1,34 @@
1
+ #include "GraphicsImpl.hpp"
1
2
  #include "MarkupParser.hpp"
2
3
  #include "TextBuilder.hpp"
3
- #include "GraphicsImpl.hpp"
4
4
  #include "TrueTypeFont.hpp"
5
5
  #include <Gosu/Text.hpp>
6
- #include <cassert>
7
- #include <cmath>
8
6
  #include <algorithm>
9
- #include <vector>
7
+ #include <cmath>
10
8
  #include <stdexcept>
11
- using namespace std;
9
+ #include <vector>
12
10
 
13
- double Gosu::text_width(const u32string& text,
14
- const string& font_name, double font_height, unsigned font_flags)
11
+ double Gosu::text_width(const std::u32string& text,
12
+ const std::string& font_name, double font_height, unsigned font_flags)
15
13
  {
16
- if (font_height <= 0) throw invalid_argument("font_height must be > 0");
17
- if (font_flags >= FF_COMBINATIONS) throw invalid_argument("Invalid font_flags");
18
-
19
- auto& font = font_by_name(font_name, font_flags);
14
+ if (font_height <= 0) throw std::invalid_argument{"font_height must be > 0"};
15
+ if (font_flags >= FF_COMBINATIONS) throw std::invalid_argument{"Invalid font_flags"};
16
+
17
+ TrueTypeFont& font = font_by_name(font_name, font_flags);
20
18
  return font.draw_text(text, font_height, nullptr, 0, 0, Gosu::Color::NONE);
21
19
  }
22
20
 
23
- double Gosu::draw_text(Bitmap& bitmap, double x, double y, Color c, const u32string& text,
24
- const string& font_name, double font_height, unsigned font_flags)
21
+ double Gosu::draw_text(Bitmap& bitmap, double x, double y, Color c, const std::u32string& text,
22
+ const std::string& font_name, double font_height, unsigned font_flags)
25
23
  {
26
- if (font_height <= 0) throw invalid_argument("font_height must be > 0");
27
- if (font_flags >= FF_COMBINATIONS) throw invalid_argument("Invalid font_flags");
24
+ if (font_height <= 0) throw std::invalid_argument("font_height must be > 0");
25
+ if (font_flags >= FF_COMBINATIONS) throw std::invalid_argument("Invalid font_flags");
28
26
 
29
- auto& font = font_by_name(font_name, font_flags);
27
+ TrueTypeFont& font = font_by_name(font_name, font_flags);
30
28
  return font.draw_text(text, font_height, &bitmap, x, y, c);
31
29
  }
32
30
 
33
- Gosu::Bitmap Gosu::layout_text(const string& text, const string& font_name,
31
+ Gosu::Bitmap Gosu::layout_text(const std::string& text, const std::string& font_name,
34
32
  double font_height, double line_spacing,
35
33
  int width, Alignment align, unsigned font_flags)
36
34
  {
@@ -40,55 +38,56 @@ Gosu::Bitmap Gosu::layout_text(const string& text, const string& font_name,
40
38
  width, align, font_flags);
41
39
  }
42
40
 
43
- Gosu::Bitmap Gosu::layout_markup(const string& markup, const string& font_name,
41
+ Gosu::Bitmap Gosu::layout_markup(const std::string& markup, const std::string& font_name,
44
42
  double font_height, double line_spacing,
45
43
  int width, Alignment align, unsigned font_flags)
46
44
  {
47
- if (font_height <= 0) throw invalid_argument("font_height must be > 0");
48
- if (line_spacing < -font_height) throw invalid_argument("line_spacing must be ≥ -font_height");
49
- if (font_flags >= FF_COMBINATIONS) throw invalid_argument("Invalid font_flags");
45
+ if (font_height <= 0) throw std::invalid_argument{"font_height must be > 0"};
46
+ if (line_spacing < -font_height) throw std::invalid_argument{"line_spacing must be ≥ -font_height"};
47
+ if (font_flags >= FF_COMBINATIONS) throw std::invalid_argument{"Invalid font_flags"};
50
48
 
51
49
  if (width >= 0) {
52
- TextBuilder text_builder(font_name, font_height, line_spacing, width, align);
50
+ TextBuilder text_builder{font_name, static_cast<int>(font_height),
51
+ static_cast<int>(line_spacing), width, align};
53
52
 
54
53
  // Feed all formatted substrings to the TextBuilder, which will construct the result.
55
54
  // Split the input string into words, because this method implements word-wrapping.
56
- MarkupParser parser(font_flags, true, [&text_builder](vector<FormattedString> word) {
55
+ MarkupParser parser{font_flags, true, [&text_builder](std::vector<FormattedString> word) {
57
56
  text_builder.feed_word(move(word));
58
- });
57
+ }};
59
58
  parser.parse(markup);
60
59
 
61
60
  return text_builder.move_into_bitmap();
62
61
  }
63
62
  else {
64
- vector<vector<FormattedString>> lines;
63
+ std::vector<std::vector<FormattedString>> lines;
65
64
 
66
65
  // Split the text into lines (split_words = false) since this method does not wrap lines.
67
- MarkupParser parser(font_flags, false, [&lines](vector<FormattedString>&& line) {
66
+ MarkupParser parser{font_flags, false, [&lines](std::vector<FormattedString>&& line) {
68
67
  // Remove trailing \n characters from each line to avoid errors from Gosu::text_width().
69
- if (line.back().text.back() == '\n') {
68
+ if (!line.back().text.empty() && line.back().text.back() == '\n') {
70
69
  line.back().text.pop_back();
71
70
  }
72
71
 
73
72
  lines.emplace_back(line);
74
- });
73
+ }};
75
74
  parser.parse(markup);
76
75
 
77
76
  if (lines.empty()) return Bitmap();
78
77
 
79
78
  // Measure every part of every line.
80
- vector<double> line_widths;
79
+ std::vector<double> line_widths;
81
80
  double max_width = 0;
82
81
  for (auto& line : lines) {
83
82
  line_widths.push_back(0);
84
83
  for (auto& part : line) {
85
84
  line_widths.back() += text_width(part.text, font_name, font_height, part.flags);
86
85
  }
87
- max_width = max(max_width, line_widths.back());
86
+ max_width = std::max(max_width, line_widths.back());
88
87
  }
89
88
 
90
- double height = lines.size() * font_height + (lines.size() - 1) * line_spacing;
91
- Bitmap result(ceil(max_width), ceil(height));
89
+ double height = lines.size() * font_height + (lines.size() - 1.0) * line_spacing;
90
+ Bitmap result{static_cast<int>(std::ceil(max_width)), static_cast<int>(std::ceil(height))};
92
91
 
93
92
  // Render every part of every line.
94
93
  double y = 0;
data/src/TrueTypeFont.cpp CHANGED
@@ -182,7 +182,7 @@ struct Gosu::TrueTypeFont::Impl
182
182
  for (int rel_y = 0; rel_y < h; ++rel_y) {
183
183
  for (int rel_x = 0; rel_x < w; ++rel_x) {
184
184
  int pixel = pixels[(src_y + rel_y) * stride + src_x + rel_x];
185
- Color c_with_alpha(pixel * c.alpha() / 255, c.red(), c.green(), c.blue());
185
+ Color c_with_alpha = c.with_alpha(pixel * c.alpha / 255);
186
186
  bitmap.blend_pixel(x + rel_x, y + rel_y, c_with_alpha);
187
187
  }
188
188
  }
@@ -4,7 +4,6 @@
4
4
  #include "TrueTypeFont.hpp"
5
5
  #include "Log.hpp"
6
6
 
7
- #include <Gosu/IO.hpp>
8
7
  #include <Gosu/Text.hpp>
9
8
 
10
9
  #import <CoreText/CoreText.h>
data/src/Utility.cpp CHANGED
@@ -1,6 +1,6 @@
1
+ #include <Gosu/Platform.hpp>
1
2
  #include <Gosu/Utility.hpp>
2
3
 
3
- #include <SDL.h>
4
4
  #include <utf8proc.h>
5
5
 
6
6
  #include <cstring>
@@ -66,7 +66,33 @@ bool Gosu::has_extension(std::string_view filename, std::string_view extension)
66
66
  return true;
67
67
  }
68
68
 
69
+ #ifdef GOSU_IS_IPHONE
70
+ #import <Foundation/Foundation.h>
71
+ #include <regex>
72
+
73
+ std::vector<std::string> Gosu::user_languages()
74
+ {
75
+ static const std::regex language_regex{"([a-z]{2})-([A-Z]{2})([^A-Z].*)?"};
76
+
77
+ std::vector<std::string> user_languages;
78
+
79
+ @autoreleasepool {
80
+ for (NSString* language in [NSLocale preferredLanguages]) {
81
+ std::string language_str = language.UTF8String;
82
+ std::smatch match;
83
+ if (std::regex_match(language_str, match, language_regex)) {
84
+ user_languages.push_back(match.str(1) + "_" + match.str(2));
85
+ }
86
+ }
87
+ }
88
+
89
+ return user_languages;
90
+ }
91
+
92
+ #else
93
+ #include <SDL.h>
69
94
  #if SDL_VERSION_ATLEAST(2, 0, 14)
95
+
70
96
  std::vector<std::string> Gosu::user_languages()
71
97
  {
72
98
  std::vector<std::string> user_languages;
@@ -85,6 +111,7 @@ std::vector<std::string> Gosu::user_languages()
85
111
 
86
112
  return user_languages;
87
113
  }
114
+
88
115
  #else
89
116
  #include <cstdlib>
90
117
  #include <regex>
@@ -96,9 +123,12 @@ std::vector<std::string> Gosu::user_languages()
96
123
  const char* locale = std::getenv("LANG");
97
124
 
98
125
  if (locale && std::regex_match(locale, language_regex)) {
126
+ // Trim off anything after the language code.
99
127
  return {std::string{locale, locale + 5}};
100
128
  }
101
129
 
102
130
  return {};
103
131
  }
132
+
133
+ #endif
104
134
  #endif
data/src/WinUtility.hpp CHANGED
@@ -12,7 +12,8 @@ namespace Gosu
12
12
 
13
13
  //! Throws an exception according to the error returned by GetLastError(), optionally prefixed
14
14
  //! with "While (action), the following error occured: ".
15
- GOSU_NORETURN void throw_last_winapi_error(const std::string& action = "");
15
+ [[noreturn]]
16
+ void throw_last_winapi_error(const std::string& action = "");
16
17
 
17
18
  //! Small helper function that throws the last Windows error when val_to_check is false.
18
19
  template<typename T>
data/src/Window.cpp CHANGED
@@ -317,6 +317,14 @@ bool Gosu::Window::tick()
317
317
  }
318
318
  break;
319
319
  }
320
+ case SDL_WINDOWEVENT_FOCUS_GAINED: {
321
+ gain_focus();
322
+ break;
323
+ }
324
+ case SDL_WINDOWEVENT_FOCUS_LOST: {
325
+ lose_focus();
326
+ break;
327
+ }
320
328
  default: {
321
329
  break;
322
330
  }
data/src/WindowUIKit.cpp CHANGED
@@ -25,8 +25,8 @@ Gosu::Window::Window(int width, int height, unsigned window_flags, double update
25
25
  pimpl->controller.gosuWindow = this;
26
26
  pimpl->window.rootViewController = pimpl->controller;
27
27
 
28
- // It is important to load the view before creating the Graphics instance.
29
- [pimpl->controller loadView];
28
+ // It is important to (implicitly) load the view before creating the Graphics instance.
29
+ [pimpl->controller view];
30
30
 
31
31
  pimpl->graphics.reset(new Graphics(screen_width(), screen_height()));
32
32
  pimpl->graphics->set_resolution(width, height);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gosu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Raschke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-18 00:00:00.000000000 Z
11
+ date: 2022-01-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  2D game development library.
@@ -314,7 +314,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
314
314
  - !ruby/object:Gem::Version
315
315
  version: '0'
316
316
  requirements: []
317
- rubygems_version: 3.1.4
317
+ rubygems_version: 3.2.22
318
318
  signing_key:
319
319
  specification_version: 4
320
320
  summary: 2D game development library.