gosu 1.1.0.pre2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -89,6 +89,8 @@ namespace Gosu
89
89
  //! If this function returns true, the system cursor will be visible while over the window.
90
90
  virtual bool needs_cursor() const { return true; }
91
91
 
92
+ virtual void gain_focus() {}
93
+
92
94
  //! This function is called when the window loses focus on some platforms.
93
95
  //! Most importantly, it is called on the iPhone or iPad when the user locks the screen.
94
96
  virtual void lose_focus() {}
data/lib/gosu/compat.rb CHANGED
@@ -202,4 +202,8 @@ module Gosu
202
202
  # Also import old-style constants into Gosu::Button.
203
203
  Gosu::Button.const_set old_name, Gosu.const_get(new_name)
204
204
  end
205
+
206
+ def self.language
207
+ @language_cache ||= (user_languages.first || "en_US")
208
+ end
205
209
  end
@@ -20,7 +20,7 @@ class Gosu::Window
20
20
  end
21
21
 
22
22
  %w(update draw needs_redraw? needs_cursor?
23
- lose_focus button_down button_up
23
+ gain_focus lose_focus button_down button_up
24
24
  gamepad_connected gamepad_disconnected drop).each do |callback|
25
25
  define_method "protected_#{callback}" do |*args|
26
26
  begin
@@ -35,13 +35,13 @@ class Gosu::Window
35
35
  end
36
36
  end
37
37
  end
38
-
38
+
39
39
  def protected_draw_2
40
40
  protected_draw
41
41
  $gosu_gl_blocks_2 = $gosu_gl_blocks
42
42
  $gosu_gl_blocks = nil
43
43
  end
44
-
44
+
45
45
  alias_method :show_internal, :show
46
46
  def show
47
47
  show_internal
@@ -54,6 +54,21 @@ class Gosu::Window
54
54
  raise @_exception
55
55
  end
56
56
  end
57
+
58
+ alias_method :tick_internal, :tick
59
+ def tick
60
+ value = tick_internal
61
+ # Try to format the message nicely, without any useless patching that we are
62
+ # doing here.
63
+ if defined? @_exception
64
+ if @_exception.backtrace.is_a? Array and not @_exception.backtrace.frozen?
65
+ @_exception.backtrace.reject! { |line| line.include? "lib/gosu/swig_patches.rb" }
66
+ end
67
+ raise @_exception
68
+ end
69
+
70
+ value
71
+ end
57
72
  end
58
73
 
59
74
  module Gosu
@@ -73,6 +88,19 @@ end
73
88
  # SWIG somehow maps the instance method "argb" as an overload of the class
74
89
  # method of the same name.
75
90
  class Gosu::Color
91
+ alias_method :initialize_without_argb, :initialize
92
+
93
+ # The (a,r,g,b) constructor overload was dropped in C++ to reduce ambiguity,
94
+ # adding it via %extend in gosu.i does not work, so patch it here.
95
+ def initialize(*args)
96
+ if args.size == 4
97
+ initialize_without_argb(args[1], args[2], args[3])
98
+ self.alpha = args[0]
99
+ else
100
+ initialize_without_argb(*args)
101
+ end
102
+ end
103
+
76
104
  alias_method :argb, :to_i
77
105
  end
78
106
 
data/rdoc/gosu.rb CHANGED
@@ -481,7 +481,7 @@ module Gosu
481
481
  # Draws the image rotated, with its rotational center at (x, y).
482
482
  #
483
483
  # @return [void]
484
- # @param angle [Float]
484
+ # @param angle [Float] the angle to rotate, in degrees.
485
485
  # @param center_x [Float] the relative horizontal rotation origin.
486
486
  # @param center_y [Float] the relative vertical rotation origin.
487
487
  # @param (see #draw)
@@ -960,6 +960,14 @@ module Gosu
960
960
  # @see Gosu.gamepad_name
961
961
  def gamepad_disconnected(index); end
962
962
 
963
+ ##
964
+ # Called when the window gains focus
965
+ def gain_focus; end
966
+
967
+ ##
968
+ # Called when the windows loses focus
969
+ def lose_focus; end
970
+
963
971
  # @!endgroup
964
972
  end
