cyberarm_engine 0.13.1 → 0.17.1
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +8 -0
- data/Gemfile +1 -1
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/assets/textures/default.png +0 -0
- data/cyberarm_engine.gemspec +12 -9
- data/lib/cyberarm_engine.rb +20 -5
- data/lib/cyberarm_engine/animator.rb +6 -4
- data/lib/cyberarm_engine/background.rb +19 -15
- data/lib/cyberarm_engine/background_nine_slice.rb +125 -0
- data/lib/cyberarm_engine/bounding_box.rb +18 -18
- data/lib/cyberarm_engine/cache.rb +4 -0
- data/lib/cyberarm_engine/cache/download_manager.rb +121 -0
- data/lib/cyberarm_engine/common.rb +16 -16
- data/lib/cyberarm_engine/config_file.rb +2 -2
- data/lib/cyberarm_engine/game_object.rb +63 -72
- data/lib/cyberarm_engine/game_state.rb +6 -3
- data/lib/cyberarm_engine/model.rb +207 -0
- data/lib/cyberarm_engine/model/material.rb +21 -0
- data/lib/cyberarm_engine/model/model_object.rb +131 -0
- data/lib/cyberarm_engine/model/parser.rb +74 -0
- data/lib/cyberarm_engine/model/parsers/collada_parser.rb +138 -0
- data/lib/cyberarm_engine/model/parsers/wavefront_parser.rb +154 -0
- data/lib/cyberarm_engine/model_cache.rb +31 -0
- data/lib/cyberarm_engine/opengl.rb +28 -0
- data/lib/cyberarm_engine/opengl/light.rb +50 -0
- data/lib/cyberarm_engine/opengl/orthographic_camera.rb +46 -0
- data/lib/cyberarm_engine/opengl/perspective_camera.rb +38 -0
- data/lib/cyberarm_engine/opengl/renderer/bounding_box_renderer.rb +249 -0
- data/lib/cyberarm_engine/opengl/renderer/g_buffer.rb +164 -0
- data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +289 -0
- data/lib/cyberarm_engine/opengl/renderer/renderer.rb +22 -0
- data/lib/cyberarm_engine/{shader.rb → opengl/shader.rb} +51 -43
- data/lib/cyberarm_engine/opengl/texture.rb +69 -0
- data/lib/cyberarm_engine/ray.rb +5 -5
- data/lib/cyberarm_engine/stats.rb +21 -0
- data/lib/cyberarm_engine/text.rb +45 -31
- data/lib/cyberarm_engine/timer.rb +1 -1
- data/lib/cyberarm_engine/transform.rb +43 -20
- data/lib/cyberarm_engine/ui/border_canvas.rb +4 -3
- data/lib/cyberarm_engine/ui/dsl.rb +49 -10
- data/lib/cyberarm_engine/ui/element.rb +73 -21
- data/lib/cyberarm_engine/ui/elements/button.rb +121 -28
- data/lib/cyberarm_engine/ui/elements/check_box.rb +25 -33
- data/lib/cyberarm_engine/ui/elements/container.rb +113 -33
- data/lib/cyberarm_engine/ui/elements/edit_box.rb +179 -0
- data/lib/cyberarm_engine/ui/elements/edit_line.rb +145 -45
- data/lib/cyberarm_engine/ui/elements/flow.rb +1 -3
- data/lib/cyberarm_engine/ui/elements/image.rb +32 -12
- data/lib/cyberarm_engine/ui/elements/label.rb +122 -16
- data/lib/cyberarm_engine/ui/elements/list_box.rb +82 -0
- data/lib/cyberarm_engine/ui/elements/progress.rb +6 -5
- data/lib/cyberarm_engine/ui/elements/radio.rb +6 -0
- data/lib/cyberarm_engine/ui/elements/slider.rb +104 -0
- data/lib/cyberarm_engine/ui/elements/stack.rb +1 -3
- data/lib/cyberarm_engine/ui/elements/text_block.rb +156 -0
- data/lib/cyberarm_engine/ui/elements/toggle_button.rb +40 -31
- data/lib/cyberarm_engine/ui/event.rb +7 -7
- data/lib/cyberarm_engine/ui/gui_state.rb +118 -6
- data/lib/cyberarm_engine/ui/style.rb +10 -9
- data/lib/cyberarm_engine/ui/theme.rb +84 -22
- data/lib/cyberarm_engine/vector.rb +33 -30
- data/lib/cyberarm_engine/version.rb +2 -2
- data/lib/cyberarm_engine/{engine.rb → window.rb} +32 -19
- metadata +87 -18
- data/lib/cyberarm_engine/gosu_ext/circle.rb +0 -9
@@ -1,6 +1,7 @@
|
|
1
1
|
module CyberarmEngine
|
2
2
|
class BorderCanvas
|
3
3
|
attr_reader :element, :top, :right, :bottom, :left
|
4
|
+
|
4
5
|
def initialize(element:)
|
5
6
|
@element = element
|
6
7
|
|
@@ -25,7 +26,7 @@ module CyberarmEngine
|
|
25
26
|
|
26
27
|
elsif color.is_a?(Array)
|
27
28
|
if color.size == 1
|
28
|
-
color=color.first
|
29
|
+
color = color.first
|
29
30
|
|
30
31
|
elsif color.size == 2
|
31
32
|
@top.background = color.first
|
@@ -61,7 +62,7 @@ module CyberarmEngine
|
|
61
62
|
|
62
63
|
def update
|
63
64
|
# TOP
|
64
|
-
@top.x = @element.x# + @element.border_thickness_left
|
65
|
+
@top.x = @element.x # + @element.border_thickness_left
|
65
66
|
@top.y = @element.y
|
66
67
|
@top.z = @element.z
|
67
68
|
|
@@ -98,4 +99,4 @@ module CyberarmEngine
|
|
98
99
|
@left.update
|
99
100
|
end
|
100
101
|
end
|
101
|
-
end
|
102
|
+
end
|
@@ -8,53 +8,92 @@ module CyberarmEngine
|
|
8
8
|
container(CyberarmEngine::Element::Stack, options, &block)
|
9
9
|
end
|
10
10
|
|
11
|
+
# TODO: Remove in version 0.16.0+
|
11
12
|
def label(text, options = {}, &block)
|
12
13
|
options[:parent] = element_parent
|
13
14
|
options[:theme] = current_theme
|
14
15
|
|
15
|
-
add_element(
|
16
|
+
add_element(Element::TextBlock.new(text, options, block))
|
17
|
+
end
|
18
|
+
|
19
|
+
[
|
20
|
+
"Banner",
|
21
|
+
"Title",
|
22
|
+
"Subtitle",
|
23
|
+
"Tagline",
|
24
|
+
"Caption",
|
25
|
+
"Para",
|
26
|
+
"Inscription"
|
27
|
+
].each do |const|
|
28
|
+
define_method(:"#{const.downcase}") do |text, options = {}, &block|
|
29
|
+
options[:parent] = element_parent
|
30
|
+
options[:theme] = current_theme
|
31
|
+
|
32
|
+
add_element(Element.const_get(const).new(text, options, block))
|
33
|
+
end
|
16
34
|
end
|
17
35
|
|
18
36
|
def button(text, options = {}, &block)
|
19
37
|
options[:parent] = element_parent
|
20
38
|
options[:theme] = current_theme
|
21
39
|
|
22
|
-
add_element(
|
40
|
+
add_element(Element::Button.new(text, options, block) { block.call if block.is_a?(Proc) })
|
41
|
+
end
|
42
|
+
|
43
|
+
def list_box(options = {}, &block)
|
44
|
+
options[:parent] = element_parent
|
45
|
+
options[:theme] = current_theme
|
46
|
+
|
47
|
+
add_element(Element::ListBox.new(options, block) { block.call if block.is_a?(Proc) })
|
23
48
|
end
|
24
49
|
|
25
50
|
def edit_line(text, options = {}, &block)
|
26
51
|
options[:parent] = element_parent
|
27
52
|
options[:theme] = current_theme
|
28
53
|
|
29
|
-
add_element(
|
54
|
+
add_element(Element::EditLine.new(text, options, block))
|
55
|
+
end
|
56
|
+
|
57
|
+
def edit_box(text, options = {}, &block)
|
58
|
+
options[:parent] = element_parent
|
59
|
+
options[:theme] = current_theme
|
60
|
+
|
61
|
+
add_element(Element::EditBox.new(text, options, block))
|
30
62
|
end
|
31
63
|
|
32
64
|
def toggle_button(options = {}, &block)
|
33
65
|
options[:parent] = element_parent
|
34
66
|
options[:theme] = current_theme
|
35
67
|
|
36
|
-
add_element(
|
68
|
+
add_element(Element::ToggleButton.new(options, block))
|
37
69
|
end
|
38
70
|
|
39
71
|
def check_box(text, options = {}, &block)
|
40
72
|
options[:parent] = element_parent
|
41
73
|
options[:theme] = current_theme
|
42
74
|
|
43
|
-
add_element(
|
75
|
+
add_element(Element::CheckBox.new(text, options, block))
|
44
76
|
end
|
45
77
|
|
46
78
|
def image(path, options = {}, &block)
|
47
79
|
options[:parent] = element_parent
|
48
80
|
options[:theme] = current_theme
|
49
81
|
|
50
|
-
add_element(
|
82
|
+
add_element(Element::Image.new(path, options, block))
|
51
83
|
end
|
52
84
|
|
53
85
|
def progress(options = {}, &block)
|
54
86
|
options[:parent] = element_parent
|
55
87
|
options[:theme] = current_theme
|
56
88
|
|
57
|
-
add_element(
|
89
|
+
add_element(Element::Progress.new(options, block))
|
90
|
+
end
|
91
|
+
|
92
|
+
def slider(options = {}, &block)
|
93
|
+
options[:parent] = element_parent
|
94
|
+
options[:theme] = current_theme
|
95
|
+
|
96
|
+
add_element(Element::Slider.new(options, block))
|
58
97
|
end
|
59
98
|
|
60
99
|
def background(color = Gosu::Color::NONE)
|
@@ -72,7 +111,7 @@ module CyberarmEngine
|
|
72
111
|
private def add_element(element)
|
73
112
|
element_parent.add(element)
|
74
113
|
|
75
|
-
|
114
|
+
element
|
76
115
|
end
|
77
116
|
|
78
117
|
private def element_parent
|
@@ -93,7 +132,7 @@ module CyberarmEngine
|
|
93
132
|
|
94
133
|
$__current_container__ = old_parent
|
95
134
|
|
96
|
-
|
135
|
+
_container
|
97
136
|
end
|
98
137
|
end
|
99
|
-
end
|
138
|
+
end
|
@@ -4,7 +4,7 @@ module CyberarmEngine
|
|
4
4
|
include Event
|
5
5
|
include Common
|
6
6
|
|
7
|
-
attr_accessor :x, :y, :z, :enabled
|
7
|
+
attr_accessor :x, :y, :z, :enabled, :tip
|
8
8
|
attr_reader :parent, :options, :style, :event_handler, :background_canvas, :border_canvas
|
9
9
|
|
10
10
|
def initialize(options = {}, block = nil)
|
@@ -13,12 +13,16 @@ module CyberarmEngine
|
|
13
13
|
@options = options
|
14
14
|
@block = block
|
15
15
|
|
16
|
-
@focus = false
|
17
|
-
@enabled = true
|
18
|
-
@visible = true
|
16
|
+
@focus = @options[:focus].nil? ? false : @options[:focus]
|
17
|
+
@enabled = @options[:enabled].nil? ? true : @options[:enabled]
|
18
|
+
@visible = @options[:visible].nil? ? true : @options[:visible]
|
19
|
+
@tip = @options[:tip] || ""
|
19
20
|
|
20
21
|
@style = Style.new(options)
|
21
22
|
|
23
|
+
@root ||= nil
|
24
|
+
@gui_state ||= nil
|
25
|
+
|
22
26
|
@x = @style.x
|
23
27
|
@y = @style.y
|
24
28
|
@z = @style.z
|
@@ -26,9 +30,6 @@ module CyberarmEngine
|
|
26
30
|
@width = 0
|
27
31
|
@height = 0
|
28
32
|
|
29
|
-
@fixed_x = @x if @x != 0
|
30
|
-
@fixed_y = @y if @y != 0
|
31
|
-
|
32
33
|
@style.width = default(:width) || nil
|
33
34
|
@style.height = default(:height) || nil
|
34
35
|
|
@@ -38,9 +39,12 @@ module CyberarmEngine
|
|
38
39
|
stylize
|
39
40
|
|
40
41
|
default_events
|
42
|
+
|
43
|
+
root.gui_state.request_focus(self) if @options[:autofocus]
|
41
44
|
end
|
42
45
|
|
43
46
|
def stylize
|
47
|
+
set_static_position
|
44
48
|
set_border_thickness(@style.border_thickness)
|
45
49
|
|
46
50
|
set_padding(@style.padding)
|
@@ -51,6 +55,11 @@ module CyberarmEngine
|
|
51
55
|
set_border_color(@style.border_color)
|
52
56
|
end
|
53
57
|
|
58
|
+
def set_static_position
|
59
|
+
@x = @style.x if @style.x != 0
|
60
|
+
@y = @style.y if @style.y != 0
|
61
|
+
end
|
62
|
+
|
54
63
|
def set_background(background)
|
55
64
|
@style.background = background
|
56
65
|
@style.background_canvas.background = background
|
@@ -95,7 +104,7 @@ module CyberarmEngine
|
|
95
104
|
end
|
96
105
|
|
97
106
|
def default_events
|
98
|
-
[
|
107
|
+
%i[left middle right].each do |button|
|
99
108
|
event(:"#{button}_mouse_button")
|
100
109
|
event(:"released_#{button}_mouse_button")
|
101
110
|
event(:"clicked_#{button}_mouse_button")
|
@@ -109,7 +118,10 @@ module CyberarmEngine
|
|
109
118
|
event(:hover)
|
110
119
|
event(:leave)
|
111
120
|
|
121
|
+
event(:focus)
|
112
122
|
event(:blur)
|
123
|
+
|
124
|
+
event(:changed)
|
113
125
|
end
|
114
126
|
|
115
127
|
def enabled?
|
@@ -126,21 +138,26 @@ module CyberarmEngine
|
|
126
138
|
end
|
127
139
|
|
128
140
|
def show
|
141
|
+
bool = visible?
|
129
142
|
@visible = true
|
130
|
-
root.gui_state.request_recalculate
|
143
|
+
root.gui_state.request_recalculate unless bool
|
131
144
|
end
|
132
145
|
|
133
146
|
def hide
|
147
|
+
bool = visible?
|
134
148
|
@visible = false
|
135
|
-
root.gui_state.request_recalculate
|
149
|
+
root.gui_state.request_recalculate if bool
|
136
150
|
end
|
137
151
|
|
138
152
|
def draw
|
139
|
-
return unless
|
153
|
+
return unless visible?
|
140
154
|
|
141
155
|
@style.background_canvas.draw
|
142
156
|
@style.border_canvas.draw
|
143
|
-
|
157
|
+
|
158
|
+
Gosu.clip_to(@x, @y, width, height) do
|
159
|
+
render
|
160
|
+
end
|
144
161
|
end
|
145
162
|
|
146
163
|
def update
|
@@ -152,12 +169,16 @@ module CyberarmEngine
|
|
152
169
|
def button_up(id)
|
153
170
|
end
|
154
171
|
|
172
|
+
def draggable?(_button)
|
173
|
+
false
|
174
|
+
end
|
175
|
+
|
155
176
|
def render
|
156
177
|
end
|
157
178
|
|
158
179
|
def hit?(x, y)
|
159
180
|
x.between?(@x, @x + width) &&
|
160
|
-
|
181
|
+
y.between?(@y, @y + height)
|
161
182
|
end
|
162
183
|
|
163
184
|
def width
|
@@ -208,21 +229,36 @@ module CyberarmEngine
|
|
208
229
|
(@style.border_thickness_top + @style.padding_top) + (@style.padding_bottom + @style.border_thickness_bottom)
|
209
230
|
end
|
210
231
|
|
211
|
-
|
212
|
-
|
232
|
+
def scroll_width
|
233
|
+
@children.sum { |c| c.width } + noncontent_width
|
234
|
+
end
|
235
|
+
|
236
|
+
def scroll_height
|
237
|
+
@children.sum { |c| c.height } + noncontent_height
|
238
|
+
end
|
239
|
+
|
240
|
+
def max_scroll_width
|
241
|
+
scroll_width - width
|
242
|
+
end
|
243
|
+
|
244
|
+
def max_scroll_height
|
245
|
+
scroll_height - height
|
246
|
+
end
|
247
|
+
|
248
|
+
def dimensional_size(size, dimension)
|
249
|
+
raise "dimension must be either :width or :height" unless %i[width height].include?(dimension)
|
250
|
+
|
213
251
|
if size && size.is_a?(Numeric)
|
214
252
|
if size.between?(0.0, 1.0)
|
215
|
-
((@parent.send(:"content_#{dimension}") -
|
253
|
+
((@parent.send(:"content_#{dimension}") - send(:"noncontent_#{dimension}")) * size).round
|
216
254
|
else
|
217
255
|
size
|
218
256
|
end
|
219
|
-
else
|
220
|
-
nil
|
221
257
|
end
|
222
258
|
end
|
223
259
|
|
224
260
|
def background=(_background)
|
225
|
-
@style.background_canvas.background=(_background)
|
261
|
+
@style.background_canvas.background = (_background)
|
226
262
|
update_background
|
227
263
|
end
|
228
264
|
|
@@ -239,6 +275,8 @@ module CyberarmEngine
|
|
239
275
|
end
|
240
276
|
|
241
277
|
def root
|
278
|
+
return self if is_root?
|
279
|
+
|
242
280
|
unless @root && @root.parent.nil?
|
243
281
|
@root = parent
|
244
282
|
|
@@ -258,6 +296,12 @@ module CyberarmEngine
|
|
258
296
|
@gui_state != nil
|
259
297
|
end
|
260
298
|
|
299
|
+
def focus(_)
|
300
|
+
warn "#{self.class}#focus was not overridden!"
|
301
|
+
|
302
|
+
:handled
|
303
|
+
end
|
304
|
+
|
261
305
|
def recalculate
|
262
306
|
raise "#{self.class}#recalculate was not overridden!"
|
263
307
|
end
|
@@ -269,8 +313,16 @@ module CyberarmEngine
|
|
269
313
|
raise "#{self.class}#value was not overridden!"
|
270
314
|
end
|
271
315
|
|
272
|
-
def value=(
|
316
|
+
def value=(_value)
|
273
317
|
raise "#{self.class}#value= was not overridden!"
|
274
318
|
end
|
319
|
+
|
320
|
+
def to_s
|
321
|
+
"#{self.class} x=#{x} y=#{y} width=#{width} height=#{height} value=#{value.is_a?(String) ? "\"#{value}\"" : value}"
|
322
|
+
end
|
323
|
+
|
324
|
+
def inspect
|
325
|
+
to_s
|
326
|
+
end
|
275
327
|
end
|
276
|
-
end
|
328
|
+
end
|
@@ -1,67 +1,160 @@
|
|
1
1
|
module CyberarmEngine
|
2
2
|
class Element
|
3
|
-
class Button <
|
4
|
-
def initialize(
|
5
|
-
|
3
|
+
class Button < TextBlock
|
4
|
+
def initialize(text_or_image, options = {}, block = nil)
|
5
|
+
@image = nil
|
6
|
+
@scale_x = 1
|
7
|
+
@scale_y = 1
|
6
8
|
|
7
|
-
@
|
9
|
+
@image = text_or_image if text_or_image.is_a?(Gosu::Image)
|
10
|
+
|
11
|
+
super(text_or_image, options, block)
|
12
|
+
|
13
|
+
@style.background_canvas.background = @style.background
|
8
14
|
end
|
9
15
|
|
10
16
|
def render
|
11
|
-
|
17
|
+
if @image
|
18
|
+
draw_image
|
19
|
+
else
|
20
|
+
draw_text
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def draw_image
|
25
|
+
@image.draw(
|
26
|
+
@style.border_thickness_left + @style.padding_left + @x,
|
27
|
+
@style.border_thickness_top + @style.padding_top + @y,
|
28
|
+
@z + 2,
|
29
|
+
@scale_x, @scale_y, @text.color
|
30
|
+
)
|
12
31
|
end
|
13
32
|
|
14
33
|
def draw_text
|
15
34
|
@text.draw
|
16
35
|
end
|
17
36
|
|
18
|
-
def enter(
|
37
|
+
def enter(_sender)
|
19
38
|
@focus = false unless window.button_down?(Gosu::MsLeft)
|
20
39
|
|
21
|
-
if
|
22
|
-
@style.background_canvas.background =
|
23
|
-
@text.color =
|
40
|
+
if !@enabled
|
41
|
+
@style.background_canvas.background = @style.disabled[:background]
|
42
|
+
@text.color = @style.disabled[:color]
|
43
|
+
elsif @focus
|
44
|
+
@style.background_canvas.background = @style.active[:background]
|
45
|
+
@text.color = @style.active[:color]
|
24
46
|
else
|
25
|
-
@style.background_canvas.background =
|
26
|
-
@text.color =
|
47
|
+
@style.background_canvas.background = @style.hover[:background]
|
48
|
+
@text.color = @style.hover[:color]
|
27
49
|
end
|
28
50
|
|
29
|
-
|
51
|
+
:handled
|
30
52
|
end
|
31
53
|
|
32
|
-
def left_mouse_button(
|
54
|
+
def left_mouse_button(_sender, _x, _y)
|
33
55
|
@focus = true
|
34
|
-
|
56
|
+
|
57
|
+
unless @enabled
|
58
|
+
@style.background_canvas.background = @style.disabled[:background]
|
59
|
+
@text.color = @style.disabled[:color]
|
60
|
+
else
|
61
|
+
@style.background_canvas.background = @style.active[:background]
|
62
|
+
@text.color = @style.active[:color]
|
63
|
+
end
|
64
|
+
|
35
65
|
window.current_state.focus = self
|
36
|
-
@text.color = default(:active, :color)
|
37
66
|
|
38
|
-
|
67
|
+
:handled
|
39
68
|
end
|
40
69
|
|
41
|
-
def released_left_mouse_button(sender,
|
70
|
+
def released_left_mouse_button(sender, _x, _y)
|
42
71
|
enter(sender)
|
43
72
|
|
44
|
-
|
73
|
+
:handled
|
45
74
|
end
|
46
75
|
|
47
|
-
def clicked_left_mouse_button(
|
48
|
-
@block.call(self) if @block
|
76
|
+
def clicked_left_mouse_button(_sender, _x, _y)
|
77
|
+
@block.call(self) if @enabled && @block
|
49
78
|
|
50
|
-
|
79
|
+
:handled
|
51
80
|
end
|
52
81
|
|
53
|
-
def leave(
|
54
|
-
@
|
55
|
-
|
82
|
+
def leave(_sender)
|
83
|
+
unless @enabled
|
84
|
+
@style.background_canvas.background = @style.disabled[:background]
|
85
|
+
@text.color = @style.disabled[:color]
|
86
|
+
else
|
87
|
+
@style.background_canvas.background = @style.background
|
88
|
+
@text.color = @style.color
|
89
|
+
end
|
56
90
|
|
57
|
-
|
91
|
+
:handled
|
58
92
|
end
|
59
93
|
|
60
|
-
def blur(
|
94
|
+
def blur(_sender)
|
61
95
|
@focus = false
|
62
96
|
|
63
|
-
|
97
|
+
:handled
|
98
|
+
end
|
99
|
+
|
100
|
+
def recalculate
|
101
|
+
unless @enabled
|
102
|
+
@style.background_canvas.background = @style.disabled[:background]
|
103
|
+
@text.color = @style.disabled[:color]
|
104
|
+
else
|
105
|
+
@style.background_canvas.background = @style.background
|
106
|
+
@text.color = @style.color
|
107
|
+
end
|
108
|
+
|
109
|
+
if @image
|
110
|
+
@width = 0
|
111
|
+
@height = 0
|
112
|
+
|
113
|
+
_width = dimensional_size(@style.image_width, :width)
|
114
|
+
_height = dimensional_size(@style.image_height, :height)
|
115
|
+
|
116
|
+
if _width && _height
|
117
|
+
@scale_x = _width.to_f / @image.width
|
118
|
+
@scale_y = _height.to_f / @image.height
|
119
|
+
elsif _width
|
120
|
+
@scale_x = _width.to_f / @image.width
|
121
|
+
@scale_y = @scale_x
|
122
|
+
elsif _height
|
123
|
+
@scale_y = _height.to_f / @image.height
|
124
|
+
@scale_x = @scale_y
|
125
|
+
else
|
126
|
+
@scale_x = 1
|
127
|
+
@scale_y = 1
|
128
|
+
end
|
129
|
+
|
130
|
+
@width = _width || @image.width.round * @scale_x
|
131
|
+
@height = _height || @image.height.round * @scale_y
|
132
|
+
|
133
|
+
update_background
|
134
|
+
else
|
135
|
+
super
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def value
|
140
|
+
@image || super
|
141
|
+
end
|
142
|
+
|
143
|
+
def value=(value)
|
144
|
+
if value.is_a?(Gosu::Image)
|
145
|
+
@image = value
|
146
|
+
else
|
147
|
+
super
|
148
|
+
end
|
149
|
+
|
150
|
+
old_width = width
|
151
|
+
old_height = height
|
152
|
+
recalculate
|
153
|
+
|
154
|
+
root.gui_state.request_recalculate if old_width != width || old_height != height
|
155
|
+
|
156
|
+
publish(:changed, self.value)
|
64
157
|
end
|
65
158
|
end
|
66
159
|
end
|
67
|
-
end
|
160
|
+
end
|