cyberarm_engine 0.16.0 → 0.19.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.
- checksums.yaml +4 -4
- data/README.md +5 -4
- data/assets/textures/logo.png +0 -0
- data/cyberarm_engine.gemspec +2 -2
- data/lib/cyberarm_engine/animator.rb +172 -9
- data/lib/cyberarm_engine/background_nine_slice.rb +51 -34
- data/lib/cyberarm_engine/builtin/intro_state.rb +131 -0
- data/lib/cyberarm_engine/common.rb +19 -2
- data/lib/cyberarm_engine/console/command.rb +158 -0
- data/lib/cyberarm_engine/console/commands/help_command.rb +43 -0
- data/lib/cyberarm_engine/console/subcommand.rb +100 -0
- data/lib/cyberarm_engine/console.rb +248 -0
- data/lib/cyberarm_engine/game_state.rb +5 -0
- data/lib/cyberarm_engine/model.rb +6 -1
- data/lib/cyberarm_engine/opengl/perspective_camera.rb +2 -2
- data/lib/cyberarm_engine/opengl/renderer/opengl_renderer.rb +9 -0
- data/lib/cyberarm_engine/opengl/texture.rb +1 -1
- data/lib/cyberarm_engine/text.rb +82 -45
- data/lib/cyberarm_engine/ui/dsl.rb +3 -2
- data/lib/cyberarm_engine/ui/element.rb +236 -47
- data/lib/cyberarm_engine/ui/elements/button.rb +0 -63
- data/lib/cyberarm_engine/ui/elements/check_box.rb +4 -1
- data/lib/cyberarm_engine/ui/elements/container.rb +65 -35
- data/lib/cyberarm_engine/ui/elements/edit_line.rb +20 -13
- data/lib/cyberarm_engine/ui/elements/text_block.rb +13 -7
- data/lib/cyberarm_engine/ui/event.rb +9 -2
- data/lib/cyberarm_engine/ui/gui_state.rb +37 -4
- data/lib/cyberarm_engine/ui/style.rb +14 -3
- data/lib/cyberarm_engine/ui/theme.rb +26 -1
- data/lib/cyberarm_engine/version.rb +1 -1
- data/lib/cyberarm_engine/window.rb +7 -1
- data/lib/cyberarm_engine.rb +11 -4
- metadata +12 -7
- data/lib/cyberarm_engine/ui/elements/label.rb +0 -156
data/lib/cyberarm_engine/text.rb
CHANGED
@@ -3,7 +3,9 @@ module CyberarmEngine
|
|
3
3
|
CACHE = {}
|
4
4
|
|
5
5
|
attr_accessor :x, :y, :z, :size, :options
|
6
|
-
attr_reader :text, :textobject, :factor_x, :factor_y, :color,
|
6
|
+
attr_reader :text, :textobject, :factor_x, :factor_y, :color,
|
7
|
+
:border, :border_size, :border_alpha, :border_color,
|
8
|
+
:shadow, :shadow_size, :shadow_alpha, :shadow_color
|
7
9
|
|
8
10
|
def initialize(text, options = {})
|
9
11
|
@text = text.to_s || ""
|
@@ -15,16 +17,25 @@ module CyberarmEngine
|
|
15
17
|
@z = options[:z] || 1025
|
16
18
|
@factor_x = options[:factor_x] || 1
|
17
19
|
@factor_y = options[:factor_y] || 1
|
18
|
-
|
20
|
+
if options[:color]
|
21
|
+
@color = options[:color].is_a?(Gosu::Color) ? options[:color] : Gosu::Color.new(options[:color])
|
22
|
+
else
|
23
|
+
@color = Gosu::Color::WHITE
|
24
|
+
end
|
19
25
|
@mode = options[:mode] || :default
|
20
26
|
@alignment = options[:alignment] || nil
|
21
|
-
|
22
|
-
@
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
27
|
+
|
28
|
+
@border = options[:border]
|
29
|
+
@border = true if options[:border].nil?
|
30
|
+
@border_size = options[:border_size] || 1
|
31
|
+
@border_alpha = options[:border_alpha] || 30
|
32
|
+
@border_color = options[:border_color]
|
33
|
+
|
34
|
+
@shadow = options[:shadow]
|
35
|
+
@shadow_size = options[:shadow_size] || 2
|
26
36
|
@shadow_alpha = options[:shadow_alpha] || 30
|
27
37
|
@shadow_color = options[:shadow_color]
|
38
|
+
|
28
39
|
@textobject = check_cache(@size, @font)
|
29
40
|
|
30
41
|
if @alignment
|
@@ -37,8 +48,6 @@ module CyberarmEngine
|
|
37
48
|
@x = $window.width - BUTTON_PADDING - @textobject.text_width(@text)
|
38
49
|
end
|
39
50
|
end
|
40
|
-
|
41
|
-
self
|
42
51
|
end
|
43
52
|
|
44
53
|
def check_cache(size, font_name)
|
@@ -65,82 +74,110 @@ module CyberarmEngine
|
|
65
74
|
font
|
66
75
|
end
|
67
76
|
|
77
|
+
def swap_font(size, font_name = @font)
|
78
|
+
if @size != size || @font != font_name
|
79
|
+
@size = size
|
80
|
+
@font = font_name
|
81
|
+
|
82
|
+
@textobject = check_cache(size, font_name)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
68
86
|
def text=(string)
|
69
|
-
@
|
87
|
+
@rendered_border = nil
|
70
88
|
@text = string
|
71
89
|
end
|
72
90
|
|
73
91
|
def factor_x=(n)
|
74
|
-
@
|
92
|
+
@rendered_border = nil
|
75
93
|
@factor_x = n
|
76
94
|
end
|
77
95
|
|
78
96
|
def factor_y=(n)
|
79
|
-
@
|
97
|
+
@rendered_border = nil
|
80
98
|
@factor_y = n
|
81
99
|
end
|
82
100
|
|
83
101
|
def color=(color)
|
84
|
-
@
|
85
|
-
|
102
|
+
@rendered_border = nil
|
103
|
+
if color
|
104
|
+
@color = color.is_a?(Gosu::Color) ? color : Gosu::Color.new(color)
|
105
|
+
else
|
106
|
+
raise "color cannot be nil"
|
107
|
+
end
|
86
108
|
end
|
87
109
|
|
88
|
-
def
|
89
|
-
@
|
90
|
-
@
|
110
|
+
def border=(boolean)
|
111
|
+
@rendered_border = nil
|
112
|
+
@border = boolean
|
91
113
|
end
|
92
114
|
|
93
|
-
def
|
94
|
-
@
|
95
|
-
@
|
115
|
+
def border_size=(n)
|
116
|
+
@rendered_border = nil
|
117
|
+
@border_size = n
|
96
118
|
end
|
97
119
|
|
98
|
-
def
|
99
|
-
@
|
100
|
-
@
|
120
|
+
def border_alpha=(n)
|
121
|
+
@rendered_border = nil
|
122
|
+
@border_alpha = n
|
101
123
|
end
|
102
124
|
|
103
|
-
def
|
104
|
-
@
|
105
|
-
@
|
125
|
+
def border_color=(n)
|
126
|
+
@rendered_border = nil
|
127
|
+
@border_color = n
|
106
128
|
end
|
107
129
|
|
108
130
|
def width(text = @text)
|
109
|
-
|
131
|
+
markup_width(text)
|
132
|
+
end
|
133
|
+
|
134
|
+
def text_width(text = @text)
|
135
|
+
textobject.text_width(text) + @border_size + @shadow_size
|
110
136
|
end
|
111
137
|
|
112
138
|
def markup_width(text = @text)
|
113
|
-
textobject.markup_width(text)
|
139
|
+
textobject.markup_width(text) + @border_size + @shadow_size
|
114
140
|
end
|
115
141
|
|
116
142
|
def height(text = @text)
|
117
|
-
text.lines.count > 0
|
143
|
+
if text.lines.count > 0
|
144
|
+
text.lines.count * textobject.height + @border_size + @shadow_size
|
145
|
+
else
|
146
|
+
@textobject.height + @border_size + @shadow_size
|
147
|
+
end
|
118
148
|
end
|
119
149
|
|
120
150
|
def draw(method = :draw_markup)
|
121
|
-
if @
|
122
|
-
|
123
|
-
|
124
|
-
|
151
|
+
if @border && !ARGV.join.include?("--no-border")
|
152
|
+
border_alpha = @color.alpha <= 30 ? @color.alpha : @border_alpha
|
153
|
+
border_color = @border_color || Gosu::Color.rgba(@color.red, @color.green, @color.blue,
|
154
|
+
border_alpha)
|
125
155
|
white = Gosu::Color::WHITE
|
126
156
|
|
127
|
-
_x = @
|
128
|
-
_y = @
|
157
|
+
_x = @border_size
|
158
|
+
_y = @border_size
|
159
|
+
_width = method == :draw_markup ? text_width : markup_width
|
129
160
|
|
130
|
-
@
|
131
|
-
@textobject.send(method, @text, _x - @
|
132
|
-
@textobject.send(method, @text, _x - @
|
161
|
+
@rendered_border ||= Gosu.render((_width + (border_size * 2)).ceil, (height + (@border_size * 2)).ceil) do
|
162
|
+
@textobject.send(method, @text, _x - @border_size, _y, @z, @factor_x, @factor_y, white, @mode)
|
163
|
+
@textobject.send(method, @text, _x - @border_size, _y - @border_size, @z, @factor_x, @factor_y, white, @mode)
|
133
164
|
|
134
|
-
@textobject.send(method, @text, _x, _y - @
|
135
|
-
@textobject.send(method, @text, _x + @
|
165
|
+
@textobject.send(method, @text, _x, _y - @border_size, @z, @factor_x, @factor_y, white, @mode)
|
166
|
+
@textobject.send(method, @text, _x + @border_size, _y - @border_size, @z, @factor_x, @factor_y, white, @mode)
|
136
167
|
|
137
|
-
@textobject.send(method, @text, _x, _y + @
|
138
|
-
@textobject.send(method, @text, _x - @
|
168
|
+
@textobject.send(method, @text, _x, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
|
169
|
+
@textobject.send(method, @text, _x - @border_size, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
|
139
170
|
|
140
|
-
@textobject.send(method, @text, _x + @
|
141
|
-
@textobject.send(method, @text, _x + @
|
171
|
+
@textobject.send(method, @text, _x + @border_size, _y, @z, @factor_x, @factor_y, white, @mode)
|
172
|
+
@textobject.send(method, @text, _x + @border_size, _y + @border_size, @z, @factor_x, @factor_y, white, @mode)
|
142
173
|
end
|
143
|
-
|
174
|
+
|
175
|
+
@rendered_border.draw(@x - @border_size, @y - @border_size, @z, @factor_x, @factor_y, border_color)
|
176
|
+
end
|
177
|
+
|
178
|
+
if @shadow
|
179
|
+
shadow_color = @shadow_color || Gosu::Color.rgba(@color.red, @color.green, @color.blue, @shadow_alpha)
|
180
|
+
@textobject.send(method, @text, @x + @shadow_size, @y + @shadow_size, @z, @factor_x, @factor_y, shadow_color, @mode)
|
144
181
|
end
|
145
182
|
|
146
183
|
@textobject.send(method, @text, @x, @y, @z, @factor_x, @factor_y, @color, @mode)
|
@@ -23,7 +23,8 @@ module CyberarmEngine
|
|
23
23
|
"Tagline",
|
24
24
|
"Caption",
|
25
25
|
"Para",
|
26
|
-
"Inscription"
|
26
|
+
"Inscription",
|
27
|
+
"Link"
|
27
28
|
].each do |const|
|
28
29
|
define_method(:"#{const.downcase}") do |text, options = {}, &block|
|
29
30
|
options[:parent] = element_parent
|
@@ -97,7 +98,7 @@ module CyberarmEngine
|
|
97
98
|
end
|
98
99
|
|
99
100
|
def background(color = Gosu::Color::NONE)
|
100
|
-
element_parent.style.background = color
|
101
|
+
element_parent.style.default[:background] = color
|
101
102
|
end
|
102
103
|
|
103
104
|
def theme(theme)
|
@@ -18,6 +18,8 @@ module CyberarmEngine
|
|
18
18
|
@visible = @options[:visible].nil? ? true : @options[:visible]
|
19
19
|
@tip = @options[:tip] || ""
|
20
20
|
|
21
|
+
@debug_color = @options[:debug_color].nil? ? Gosu::Color::RED : @options[:debug_color]
|
22
|
+
|
21
23
|
@style = Style.new(options)
|
22
24
|
|
23
25
|
@root ||= nil
|
@@ -34,23 +36,33 @@ module CyberarmEngine
|
|
34
36
|
@style.height = default(:height) || nil
|
35
37
|
|
36
38
|
@style.background_canvas = Background.new
|
37
|
-
@style.
|
39
|
+
@style.background_nine_slice_canvas = BackgroundNineSlice.new
|
40
|
+
@style.border_canvas = BorderCanvas.new(element: self)
|
41
|
+
|
42
|
+
@style_event = :default
|
38
43
|
|
39
44
|
stylize
|
40
45
|
|
41
46
|
default_events
|
47
|
+
|
48
|
+
root.gui_state.request_focus(self) if @options[:autofocus]
|
42
49
|
end
|
43
50
|
|
44
51
|
def stylize
|
45
52
|
set_static_position
|
46
|
-
set_border_thickness(@style.border_thickness)
|
47
53
|
|
48
|
-
set_padding
|
54
|
+
set_padding
|
55
|
+
set_margin
|
49
56
|
|
50
|
-
|
57
|
+
set_background
|
58
|
+
set_background_nine_slice
|
59
|
+
|
60
|
+
set_border_thickness
|
61
|
+
set_border_color
|
62
|
+
end
|
51
63
|
|
52
|
-
|
53
|
-
|
64
|
+
def safe_style_fetch(*args)
|
65
|
+
@style.hash.dig(@style_event, *args) || @style.hash.dig(:default, *args) || default(*args)
|
54
66
|
end
|
55
67
|
|
56
68
|
def set_static_position
|
@@ -58,47 +70,89 @@ module CyberarmEngine
|
|
58
70
|
@y = @style.y if @style.y != 0
|
59
71
|
end
|
60
72
|
|
61
|
-
def set_background
|
62
|
-
@style.background = background
|
63
|
-
|
73
|
+
def set_background
|
74
|
+
@style.background = safe_style_fetch(:background)
|
75
|
+
|
76
|
+
@style.background_canvas.background = @style.background
|
77
|
+
end
|
78
|
+
|
79
|
+
def set_background_nine_slice
|
80
|
+
@style.background_nine_slice = safe_style_fetch(:background_nine_slice)
|
81
|
+
|
82
|
+
@style.background_nine_slice_mode = safe_style_fetch(:background_nine_slice_mode) || :stretch
|
83
|
+
@style.background_nine_slice_color = safe_style_fetch(:background_nine_slice_color) || Gosu::Color::WHITE
|
84
|
+
@style.background_nine_slice_canvas.color = @style.background_nine_slice_color
|
85
|
+
|
86
|
+
@style.background_nine_slice_from_edge = safe_style_fetch(:background_nine_slice_from_edge)
|
87
|
+
|
88
|
+
@style.background_nine_slice_left = safe_style_fetch(:background_nine_slice_left) || @style.background_nine_slice_from_edge
|
89
|
+
@style.background_nine_slice_top = safe_style_fetch(:background_nine_slice_top) || @style.background_nine_slice_from_edge
|
90
|
+
@style.background_nine_slice_right = safe_style_fetch(:background_nine_slice_right) || @style.background_nine_slice_from_edge
|
91
|
+
@style.background_nine_slice_bottom = safe_style_fetch(:background_nine_slice_bottom) || @style.background_nine_slice_from_edge
|
64
92
|
end
|
65
93
|
|
66
|
-
def set_border_thickness
|
67
|
-
@style.border_thickness = border_thickness
|
94
|
+
def set_border_thickness
|
95
|
+
@style.border_thickness = safe_style_fetch(:border_thickness)
|
68
96
|
|
69
|
-
@style.border_thickness_left =
|
70
|
-
@style.border_thickness_right =
|
71
|
-
@style.border_thickness_top =
|
72
|
-
@style.border_thickness_bottom =
|
97
|
+
@style.border_thickness_left = safe_style_fetch(:border_thickness_left) || @style.border_thickness
|
98
|
+
@style.border_thickness_right = safe_style_fetch(:border_thickness_right) || @style.border_thickness
|
99
|
+
@style.border_thickness_top = safe_style_fetch(:border_thickness_top) || @style.border_thickness
|
100
|
+
@style.border_thickness_bottom = safe_style_fetch(:border_thickness_bottom) || @style.border_thickness
|
73
101
|
end
|
74
102
|
|
75
|
-
def set_border_color
|
76
|
-
@style.border_color =
|
103
|
+
def set_border_color
|
104
|
+
@style.border_color = safe_style_fetch(:border_color)
|
77
105
|
|
78
|
-
@style.border_color_left =
|
79
|
-
@style.border_color_right =
|
80
|
-
@style.border_color_top =
|
81
|
-
@style.border_color_bottom =
|
106
|
+
@style.border_color_left = safe_style_fetch(:border_color_left) || @style.border_color
|
107
|
+
@style.border_color_right = safe_style_fetch(:border_color_right) || @style.border_color
|
108
|
+
@style.border_color_top = safe_style_fetch(:border_color_top) || @style.border_color
|
109
|
+
@style.border_color_bottom = safe_style_fetch(:border_color_bottom) || @style.border_color
|
82
110
|
|
83
|
-
@style.border_canvas.color =
|
111
|
+
@style.border_canvas.color = [
|
112
|
+
@style.border_color_top,
|
113
|
+
@style.border_color_right,
|
114
|
+
@style.border_color_bottom,
|
115
|
+
@style.border_color_left
|
116
|
+
]
|
84
117
|
end
|
85
118
|
|
86
|
-
def set_padding
|
87
|
-
@style.padding = padding
|
119
|
+
def set_padding
|
120
|
+
@style.padding = safe_style_fetch(:padding)
|
88
121
|
|
89
|
-
@style.padding_left =
|
90
|
-
@style.padding_right =
|
91
|
-
@style.padding_top =
|
92
|
-
@style.padding_bottom =
|
122
|
+
@style.padding_left = safe_style_fetch(:padding_left) || @style.padding
|
123
|
+
@style.padding_right = safe_style_fetch(:padding_right) || @style.padding
|
124
|
+
@style.padding_top = safe_style_fetch(:padding_top) || @style.padding
|
125
|
+
@style.padding_bottom = safe_style_fetch(:padding_bottom) || @style.padding
|
93
126
|
end
|
94
127
|
|
95
|
-
def set_margin
|
96
|
-
@style.margin = margin
|
128
|
+
def set_margin
|
129
|
+
@style.margin = safe_style_fetch(:margin)
|
130
|
+
|
131
|
+
@style.margin_left = safe_style_fetch(:margin_left) || @style.margin
|
132
|
+
@style.margin_right = safe_style_fetch(:margin_right) || @style.margin
|
133
|
+
@style.margin_top = safe_style_fetch(:margin_top) || @style.margin
|
134
|
+
@style.margin_bottom = safe_style_fetch(:margin_bottom) || @style.margin
|
135
|
+
end
|
136
|
+
|
137
|
+
def update_styles(event = :default)
|
138
|
+
old_width = width
|
139
|
+
old_height = height
|
140
|
+
|
141
|
+
_style = @style.send(event)
|
142
|
+
@style_event = event
|
97
143
|
|
98
|
-
@
|
99
|
-
|
100
|
-
|
101
|
-
|
144
|
+
if @text.is_a?(CyberarmEngine::Text)
|
145
|
+
@text.color = _style&.dig(:color) || @style.default[:color]
|
146
|
+
@text.swap_font(_style&.dig(:text_size) || @style.default[:text_size], _style&.dig(:font) || @style.default[:font])
|
147
|
+
end
|
148
|
+
|
149
|
+
return if self.is_a?(ToolTip)
|
150
|
+
|
151
|
+
if old_width != width || old_height != height
|
152
|
+
(root&.gui_state || @gui_state).request_recalculate
|
153
|
+
else
|
154
|
+
stylize
|
155
|
+
end
|
102
156
|
end
|
103
157
|
|
104
158
|
def default_events
|
@@ -116,11 +170,74 @@ module CyberarmEngine
|
|
116
170
|
event(:hover)
|
117
171
|
event(:leave)
|
118
172
|
|
173
|
+
event(:focus)
|
119
174
|
event(:blur)
|
120
175
|
|
121
176
|
event(:changed)
|
122
177
|
end
|
123
178
|
|
179
|
+
def enter(_sender)
|
180
|
+
@focus = false unless window.button_down?(Gosu::MsLeft)
|
181
|
+
|
182
|
+
if !@enabled
|
183
|
+
update_styles(:disabled)
|
184
|
+
elsif @focus
|
185
|
+
update_styles(:active)
|
186
|
+
else
|
187
|
+
update_styles(:hover)
|
188
|
+
end
|
189
|
+
|
190
|
+
:handled
|
191
|
+
end
|
192
|
+
|
193
|
+
def left_mouse_button(_sender, _x, _y)
|
194
|
+
@focus = true
|
195
|
+
|
196
|
+
unless @enabled
|
197
|
+
update_styles(:disabled)
|
198
|
+
else
|
199
|
+
update_styles(:active)
|
200
|
+
end
|
201
|
+
|
202
|
+
window.current_state.focus = self
|
203
|
+
|
204
|
+
:handled
|
205
|
+
end
|
206
|
+
|
207
|
+
def released_left_mouse_button(sender, _x, _y)
|
208
|
+
enter(sender)
|
209
|
+
|
210
|
+
:handled
|
211
|
+
end
|
212
|
+
|
213
|
+
def clicked_left_mouse_button(_sender, _x, _y)
|
214
|
+
@block&.call(self) if @enabled && !self.is_a?(Container)
|
215
|
+
|
216
|
+
:handled
|
217
|
+
end
|
218
|
+
|
219
|
+
def leave(_sender)
|
220
|
+
if @enabled
|
221
|
+
update_styles
|
222
|
+
else
|
223
|
+
update_styles(:disabled)
|
224
|
+
end
|
225
|
+
|
226
|
+
:handled
|
227
|
+
end
|
228
|
+
|
229
|
+
def blur(_sender)
|
230
|
+
@focus = false
|
231
|
+
|
232
|
+
if @enabled
|
233
|
+
update_styles
|
234
|
+
else
|
235
|
+
update_styles(:disabled)
|
236
|
+
end
|
237
|
+
|
238
|
+
:handled
|
239
|
+
end
|
240
|
+
|
124
241
|
def enabled?
|
125
242
|
@enabled
|
126
243
|
end
|
@@ -150,6 +267,7 @@ module CyberarmEngine
|
|
150
267
|
return unless visible?
|
151
268
|
|
152
269
|
@style.background_canvas.draw
|
270
|
+
@style.background_nine_slice_canvas.draw
|
153
271
|
@style.border_canvas.draw
|
154
272
|
|
155
273
|
Gosu.clip_to(@x, @y, width, height) do
|
@@ -157,6 +275,31 @@ module CyberarmEngine
|
|
157
275
|
end
|
158
276
|
end
|
159
277
|
|
278
|
+
def debug_draw
|
279
|
+
return if defined?(GUI_DEBUG_ONLY_ELEMENT) && self.class == GUI_DEBUG_ONLY_ELEMENT
|
280
|
+
|
281
|
+
Gosu.draw_line(
|
282
|
+
x, y, @debug_color,
|
283
|
+
x + outer_width, y, @debug_color,
|
284
|
+
Float::INFINITY
|
285
|
+
)
|
286
|
+
Gosu.draw_line(
|
287
|
+
x + outer_width, y, @debug_color,
|
288
|
+
x + outer_width, y + outer_height, @debug_color,
|
289
|
+
Float::INFINITY
|
290
|
+
)
|
291
|
+
Gosu.draw_line(
|
292
|
+
x + outer_width, y + outer_height, @debug_color,
|
293
|
+
x, y + outer_height, @debug_color,
|
294
|
+
Float::INFINITY
|
295
|
+
)
|
296
|
+
Gosu.draw_line(
|
297
|
+
x, outer_height, @debug_color,
|
298
|
+
x, y, @debug_color,
|
299
|
+
Float::INFINITY
|
300
|
+
)
|
301
|
+
end
|
302
|
+
|
160
303
|
def update
|
161
304
|
end
|
162
305
|
|
@@ -226,20 +369,34 @@ module CyberarmEngine
|
|
226
369
|
(@style.border_thickness_top + @style.padding_top) + (@style.padding_bottom + @style.border_thickness_bottom)
|
227
370
|
end
|
228
371
|
|
372
|
+
def scroll_width
|
373
|
+
@children.sum(&:width) + noncontent_width
|
374
|
+
end
|
375
|
+
|
376
|
+
def scroll_height
|
377
|
+
@children.sum(&:height) + noncontent_height
|
378
|
+
end
|
379
|
+
|
380
|
+
def max_scroll_width
|
381
|
+
scroll_width - width
|
382
|
+
end
|
383
|
+
|
384
|
+
def max_scroll_height
|
385
|
+
scroll_height - height
|
386
|
+
end
|
387
|
+
|
229
388
|
def dimensional_size(size, dimension)
|
230
389
|
raise "dimension must be either :width or :height" unless %i[width height].include?(dimension)
|
231
390
|
|
232
|
-
if size && size.
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
size
|
237
|
-
end
|
391
|
+
if size.is_a?(Numeric) && size.between?(0.0, 1.0)
|
392
|
+
(@parent.send(:"content_#{dimension}") * size).round - send(:"noncontent_#{dimension}").round
|
393
|
+
else
|
394
|
+
size
|
238
395
|
end
|
239
396
|
end
|
240
397
|
|
241
398
|
def background=(_background)
|
242
|
-
@style.background_canvas.background =
|
399
|
+
@style.background_canvas.background = _background
|
243
400
|
update_background
|
244
401
|
end
|
245
402
|
|
@@ -251,10 +408,34 @@ module CyberarmEngine
|
|
251
408
|
@style.background_canvas.height = height
|
252
409
|
|
253
410
|
@style.background_canvas.update
|
254
|
-
|
411
|
+
update_background_nine_slice
|
255
412
|
@style.border_canvas.update
|
256
413
|
end
|
257
414
|
|
415
|
+
def background_nine_slice=(_image_path)
|
416
|
+
@style.background_nine_slice_canvas.image = _image_path
|
417
|
+
update_background_nine_slice
|
418
|
+
end
|
419
|
+
|
420
|
+
def update_background_nine_slice
|
421
|
+
@style.background_nine_slice_canvas.x = @x
|
422
|
+
@style.background_nine_slice_canvas.y = @y
|
423
|
+
@style.background_nine_slice_canvas.z = @z
|
424
|
+
@style.background_nine_slice_canvas.width = width
|
425
|
+
@style.background_nine_slice_canvas.height = height
|
426
|
+
|
427
|
+
@style.background_nine_slice_canvas.mode = @style.background_nine_slice_mode
|
428
|
+
|
429
|
+
@style.background_nine_slice_canvas.color = @style.background_nine_slice_color
|
430
|
+
|
431
|
+
@style.background_nine_slice_canvas.left = @style.background_nine_slice_left
|
432
|
+
@style.background_nine_slice_canvas.top = @style.background_nine_slice_top
|
433
|
+
@style.background_nine_slice_canvas.right = @style.background_nine_slice_right
|
434
|
+
@style.background_nine_slice_canvas.bottom = @style.background_nine_slice_bottom
|
435
|
+
|
436
|
+
@style.background_nine_slice_canvas.image = @style.background_nine_slice
|
437
|
+
end
|
438
|
+
|
258
439
|
def root
|
259
440
|
return self if is_root?
|
260
441
|
|
@@ -262,11 +443,9 @@ module CyberarmEngine
|
|
262
443
|
@root = parent
|
263
444
|
|
264
445
|
loop do
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
@root = @root.parent
|
269
|
-
end
|
446
|
+
break unless @root&.parent
|
447
|
+
|
448
|
+
@root = @root.parent
|
270
449
|
end
|
271
450
|
end
|
272
451
|
|
@@ -277,6 +456,12 @@ module CyberarmEngine
|
|
277
456
|
@gui_state != nil
|
278
457
|
end
|
279
458
|
|
459
|
+
def focus(_)
|
460
|
+
warn "#{self.class}#focus was not overridden!"
|
461
|
+
|
462
|
+
:handled
|
463
|
+
end
|
464
|
+
|
280
465
|
def recalculate
|
281
466
|
raise "#{self.class}#recalculate was not overridden!"
|
282
467
|
end
|
@@ -295,5 +480,9 @@ module CyberarmEngine
|
|
295
480
|
def to_s
|
296
481
|
"#{self.class} x=#{x} y=#{y} width=#{width} height=#{height} value=#{value.is_a?(String) ? "\"#{value}\"" : value}"
|
297
482
|
end
|
483
|
+
|
484
|
+
def inspect
|
485
|
+
to_s
|
486
|
+
end
|
298
487
|
end
|
299
488
|
end
|
@@ -34,69 +34,6 @@ module CyberarmEngine
|
|
34
34
|
@text.draw
|
35
35
|
end
|
36
36
|
|
37
|
-
def enter(_sender)
|
38
|
-
@focus = false unless window.button_down?(Gosu::MsLeft)
|
39
|
-
|
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]
|
46
|
-
else
|
47
|
-
@style.background_canvas.background = @style.hover[:background]
|
48
|
-
@text.color = @style.hover[:color]
|
49
|
-
end
|
50
|
-
|
51
|
-
:handled
|
52
|
-
end
|
53
|
-
|
54
|
-
def left_mouse_button(_sender, _x, _y)
|
55
|
-
@focus = true
|
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
|
-
|
65
|
-
window.current_state.focus = self
|
66
|
-
|
67
|
-
:handled
|
68
|
-
end
|
69
|
-
|
70
|
-
def released_left_mouse_button(sender, _x, _y)
|
71
|
-
enter(sender)
|
72
|
-
|
73
|
-
:handled
|
74
|
-
end
|
75
|
-
|
76
|
-
def clicked_left_mouse_button(_sender, _x, _y)
|
77
|
-
@block.call(self) if @enabled && @block
|
78
|
-
|
79
|
-
:handled
|
80
|
-
end
|
81
|
-
|
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
|
90
|
-
|
91
|
-
:handled
|
92
|
-
end
|
93
|
-
|
94
|
-
def blur(_sender)
|
95
|
-
@focus = false
|
96
|
-
|
97
|
-
:handled
|
98
|
-
end
|
99
|
-
|
100
37
|
def recalculate
|
101
38
|
unless @enabled
|
102
39
|
@style.background_canvas.background = @style.disabled[:background]
|
@@ -5,8 +5,11 @@ module CyberarmEngine
|
|
5
5
|
super(options, block)
|
6
6
|
options[:toggled] = options[:checked]
|
7
7
|
|
8
|
+
options[:parent] = self
|
8
9
|
@toggle_button = ToggleButton.new(options)
|
9
|
-
|
10
|
+
|
11
|
+
options[:parent] = self
|
12
|
+
@label = TextBlock.new(text, options)
|
10
13
|
|
11
14
|
@label.subscribe(:holding_left_mouse_button) do |sender, x, y|
|
12
15
|
@toggle_button.left_mouse_button(sender, x, y)
|