965
973
 
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() == 0) return;
34
+ if (c.alpha == 0) return;
35
35
 
36
36
  Color out = get_pixel(x, y);
37
- if (out.alpha() == 0) {
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() * (255 - c.alpha()) / 255;
42
+ int inv_alpha = out.alpha * (255 - c.alpha) / 255;
43
43
 
44
- out.set_alpha(c.alpha() + inv_alpha);
45
- out.set_red ((c.red() * c.alpha() + out.red() * inv_alpha) / out.alpha());
46
- out.set_green((c.green() * c.alpha() + out.green() * inv_alpha) / out.alpha());
47
- out.set_blue ((c.blue() * c.alpha() + out.blue() * inv_alpha) / out.alpha());
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.set_red(red / neighbors);
125
- replacement.set_green(green / neighbors);
126
- replacement.set_blue(blue / neighbors);
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/Color.cpp CHANGED
@@ -9,9 +9,9 @@ namespace
9
9
 
10
10
  HSV color_to_hsv(const Gosu::Color& c)
11
11
  {
12
- double r = c.red() / 255.0;
13
- double g = c.green() / 255.0;
14
- double b = c.blue() / 255.0;
12
+ double r = c.red / 255.0;
13
+ double g = c.green / 255.0;
14
+ double b = c.blue / 255.0;
15
15
 
16
16
  double min = std::min(std::min(r, g), b);
17
17
  double max = std::max(std::max(r, g), b);
@@ -22,7 +22,7 @@ namespace
22
22
  return hsv;
23
23
  }
24
24
 
25
- HSV hsv;
25
+ HSV hsv{};
26
26
 
27
27
  // Value.
28
28
  hsv.v = max;
@@ -50,38 +50,33 @@ namespace
50
50
  }
51
51
 
52
52
  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
53
  {
59
54
  // Normalize hue so that is always in the [0, 360) range and wraps around.
60
55
  h = normalize_angle(h);
61
56
  // 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
-
57
+ s = std::clamp(s, 0.0, 1.0);
58
+ v = std::clamp(v, 0.0, 1.0);
59
+
65
60
  int sector = static_cast<int>(h / 60);
66
61
  double factorial = h / 60 - sector;
67
-
68
- double p = v * (1 - s);
69
- double q = v * (1 - s * factorial);
70
- double t = v * (1 - s * (1 - factorial));
71
-
62
+
63
+ Channel p = static_cast<Channel>(255 * v * (1 - s));
64
+ Channel q = static_cast<Channel>(255 * v * (1 - s * factorial));
65
+ Channel t = static_cast<Channel>(255 * v * (1 - s * (1 - factorial)));
66
+
72
67
  switch (sector) {
73
68
  case 0:
74
- return Color(alpha, v * 255, t * 255, p * 255);
69
+ return Color{static_cast<Channel>(255 * v), t, p};
75
70
  case 1:
76
- return Color(alpha, q * 255, v * 255, p * 255);
71
+ return Color{q, static_cast<Channel>(255 * v), p};
77
72
  case 2:
78
- return Color(alpha, p * 255, v * 255, t * 255);
73
+ return Color{p, static_cast<Channel>(255 * v), t};
79
74
  case 3:
80
- return Color(alpha, p * 255, q * 255, v * 255);
75
+ return Color{p, q, static_cast<Channel>(255 * v)};
81
76
  case 4:
82
- return Color(alpha, t * 255, p * 255, v * 255);
77
+ return Color{t, p, static_cast<Channel>(255 * v)};
83
78
  default: // sector 5
84
- return Color(alpha, v * 255, p * 255, q * 255);
79
+ return Color{static_cast<Channel>(255 * v), p, q};
85
80
  }
86
81
  }
87
82
 
@@ -92,7 +87,7 @@ double Gosu::Color::hue() const
92
87
 
93
88
  void Gosu::Color::set_hue(double h)
94
89
  {
95
- *this = from_ahsv(alpha(), h, saturation(), value());
90
+ *this = from_hsv(h, saturation(), value()).with_alpha(alpha);
96
91
  }
97
92
 
98
93
  double Gosu::Color::saturation() const
@@ -102,7 +97,7 @@ double Gosu::Color::saturation() const
102
97
 
103
98
  void Gosu::Color::set_saturation(double s)
104
99
  {
105
- *this = from_ahsv(alpha(), hue(), s, value());
100
+ *this = from_hsv(hue(), s, value()).with_alpha(alpha);
106
101
  }
107
102
 
108
103
  double Gosu::Color::value() const
@@ -112,33 +107,42 @@ double Gosu::Color::value() const
112
107
 
113
108
  void Gosu::Color::set_value(double v)
114
109
  {
115
- *this = from_ahsv(alpha(), hue(), saturation(), v);
110
+ *this = from_hsv(hue(), saturation(), v).with_alpha(alpha);
116
111
  }
117
112
 
118
- Gosu::Color Gosu::interpolate(Color a, Color b, double weight)
113
+ Gosu::Color Gosu::lerp(Color a, Color b, double t)
119
114
  {
120
- return Color(clamp<long>(round(interpolate(a.alpha(), b.alpha(), weight)), 0, 255),
121
- clamp<long>(round(interpolate(a.red(), b.red(), weight)), 0, 255),
122
- clamp<long>(round(interpolate(a.green(), b.green(), weight)), 0, 255),
123
- clamp<long>(round(interpolate(a.blue(), b.blue(), weight)), 0, 255));
115
+ const auto lerp_channel = [](Color::Channel a, Color::Channel b, double t) {
116
+ return static_cast<Color::Channel>(std::clamp(std::round(lerp(a, b, t)), 0.0, 255.0));
117
+ };
118
+
119
+ Color result;
120
+ result.red = lerp_channel(a.red, b.red, t);
121
+ result.green = lerp_channel(a.green, b.green, t);
122
+ result.blue = lerp_channel(a.blue, b.blue, t);
123
+ result.alpha = lerp_channel(a.alpha, b.alpha, t);
124
+ return result;
124
125
  }
125
126
 
126
127
  Gosu::Color Gosu::multiply(Color a, Color b)
127
128
  {
128
- return Color(round(a.alpha() * b.alpha() / 255.0),
129
- round(a.red() * b.red() / 255.0),
130
- round(a.green() * b.green() / 255.0),
131
- round(a.blue() * b.blue() / 255.0));
129
+ Color result;
130
+ result.red = static_cast<Color::Channel>(std::round(a.red * b.red / 255.0));
131
+ result.green = static_cast<Color::Channel>(std::round(a.green * b.green / 255.0));
132
+ result.blue = static_cast<Color::Channel>(std::round(a.blue * b.blue / 255.0));
133
+ result.alpha = static_cast<Color::Channel>(std::round(a.alpha * b.alpha / 255.0));
134
+ return result;
132
135
  }
133
136
 
134
- const Gosu::Color Gosu::Color::NONE (0x00000000);
135
- const Gosu::Color Gosu::Color::BLACK (0xff000000);
136
- const Gosu::Color Gosu::Color::GRAY (0xff808080);
137
- const Gosu::Color Gosu::Color::WHITE (0xffffffff);
138
- const Gosu::Color Gosu::Color::AQUA (0xff00ffff);
139
- const Gosu::Color Gosu::Color::RED (0xffff0000);
140
- const Gosu::Color Gosu::Color::GREEN (0xff00ff00);
141
- const Gosu::Color Gosu::Color::BLUE (0xff0000ff);
142
- const Gosu::Color Gosu::Color::YELLOW (0xffffff00);
143
- const Gosu::Color Gosu::Color::FUCHSIA (0xffff00ff);
144
- const Gosu::Color Gosu::Color::CYAN (0xff00ffff);
137
+ const Gosu::Color Gosu::Color::NONE{0x00'000000};
138
+ const Gosu::Color Gosu::Color::BLACK{0, 0, 0};
139
+ const Gosu::Color Gosu::Color::GRAY{128, 128, 128};
140
+ const Gosu::Color Gosu::Color::WHITE{255, 255, 255};
141
+
142
+ const Gosu::Color Gosu::Color::AQUA{0, 255, 255};
143
+ const Gosu::Color Gosu::Color::RED{255, 0, 0};
144
+ const Gosu::Color Gosu::Color::GREEN{0, 255, 0};
145
+ const Gosu::Color Gosu::Color::BLUE{0, 0, 255};
146
+ const Gosu::Color Gosu::Color::YELLOW{255, 255, 0};
147
+ const Gosu::Color Gosu::Color::FUCHSIA{255, 0, 255};
148
+ const Gosu::Color Gosu::Color::CYAN{0, 255, 255};
@@ -22,7 +22,7 @@ namespace Gosu
22
22
  double, double, Color,
23
23
  double, double, Color,
24
24
  double, double, Color,
25
- ZPos, AlphaMode) const override
25
+ ZPos, BlendMode) const override
26
26
  {
27
27
  }
28
28
 
data/src/Font.cpp CHANGED
@@ -112,13 +112,13 @@ double Gosu::Font::markup_width(const string& markup) const
112
112
  }
113
113
 
114
114
  void Gosu::Font::draw_text(const string& text, double x, double y, ZPos z,
115
- double scale_x, double scale_y, Color c, AlphaMode mode) const
115
+ double scale_x, double scale_y, Color c, BlendMode mode) const
116
116
  {
117
117
  draw_markup(escape_markup(text), x, y, z, scale_x, scale_y, c, mode);
118
118
  }
119
119
 
120
120
  void Gosu::Font::draw_markup(const string& markup, double x, double y, ZPos z,
121
- double scale_x, double scale_y, Color c, AlphaMode mode) const
121
+ double scale_x, double scale_y, Color c, BlendMode mode) const
122
122
  {
123
123
  double current_y = y;
124
124
 
@@ -142,7 +142,7 @@ void Gosu::Font::draw_markup(const string& markup, double x, double y, ZPos z,
142
142
 
143
143
  void Gosu::Font::draw_text_rel(const string& text, double x, double y, ZPos z,
144
144
  double rel_x, double rel_y, double scale_x, double scale_y,
145
- Color c, AlphaMode mode) const
145
+ Color c, BlendMode mode) const
146
146
  {
147
147
  if (rel_x) x -= text_width(text) * scale_x * rel_x;
148
148
  if (rel_y) y -= height() * scale_y * rel_y;
@@ -152,7 +152,7 @@ void Gosu::Font::draw_text_rel(const string& text, double x, double y, ZPos z,
152
152
 
153
153
  void Gosu::Font::draw_markup_rel(const string& markup, double x, double y, ZPos z,
154
154
  double rel_x, double rel_y, double scale_x, double scale_y,
155
- Color c, AlphaMode mode) const
155
+ Color c, BlendMode mode) const
156
156
  {
157
157
  if (rel_x) x -= markup_width(markup) * scale_x * rel_x;
158
158
  if (rel_y) y -= height() * scale_y * rel_y;
@@ -121,6 +121,8 @@ static void handle_audio_interruption(void* unused, UInt32 inInterruptionState)
121
121
  - (void)applicationWillEnterForeground:(NSNotification*)notification
122
122
  {
123
123
  [self setupTimerOrDisplayLink];
124
+
125
+ self.gosuWindowReference.gain_focus();
124
126
  }
125
127
 
126
128
  - (void)applicationDidEnterBackground:(NSNotification*)notification
data/src/Graphics.cpp CHANGED
@@ -330,7 +330,7 @@ void Gosu::Graphics::transform(const Gosu::Transform& transform, const function<
330
330
  }
331
331
 
332
332
  void Gosu::Graphics::draw_line(double x1, double y1, Color c1,
333
- double x2, double y2, Color c2, ZPos z, AlphaMode mode)
333
+ double x2, double y2, Color c2, ZPos z, BlendMode mode)
334
334
  {
335
335
  DrawOp op;
336
336
  op.render_state.mode = mode;
@@ -343,7 +343,7 @@ void Gosu::Graphics::draw_line(double x1, double y1, Color c1,
343
343
  }
344
344
 
345
345
  void Gosu::Graphics::draw_triangle(double x1, double y1, Color c1, double x2, double y2, Color c2,
346
- double x3, double y3, Color c3, ZPos z, AlphaMode mode)
346
+ double x3, double y3, Color c3, ZPos z, BlendMode mode)
347
347
  {
348
348
  DrawOp op;
349
349
  op.render_state.mode = mode;
@@ -361,7 +361,7 @@ void Gosu::Graphics::draw_triangle(double x1, double y1, Color c1, double x2, do
361
361
  }
362
362
 
363
363
  void Gosu::Graphics::draw_quad(double x1, double y1, Color c1, double x2, double y2, Color c2,
364
- double x3, double y3, Color c3, double x4, double y4, Color c4, ZPos z, AlphaMode mode)
364
+ double x3, double y3, Color c3, double x4, double y4, Color c4, ZPos z, BlendMode mode)
365
365
  {
366
366
  normalize_coordinates(x1, y1, x2, y2, x3, y3, c3, x4, y4, c4);
367
367
 
@@ -384,7 +384,7 @@ void Gosu::Graphics::draw_quad(double x1, double y1, Color c1, double x2, double
384
384
  }
385
385
 
386
386
  void Gosu::Graphics::draw_rect(double x, double y, double width, double height, Color c,
387
- ZPos z, Gosu::AlphaMode mode)
387
+ ZPos z, Gosu::BlendMode mode)
388
388
  {
389
389
  draw_quad(x, y, c, x + width, y, c, x, y + height, c, x + width, y + height, c, z, mode);
390
390
  }
data/src/Image.cpp CHANGED
@@ -57,7 +57,7 @@ unsigned Gosu::Image::height() const
57
57
  }
58
58
 
59
59
  void Gosu::Image::draw(double x, double y, ZPos z, double scale_x, double scale_y, Color c,
60
- AlphaMode mode) const
60
+ BlendMode mode) const
61
61
  {
62
62
  double x2 = x + width() * scale_x;
63
63
  double y2 = y + height() * scale_y;
@@ -66,7 +66,7 @@ void Gosu::Image::draw(double x, double y, ZPos z, double scale_x, double scale_
66
66
  }
67
67
 
68
68
  void Gosu::Image::draw_mod(double x, double y, ZPos z, double scale_x, double scale_y, Color c1,
69
- Color c2, Color c3, Color c4, AlphaMode mode) const
69
+ Color c2, Color c3, Color c4, BlendMode mode) const
70
70
  {
71
71
  double x2 = x + width() * scale_x;
72
72
  double y2 = y + height() * scale_y;
@@ -75,7 +75,8 @@ void Gosu::Image::draw_mod(double x, double y, ZPos z, double scale_x, double sc
75
75
  }
76
76
 
77
77
  void Gosu::Image::draw_rot(double x, double y, ZPos z, double angle,
78
- double center_x, double center_y, double scale_x, double scale_y, Color c, AlphaMode mode) const
78
+ double center_x, double center_y, double scale_x, double scale_y, Color c,
79
+ BlendMode mode) const
79
80
  {
80
81
  double size_x = width() * scale_x;
81
82
  double size_y = height() * scale_y;
data/src/Input.cpp CHANGED
@@ -78,20 +78,11 @@ struct Gosu::Input::Impl
78
78
 
79
79
  void update_mouse_position()
80
80
  {
81
- #if SDL_VERSION_ATLEAST(2, 0, 5)
82
- // SDL_GetGlobalMouseState was added in SDL 2.0.4, but it only started using the same
83
- // coordinate system as SDL_GetWindowPosition on X11 in 2.0.5.
84
81
  int x, y, window_x, window_y;
85
82
  SDL_GetWindowPosition(window, &window_x, &window_y);
86
83
  SDL_GetGlobalMouseState(&x, &y);
87
84
  mouse_x = x - window_x;
88
85
  mouse_y = y - window_y;
89
- #else
90
- int x, y;
91
- SDL_GetMouseState(&x, &y);
92
- mouse_x = x;
93
- mouse_y = y;
94
- #endif
95
86
  }
96
87
 
97
88
  void set_mouse_position(double x, double y)
@@ -100,7 +91,7 @@ struct Gosu::Input::Impl
100
91
  static_cast<int>((x - mouse_offset_x) / mouse_scale_x),
101
92
  static_cast<int>((y - mouse_offset_y) / mouse_scale_y));
102
93
 
103
- #if SDL_VERSION_ATLEAST(2, 0, 4) && !defined(GOSU_IS_X)
94
+ #if !defined(GOSU_IS_X)
104
95
  // On systems where we have a working GetGlobalMouseState, we can warp the mouse and
105
96
  // retrieve its position directly afterwards.
106
97
  update_mouse_position();
@@ -69,7 +69,7 @@ void Gosu::LargeImageData::draw(double x1, double y1, Color c1,
69
69
  double x2, double y2, Color c2,
70
70
  double x3, double y3, Color c3,
71
71
  double x4, double y4, Color c4,
72
- ZPos z, AlphaMode mode) const
72
+ ZPos z, BlendMode mode) const
73
73
  {
74
74
  normalize_coordinates(x1, y1, x2, y2, x3, y3, c3, x4, y4, c4);
75
75
 
@@ -84,25 +84,25 @@ void Gosu::LargeImageData::draw(double x1, double y1, Color c1,
84
84
  double rel_y_t = y / h;
85
85
  double rel_y_b = (y + tile.height()) / h;
86
86
 
87
- #define INTERPOLATE(what, x_weight, y_weight) \
88
- interpolate(interpolate(what##1, what##3, y_weight), \
89
- interpolate(what##2, what##4, y_weight), \
90
- x_weight);
91
-
92
- double x_t_l = INTERPOLATE(x, rel_x_l, rel_y_t);
93
- double x_t_r = INTERPOLATE(x, rel_x_r, rel_y_t);
94
- double x_b_l = INTERPOLATE(x, rel_x_l, rel_y_b);
95
- double x_b_r = INTERPOLATE(x, rel_x_r, rel_y_b);
96
-
97
- double y_t_l = INTERPOLATE(y, rel_x_l, rel_y_t);
98
- double y_t_r = INTERPOLATE(y, rel_x_r, rel_y_t);
99
- double y_b_l = INTERPOLATE(y, rel_x_l, rel_y_b);
100
- double y_b_r = INTERPOLATE(y, rel_x_r, rel_y_b);
101
-
102
- Color c_t_l = INTERPOLATE(c, rel_x_l, rel_y_t);
103
- Color c_t_r = INTERPOLATE(c, rel_x_r, rel_y_t);
104
- Color c_b_l = INTERPOLATE(c, rel_x_l, rel_y_b);
105
- Color c_b_r = INTERPOLATE(c, rel_x_r, rel_y_b);
87
+ #define LERP2D(what, x_weight, y_weight) \
88
+ lerp(lerp(what##1, what##3, y_weight), \
89
+ lerp(what##2, what##4, y_weight), \
90
+ x_weight);
91
+
92
+ double x_t_l = LERP2D(x, rel_x_l, rel_y_t);
93
+ double x_t_r = LERP2D(x, rel_x_r, rel_y_t);
94
+ double x_b_l = LERP2D(x, rel_x_l, rel_y_b);
95
+ double x_b_r = LERP2D(x, rel_x_r, rel_y_b);
96
+
97
+ double y_t_l = LERP2D(y, rel_x_l, rel_y_t);
98
+ double y_t_r = LERP2D(y, rel_x_r, rel_y_t);
99
+ double y_b_l = LERP2D(y, rel_x_l, rel_y_b);
100
+ double y_b_r = LERP2D(y, rel_x_r, rel_y_b);
101
+
102
+ Color c_t_l = LERP2D(c, rel_x_l, rel_y_t);
103
+ Color c_t_r = LERP2D(c, rel_x_r, rel_y_t);
104
+ Color c_b_l = LERP2D(c, rel_x_l, rel_y_b);
105
+ Color c_b_r = LERP2D(c, rel_x_r, rel_y_b);
106
106
 
107
107
  tile.draw(x_t_l, y_t_l, c_t_l,
108
108
  x_t_r, y_t_r, c_t_r,
@@ -25,7 +25,7 @@ public:
25
25
  double x2, double y2, Color c2,
26
26
  double x3, double y3, Color c3,
27
27
  double x4, double y4, Color c4,
28
- ZPos z, AlphaMode mode) const override;
28
+ ZPos z, BlendMode mode) const override;
29
29
 
30
30
  const GLTexInfo* gl_tex_info() const override { return nullptr; }
31
31