minigl 2.1.2 → 2.2.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 +4 -2
- data/lib/minigl/forms.rb +205 -25
- data/lib/minigl/global.rb +2 -2
- data/test/data/img/text.png +0 -0
- data/test/game.rb +28 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf74cda701aadb5941c6b9e7a35c1ef534fcb55608bfc6cf9e2614fce53e48c5
|
4
|
+
data.tar.gz: 53ba4be1ad4f60c97ba926986d8909df7f7db2eb9706f25a7a62f3f1c91ed68c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97699a40a88821a6506e4bf8861d0917c71753424b94131bcbecd7e7355ba484575114df951a423d0998307cfed731f18f80e6551de9bd2f539618a1bf562ddf
|
7
|
+
data.tar.gz: 79ebb0b3647c2e80bb43d1927c42f6ba027970d6fe11c273aba72bc2747cf9207c6cfc2868928bdd772b7eee7296e388d1a58924c03290e13c659a56bb08e34b
|
data/README.md
CHANGED
@@ -29,6 +29,8 @@ After installing the Gosu dependencies, you can just `gem install minigl`.
|
|
29
29
|
* The [wiki](https://github.com/victords/minigl/wiki) is a work in progress with tutorials and examples.
|
30
30
|
* Test package and examples aren't complete!
|
31
31
|
|
32
|
-
## Version 2.
|
32
|
+
## Version 2.2.0
|
33
33
|
|
34
|
-
*
|
34
|
+
* Added the `tileable` option to `Res::imgs`.
|
35
|
+
* Added the `anchor` option to all form components.
|
36
|
+
* Added the `Panel` class, to easily group form components - take a look at the docs!
|
data/lib/minigl/forms.rb
CHANGED
@@ -1,6 +1,27 @@
|
|
1
1
|
require_relative 'global'
|
2
2
|
|
3
3
|
module MiniGL
|
4
|
+
module FormUtils # :nodoc:
|
5
|
+
def self.check_anchor(anchor, x, y, w, h, area_w = G.window.width, area_h = G.window.height)
|
6
|
+
if anchor
|
7
|
+
case anchor
|
8
|
+
when /^top(_center)?$|^north$/i then anchor_alias = :top_center; x += (area_w - w) / 2
|
9
|
+
when /^top_right$|^northeast$/i then anchor_alias = :top_right; x = area_w - w - x
|
10
|
+
when /^(center_)?left$|^west$/i then anchor_alias = :center_left; y += (area_h - h) / 2
|
11
|
+
when /^center$/i then anchor_alias = :center; x += (area_w - w) / 2; y += (area_h - h) / 2
|
12
|
+
when /^(center_)?right$|^east$/i then anchor_alias = :center_right; x = area_w - w - x; y += (area_h - h) / 2
|
13
|
+
when /^bottom_left$|^southwest$/i then anchor_alias = :bottom_left; y = area_h - h - y
|
14
|
+
when /^bottom(_center)?$|^south$/i then anchor_alias = :bottom_center; x += (area_w - w) / 2; y = area_h - h - y
|
15
|
+
when /^bottom_right$|^southeast$/i then anchor_alias = :bottom_right; x = area_w - w - x; y = area_h - h - y
|
16
|
+
else anchor_alias = :top_left
|
17
|
+
end
|
18
|
+
else
|
19
|
+
anchor_alias = :top_left
|
20
|
+
end
|
21
|
+
[anchor_alias, x, y]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
4
25
|
# This class is an abstract ancestor for all form components (Button,
|
5
26
|
# ToggleButton and TextField).
|
6
27
|
class Component
|
@@ -16,6 +37,8 @@ module MiniGL
|
|
16
37
|
# The height of the component
|
17
38
|
attr_reader :h
|
18
39
|
|
40
|
+
attr_reader :anchor, :anchor_offset_x, :anchor_offset_y # :nodoc:
|
41
|
+
|
19
42
|
# Determines whether the control is enabled, i.e., will process user input.
|
20
43
|
attr_accessor :enabled
|
21
44
|
|
@@ -38,6 +61,131 @@ module MiniGL
|
|
38
61
|
@disabled_text_color = disabled_text_color
|
39
62
|
@enabled = @visible = true
|
40
63
|
end
|
64
|
+
|
65
|
+
def update; end # :nodoc:
|
66
|
+
|
67
|
+
# Sets the position of the component.
|
68
|
+
# Parameters:
|
69
|
+
# [x] The new x coordinate.
|
70
|
+
# [y] The new y coordinate.
|
71
|
+
def set_position(x, y)
|
72
|
+
@x = x; @y = y
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Represents a container of form components.
|
77
|
+
class Panel
|
78
|
+
# Whether the components inside this panel are enabled.
|
79
|
+
attr_reader :enabled
|
80
|
+
|
81
|
+
# Gets or sets whether the panel (and thus all components inside it) are visible.
|
82
|
+
attr_accessor :visible
|
83
|
+
|
84
|
+
# Creates a new Panel.
|
85
|
+
# Parameters:
|
86
|
+
# [x] The horizontal coordinate of the top-left corner of the panel, or the horizontal offset from the anchor, if provided.
|
87
|
+
# [y] The vertical coordinate of the top-left corner of the panel, or the vertical offset from the anchor, if provided.
|
88
|
+
# [w] The width of the panel, in pixels.
|
89
|
+
# [h] The height of the panel, in pixels.
|
90
|
+
# [controls] An array of <code>Component</code>s that will be initially inside this panel.
|
91
|
+
# [img] Identifier of the image for the panel (see details in +Res::img+).
|
92
|
+
# [img_mode] Mode to scale the image. If +:normal+ (default), the image will be loaded as a single image and scaled to fit the entire size of the panel;
|
93
|
+
# if +:tiled+, the image will be loaded as a 3x3 spritesheet, where the "corner" images (i.e., indices 0, 2, 6 and 8) will be scaled by the +scale_x+ and +scale_y+ parameters,
|
94
|
+
# the "border" images (indices 1, 3, 5 and 7) will be stretched in the corresponding direction (indices 1 and 7 will be horizontally stretched and indices 3 and 5, vertically),
|
95
|
+
# and the "center" image (index 4) will be stretched in both directions, as needed, to fill the width and height of the panel.
|
96
|
+
# [retro] Whether the image should be loaded in retro mode.
|
97
|
+
# [scale_x] The fixed horizontal scale for "corner" and left and right "border" images (if +img_mode+ is +:tiled+).
|
98
|
+
# [scale_y] The fixed vertical scale for "corner" and top and bottom "border" images (if +img_mode+ is +:tiled+).
|
99
|
+
# [anchor] An alias for a predefined position of the window to be used as "anchor", i.e., reference for the positioning of the panel.
|
100
|
+
# Following are the valid values and a description of the corresponding position if +x+ and +y+ are 0 (these will be offsets from the reference position):
|
101
|
+
# * +:north+ or +:top+ or +:top_center+: the panel will be horizontally centered and its top will be at the top of the window.
|
102
|
+
# * +:northeast+ or +:top_right+: the top-right corner of the panel will meet the top-right corner of the window.
|
103
|
+
# * +:west+ or +:left+ or +:center_left+: the panel will be vertically centered and its left edge will be at the left edge of the window.
|
104
|
+
# * +:center+: the panel will be horizontally and vertically centered on the window.
|
105
|
+
# * +:east+ or +:right+ or +:center_right+: the panel will be vertically centered and its right edge will be at the right edge of the window.
|
106
|
+
# * +:southwest+ or +:bottom_left+: the bottom-left corner of the panel will meet the bottom-left corner of the window.
|
107
|
+
# * +:south+ or +:bottom+ or +:bottom_center+: the panel will be horizontally centered and its bottom will be at the bottom of the window.
|
108
|
+
# * +:southeast+ or +:bottom_right+: the bottom-right corner of the panel will meet the bottom-right corner of the window.
|
109
|
+
# If a value is not provided, the reference is the top-left corner of the screen.
|
110
|
+
# Components added as children of <code>Panel</code>s use the panel's coordinates as reference instead of the window.
|
111
|
+
def initialize(x, y, w, h, controls = [], img = nil, img_mode = :normal, retro = nil, scale_x = 1, scale_y = 1, anchor = nil)
|
112
|
+
_, x, y = FormUtils.check_anchor(anchor, x, y, w, h)
|
113
|
+
@x = x; @y = y; @w = w; @h = h
|
114
|
+
@controls = controls
|
115
|
+
controls.each do |c|
|
116
|
+
_, x, y = FormUtils.check_anchor(c.anchor, c.anchor_offset_x, c.anchor_offset_y, c.w, c.h, @w, @h)
|
117
|
+
c.set_position(@x + x, @y + y)
|
118
|
+
end
|
119
|
+
|
120
|
+
if img
|
121
|
+
retro = Res.retro_images if retro.nil?
|
122
|
+
if img_mode == :tiled
|
123
|
+
@img = Res.imgs(img, 3, 3, true, '.png', retro, true)
|
124
|
+
@scale_x = scale_x
|
125
|
+
@scale_y = scale_y
|
126
|
+
@tile_w = @img[0].width * @scale_x
|
127
|
+
@tile_h = @img[0].height * @scale_y
|
128
|
+
@draw_center_x = @w > 2 * @tile_w
|
129
|
+
@draw_center_y = @h > 2 * @tile_h
|
130
|
+
@center_scale_x = (@w - 2 * @tile_w).to_f / @tile_w * @scale_x
|
131
|
+
@center_scale_y = (@h - 2 * @tile_h).to_f / @tile_h * @scale_y
|
132
|
+
else
|
133
|
+
@img = Res.img(img, true, false, '.png', retro)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
@visible = @enabled = true
|
138
|
+
end
|
139
|
+
|
140
|
+
# Updates all child components of this panel.
|
141
|
+
def update
|
142
|
+
@controls.each(&:update)
|
143
|
+
end
|
144
|
+
|
145
|
+
# Enables or disables all child components of this panel.
|
146
|
+
# Parameters:
|
147
|
+
# [value] Whether the components should be enabled.
|
148
|
+
def enabled=(value)
|
149
|
+
@enabled = value
|
150
|
+
@controls.each { |c| c.enabled = value }
|
151
|
+
end
|
152
|
+
|
153
|
+
# Adds a component to this panel.
|
154
|
+
# Parameters:
|
155
|
+
# [c] The component to add.
|
156
|
+
def add_component(c)
|
157
|
+
_, x, y = FormUtils.check_anchor(c.anchor, c.anchor_offset_x, c.anchor_offset_y, c.w, c.h, @w, @h)
|
158
|
+
c.set_position(@x + x, @y + y)
|
159
|
+
@controls << c
|
160
|
+
end
|
161
|
+
|
162
|
+
# Draws the panel and all its child components.
|
163
|
+
# Parameters:
|
164
|
+
# [alpha] The opacity of the panel (0 = fully transparent, 255 = fully opaque).
|
165
|
+
# [z_index] The z-index to draw the panel.
|
166
|
+
# [color] The color to apply as filter to the panel image and to all child components' images as well.
|
167
|
+
def draw(alpha = 255, z_index = 0, color = 0xffffff)
|
168
|
+
return unless @visible
|
169
|
+
|
170
|
+
c = (alpha << 24) | color
|
171
|
+
if @img
|
172
|
+
if @img.is_a?(Array)
|
173
|
+
@img[0].draw(@x, @y, z_index, @scale_x, @scale_y, c)
|
174
|
+
@img[1].draw(@x + @tile_w, @y, z_index, @center_scale_x, @scale_y, c) if @draw_center_x
|
175
|
+
@img[2].draw(@x + @w - @tile_w, @y, z_index, @scale_x, @scale_y, c)
|
176
|
+
@img[3].draw(@x, @y + @tile_h, z_index, @scale_x, @center_scale_y, c) if @draw_center_y
|
177
|
+
@img[4].draw(@x + @tile_w, @y + @tile_h, z_index, @center_scale_x, @center_scale_y, c) if @draw_center_x && @draw_center_y
|
178
|
+
@img[5].draw(@x + @w - @tile_w, @y + @tile_h, z_index, @scale_x, @center_scale_y, c) if @draw_center_y
|
179
|
+
@img[6].draw(@x, @y + @h - @tile_h, z_index, @scale_x, @scale_y, c)
|
180
|
+
@img[7].draw(@x + @tile_w, @y + @h - @tile_h, z_index, @center_scale_x, @scale_y, c) if @draw_center_x
|
181
|
+
@img[8].draw(@x + @w - @tile_w, @y + @h - @tile_h, z_index, @scale_x, @scale_y, c)
|
182
|
+
else
|
183
|
+
@img.draw(@x, @y, z_index, @w.to_f / @img.width, @h.to_f / @img.height)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
@controls.each { |k| k.draw(alpha, z_index, color) }
|
188
|
+
end
|
41
189
|
end
|
42
190
|
|
43
191
|
# This class represents a button.
|
@@ -94,6 +242,7 @@ module MiniGL
|
|
94
242
|
# +Res.retro_images+ value will be used.
|
95
243
|
# [scale_x] Horizontal scale to draw the component with.
|
96
244
|
# [scale_y] Vertical scale to draw the component with.
|
245
|
+
# [anchor] See parameter with the same name in <code>Panel#initialize</code> for details.
|
97
246
|
# [action] The block of code executed when the button is clicked (or by
|
98
247
|
# calling the +click+ method).
|
99
248
|
#
|
@@ -103,7 +252,7 @@ module MiniGL
|
|
103
252
|
def initialize(x, y = nil, font = nil, text = nil, img = nil,
|
104
253
|
text_color = 0, disabled_text_color = 0, over_text_color = 0, down_text_color = 0,
|
105
254
|
center_x = true, center_y = true, margin_x = 0, margin_y = 0, width = nil, height = nil,
|
106
|
-
params = nil, retro = nil, scale_x = 1, scale_y = 1, &action)
|
255
|
+
params = nil, retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &action)
|
107
256
|
if x.is_a? Hash
|
108
257
|
y = x[:y]
|
109
258
|
font = x[:font]
|
@@ -123,24 +272,29 @@ module MiniGL
|
|
123
272
|
retro = x.fetch(:retro, nil)
|
124
273
|
scale_x = x.fetch(:scale_x, 1)
|
125
274
|
scale_y = x.fetch(:scale_y, 1)
|
275
|
+
anchor = x.fetch(:anchor, nil)
|
126
276
|
x = x[:x]
|
127
277
|
end
|
128
278
|
|
129
|
-
super x, y, font, text, text_color, disabled_text_color
|
130
|
-
@over_text_color = over_text_color
|
131
|
-
@down_text_color = down_text_color
|
132
279
|
retro = Res.retro_images if retro.nil?
|
133
280
|
@scale_x = scale_x
|
134
281
|
@scale_y = scale_y
|
135
282
|
@img =
|
136
|
-
|
137
|
-
|
283
|
+
if img; Res.imgs img, 1, 4, true, '.png', retro
|
284
|
+
else; nil; end
|
138
285
|
@w =
|
139
|
-
|
140
|
-
|
286
|
+
if img; @img[0].width * @scale_x
|
287
|
+
else; width * @scale_x; end
|
141
288
|
@h =
|
142
|
-
|
143
|
-
|
289
|
+
if img; @img[0].height * @scale_y
|
290
|
+
else; height * @scale_y; end
|
291
|
+
|
292
|
+
@anchor_offset_x = x; @anchor_offset_y = y
|
293
|
+
@anchor, x, y = FormUtils.check_anchor(anchor, x, y, @w, @h)
|
294
|
+
|
295
|
+
super x, y, font, text, text_color, disabled_text_color
|
296
|
+
@over_text_color = over_text_color
|
297
|
+
@down_text_color = down_text_color
|
144
298
|
if center_x; @text_x = x + @w / 2 if @w
|
145
299
|
else; @text_x = x + margin_x * @scale_x; end
|
146
300
|
if center_y; @text_y = y + @h / 2 if @h
|
@@ -206,7 +360,7 @@ module MiniGL
|
|
206
360
|
|
207
361
|
# Executes the button click action.
|
208
362
|
def click
|
209
|
-
@action.call @params
|
363
|
+
@action.call @params if @action
|
210
364
|
end
|
211
365
|
|
212
366
|
# Sets the position of the button in the screen.
|
@@ -291,7 +445,7 @@ module MiniGL
|
|
291
445
|
def initialize(x, y = nil, font = nil, text = nil, img = nil, checked = false,
|
292
446
|
text_color = 0, disabled_text_color = 0, over_text_color = 0, down_text_color = 0,
|
293
447
|
center_x = true, center_y = true, margin_x = 0, margin_y = 0, width = nil, height = nil,
|
294
|
-
params = nil, retro = nil, scale_x = 1, scale_y = 1, &action)
|
448
|
+
params = nil, retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &action)
|
295
449
|
if x.is_a? Hash
|
296
450
|
y = x[:y]
|
297
451
|
font = x[:font]
|
@@ -312,11 +466,12 @@ module MiniGL
|
|
312
466
|
retro = x.fetch(:retro, nil)
|
313
467
|
scale_x = x.fetch(:scale_x, 1)
|
314
468
|
scale_y = x.fetch(:scale_y, 1)
|
469
|
+
anchor = x.fetch(:anchor, nil)
|
315
470
|
x = x[:x]
|
316
471
|
end
|
317
472
|
|
318
473
|
super x, y, font, text, nil, text_color, disabled_text_color, over_text_color, down_text_color,
|
319
|
-
center_x, center_y, margin_x, margin_y, 0, 0, params, retro, scale_x, scale_y, &action
|
474
|
+
center_x, center_y, margin_x, margin_y, 0, 0, params, retro, scale_x, scale_y, anchor, &action
|
320
475
|
@img =
|
321
476
|
if img; Res.imgs img, 2, 4, true, '.png', retro
|
322
477
|
else; nil; end
|
@@ -326,6 +481,8 @@ module MiniGL
|
|
326
481
|
@h =
|
327
482
|
if img; @img[0].height * @scale_y
|
328
483
|
else; height * @scale_y; end
|
484
|
+
_, x, y = FormUtils.check_anchor(anchor, @anchor_offset_x, @anchor_offset_y, @w, @h)
|
485
|
+
set_position(x, y)
|
329
486
|
@text_x = x + @w / 2 if center_x
|
330
487
|
@text_y = y + @h / 2 if center_y
|
331
488
|
@checked = checked
|
@@ -346,7 +503,7 @@ module MiniGL
|
|
346
503
|
# been changed to checked, or +false+, otherwise.
|
347
504
|
def click
|
348
505
|
@checked = !@checked
|
349
|
-
@action.call @checked, @params
|
506
|
+
@action.call @checked, @params if @action
|
350
507
|
end
|
351
508
|
|
352
509
|
# Sets the state of the button to the value given.
|
@@ -424,6 +581,7 @@ module MiniGL
|
|
424
581
|
# +Res.retro_images+ value will be used.
|
425
582
|
# [scale_x] Horizontal scale to draw the component with.
|
426
583
|
# [scale_y] Vertical scale to draw the component with.
|
584
|
+
# [anchor] See parameter with the same name in <code>Panel#initialize</code> for details.
|
427
585
|
# [on_text_changed] The block of code executed when the text in the text
|
428
586
|
# field is changed, either by user input or by calling
|
429
587
|
# +text=+. The new text is passed as a first parameter
|
@@ -434,7 +592,7 @@ module MiniGL
|
|
434
592
|
def initialize(x, y = nil, font = nil, img = nil, cursor_img = nil, disabled_img = nil, margin_x = 0, margin_y = 0,
|
435
593
|
max_length = 100, active = false, text = '', allowed_chars = nil,
|
436
594
|
text_color = 0, disabled_text_color = 0, selection_color = 0, locale = 'en-us',
|
437
|
-
params = nil, retro = nil, scale_x = 1, scale_y = 1, &on_text_changed)
|
595
|
+
params = nil, retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &on_text_changed)
|
438
596
|
if x.is_a? Hash
|
439
597
|
y = x[:y]
|
440
598
|
font = x[:font]
|
@@ -455,16 +613,21 @@ module MiniGL
|
|
455
613
|
retro = x.fetch(:retro, nil)
|
456
614
|
scale_x = x.fetch(:scale_x, 1)
|
457
615
|
scale_y = x.fetch(:scale_y, 1)
|
616
|
+
anchor = x.fetch(:anchor, nil)
|
458
617
|
x = x[:x]
|
459
618
|
end
|
460
619
|
|
461
|
-
super x, y, font, text, text_color, disabled_text_color
|
462
620
|
retro = Res.retro_images if retro.nil?
|
463
621
|
@scale_x = scale_x
|
464
622
|
@scale_y = scale_y
|
465
623
|
@img = Res.img img, false, false, '.png', retro
|
466
624
|
@w = @img.width * @scale_x
|
467
625
|
@h = @img.height * @scale_y
|
626
|
+
|
627
|
+
@anchor_offset_x = x; @anchor_offset_y = y
|
628
|
+
@anchor, x, y = FormUtils.check_anchor(anchor, x, y, @w, @h)
|
629
|
+
|
630
|
+
super x, y, font, text, text_color, disabled_text_color
|
468
631
|
@cursor_img = Res.img(cursor_img, false, false, '.png', retro) if cursor_img
|
469
632
|
@disabled_img = Res.img(disabled_img, false, false, '.png', retro) if disabled_img
|
470
633
|
@max_length = max_length
|
@@ -908,12 +1071,13 @@ module MiniGL
|
|
908
1071
|
# +Res.retro_images+ value will be used.
|
909
1072
|
# [scale_x] Horizontal scale to draw the component with.
|
910
1073
|
# [scale_y] Vertical scale to draw the component with.
|
1074
|
+
# [anchor] See parameter with the same name in <code>Panel#initialize</code> for details.
|
911
1075
|
#
|
912
1076
|
# *Obs.:* This method accepts named parameters, but +x+, +y+, +w+, +h+, +bg+
|
913
1077
|
# and +fg+ are mandatory.
|
914
1078
|
def initialize(x, y = nil, w = nil, h = nil, bg = nil, fg = nil,
|
915
1079
|
max_value = 100, value = 100, fg_margin_x = 0, fg_margin_y = 0, # fg_left = nil, fg_right = nil,
|
916
|
-
font = nil, text_color = 0, format = nil, retro = nil, scale_x = 1, scale_y = 1)
|
1080
|
+
font = nil, text_color = 0, format = nil, retro = nil, scale_x = 1, scale_y = 1, anchor = nil)
|
917
1081
|
if x.is_a? Hash
|
918
1082
|
y = x[:y]
|
919
1083
|
w = x[:w]
|
@@ -930,14 +1094,12 @@ module MiniGL
|
|
930
1094
|
retro = x.fetch(:retro, nil)
|
931
1095
|
scale_x = x.fetch(:scale_x, 1)
|
932
1096
|
scale_y = x.fetch(:scale_y, 1)
|
1097
|
+
anchor = x.fetch(:anchor, nil)
|
933
1098
|
x = x[:x]
|
934
1099
|
end
|
935
1100
|
|
936
|
-
super x, y, font, '', text_color, text_color
|
937
1101
|
@scale_x = scale_x
|
938
1102
|
@scale_y = scale_y
|
939
|
-
@w = w * @scale_x
|
940
|
-
@h = h * @scale_y
|
941
1103
|
retro = Res.retro_images if retro.nil?
|
942
1104
|
if bg.is_a? Integer
|
943
1105
|
@bg_color = bg
|
@@ -952,6 +1114,14 @@ module MiniGL
|
|
952
1114
|
end
|
953
1115
|
@fg_margin_x = fg_margin_x * @scale_x
|
954
1116
|
@fg_margin_y = fg_margin_y * @scale_y
|
1117
|
+
|
1118
|
+
@w = (@bg ? @bg.width : w) * @scale_x
|
1119
|
+
@h = (@bg ? @bg.height : h) * @scale_y
|
1120
|
+
|
1121
|
+
@anchor_offset_x = x; @anchor_offset_y = y
|
1122
|
+
@anchor, x, y = FormUtils.check_anchor(anchor, x, y, @w, @h)
|
1123
|
+
|
1124
|
+
super x, y, font, '', text_color, text_color
|
955
1125
|
# @fg_left = fg_left
|
956
1126
|
# @fg_right = fg_right
|
957
1127
|
@max_value = max_value
|
@@ -1051,7 +1221,7 @@ module MiniGL
|
|
1051
1221
|
if @font
|
1052
1222
|
c = (alpha << 24) | @text_color
|
1053
1223
|
@text = @format == '%' ? "#{(@value.to_f / @max_value * 100).round}%" : "#{@value}/#{@max_value}"
|
1054
|
-
@font.draw_rel @text, @x + @
|
1224
|
+
@font.draw_rel @text, @x + @w / 2, @y + @h / 2, z_index, 0.5, 0.5, @scale_x, @scale_y, c
|
1055
1225
|
end
|
1056
1226
|
end
|
1057
1227
|
end
|
@@ -1091,6 +1261,7 @@ module MiniGL
|
|
1091
1261
|
# +Res.retro_images+ value will be used.
|
1092
1262
|
# [scale_x] Horizontal scale to draw the component with.
|
1093
1263
|
# [scale_y] Vertical scale to draw the component with.
|
1264
|
+
# [anchor] See parameter with the same name in <code>Panel#initialize</code> for details.
|
1094
1265
|
# [on_changed] Action performed when the value of the dropdown is changed.
|
1095
1266
|
# It must be a block with two parameters, which will receive
|
1096
1267
|
# the old and the new value, respectively.
|
@@ -1101,7 +1272,7 @@ module MiniGL
|
|
1101
1272
|
def initialize(x, y = nil, font = nil, img = nil, opt_img = nil, options = nil,
|
1102
1273
|
option = 0, text_margin = 0, width = nil, height = nil,
|
1103
1274
|
text_color = 0, disabled_text_color = 0, over_text_color = 0, down_text_color = 0,
|
1104
|
-
retro = nil, scale_x = 1, scale_y = 1, &on_changed)
|
1275
|
+
retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &on_changed)
|
1105
1276
|
if x.is_a? Hash
|
1106
1277
|
y = x[:y]
|
1107
1278
|
font = x[:font]
|
@@ -1119,10 +1290,9 @@ module MiniGL
|
|
1119
1290
|
retro = x.fetch(:retro, nil)
|
1120
1291
|
scale_x = x.fetch(:scale_x, 1)
|
1121
1292
|
scale_y = x.fetch(:scale_y, 1)
|
1293
|
+
anchor = x.fetch(:anchor, nil)
|
1122
1294
|
x = x[:x]
|
1123
1295
|
end
|
1124
|
-
|
1125
|
-
super x, y, font, options[option], text_color, disabled_text_color
|
1126
1296
|
@img = img
|
1127
1297
|
@opt_img = opt_img
|
1128
1298
|
@options = options
|
@@ -1135,13 +1305,18 @@ module MiniGL
|
|
1135
1305
|
toggle
|
1136
1306
|
}
|
1137
1307
|
)
|
1138
|
-
|
1308
|
+
|
1139
1309
|
@scale_x = scale_x
|
1140
1310
|
@scale_y = scale_y
|
1141
1311
|
@w = @buttons[0].w
|
1142
1312
|
@h = @buttons[0].h
|
1143
1313
|
@max_h = (@options.size + 1) * @h
|
1144
1314
|
|
1315
|
+
@anchor_offset_x = x; @anchor_offset_y = y
|
1316
|
+
@anchor, x, y = FormUtils.check_anchor(anchor, x, y, @w, @h)
|
1317
|
+
super x, y, font, options[option], text_color, disabled_text_color
|
1318
|
+
@buttons[0].set_position(x, y)
|
1319
|
+
|
1145
1320
|
@options.each_with_index do |o, i|
|
1146
1321
|
b = Button.new(x, y + (i+1) * @h, font, o, opt_img, text_color, disabled_text_color, over_text_color, down_text_color,
|
1147
1322
|
false, true, text_margin, 0, width, height, nil, retro, scale_x, scale_y) {
|
@@ -1183,6 +1358,11 @@ module MiniGL
|
|
1183
1358
|
@enabled = value
|
1184
1359
|
end
|
1185
1360
|
|
1361
|
+
def set_position(x, y)
|
1362
|
+
@x = x; @y = y
|
1363
|
+
@buttons.each_with_index { |b, i| b.set_position(x, y + i * @h) }
|
1364
|
+
end
|
1365
|
+
|
1186
1366
|
# Draws the drop-down list.
|
1187
1367
|
#
|
1188
1368
|
# Parameters:
|
data/lib/minigl/global.rb
CHANGED
@@ -615,12 +615,12 @@ module MiniGL
|
|
615
615
|
# [retro] Whether the image should be loaded with the 'retro' option set
|
616
616
|
# (see +Gosu::Image+ for details). If the value is omitted, the
|
617
617
|
# +Res.retro_images+ value will be used.
|
618
|
-
def imgs(id, sprite_cols, sprite_rows, global = false, ext = '.png', retro = nil)
|
618
|
+
def imgs(id, sprite_cols, sprite_rows, global = false, ext = '.png', retro = nil, tileable = false)
|
619
619
|
a = global ? @global_imgs : @imgs
|
620
620
|
return a[id] if a[id]
|
621
621
|
s = @prefix + @img_dir + id.to_s.split(@separator).join('/') + ext
|
622
622
|
retro = Res.retro_images if retro.nil?
|
623
|
-
imgs = Gosu::Image.load_tiles s, -sprite_cols, -sprite_rows, tileable:
|
623
|
+
imgs = Gosu::Image.load_tiles s, -sprite_cols, -sprite_rows, tileable: tileable, retro: retro
|
624
624
|
a[id] = imgs
|
625
625
|
end
|
626
626
|
|
data/test/data/img/text.png
CHANGED
Binary file
|
data/test/game.rb
CHANGED
@@ -22,17 +22,33 @@ class MyGame < GameWindow
|
|
22
22
|
@btn = Button.new(10, 560, @font1, 'Test', :btn, 0x008000, 0x808080, 0xffffff, 0xff9980, true, true, 0, 4, 0, 0, 'friends', nil, 2, 2) { |x| puts "hello #{x}" }
|
23
23
|
@btn.enabled = false
|
24
24
|
@chk =
|
25
|
-
ToggleButton.new(x:
|
25
|
+
ToggleButton.new(x: 0, y: 30, font: @font1, text: 'Click me', img: :check, center_x: false, margin_x: 36, params: 'friends', anchor: :south) { |c, x|
|
26
26
|
puts "hello #{x}, checked: #{c}"
|
27
27
|
}
|
28
|
-
@txt = TextField.new(x:
|
28
|
+
@txt = TextField.new(x: 0, y: 0, font: @font1, img: :text, margin_x: 15, margin_y: 5, max_length: 16, locale: 'PT-BR', scale_x: 1.2, scale_y: 0.8, anchor: :center_right)
|
29
29
|
@txt.visible = false
|
30
30
|
|
31
|
-
@pb = ProgressBar.new(
|
32
|
-
@ddl = DropDownList.new(
|
31
|
+
@pb = ProgressBar.new(50, 0, 200, 20, :barbg, :barfg, 3456, 70, 2, 2, @font1, 0xff000080, nil, nil, 1.8, 2, :center_left)
|
32
|
+
@ddl = DropDownList.new(0, 10, @font1, nil, nil, ['olá amigos', 'opção 2', 'terceira'], 0, 3, 150, 25, 0, 0x808080, 0xffffff, 0xffff00, nil, 2, 2.5, :north) { |a, b|
|
33
33
|
puts "mudou de #{a} para #{b}"
|
34
34
|
}
|
35
35
|
|
36
|
+
@panel = Panel.new(10, 10,720, 520, [
|
37
|
+
Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn),
|
38
|
+
TextField.new(x: 5, y: 40, font: @font1, img: :text, margin_x: 5, margin_y: 5, anchor: :top_left),
|
39
|
+
Button.new(x: 0, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :top),
|
40
|
+
DropDownList.new(x: 0, y: 40, width: 150, height: 25, font: @font1, options: ['olá amigos', 'opção 2', 'terceira'], anchor: :north),
|
41
|
+
Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :northeast),
|
42
|
+
Button.new(x: 5, y: 0, font: @font1, text: 'Teste', img: :btn, anchor: :left),
|
43
|
+
Button.new(x: 0, y: 0, font: @font1, text: 'Teste', img: :btn, anchor: :center),
|
44
|
+
Button.new(x: 5, y: 0, font: @font1, text: 'Teste', img: :btn, anchor: :right),
|
45
|
+
ToggleButton.new(x: 5, y: 40, img: :check, center_x: false, margin_x: 36, anchor: :east),
|
46
|
+
Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :southwest),
|
47
|
+
Button.new(x: 0, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :south),
|
48
|
+
ProgressBar.new(0, 40, 200, 20, :barbg, :barfg, 3456, 70, 2, 2, @font1, 0xff000080, nil, nil, 1, 1, :bottom),
|
49
|
+
|
50
|
+
], :text, :tiled, true, 2, 2, :bottom_right)
|
51
|
+
|
36
52
|
@eff = Effect.new(100, 100, :check, 2, 4, 10, nil, nil, '1')
|
37
53
|
|
38
54
|
@angle = 0
|
@@ -59,6 +75,10 @@ class MyGame < GameWindow
|
|
59
75
|
@pb.visible = !@pb.visible if KB.key_pressed? Gosu::KbE
|
60
76
|
@ddl.enabled = !@ddl.enabled if KB.key_pressed? Gosu::KbQ
|
61
77
|
@ddl.visible = !@ddl.visible if KB.key_pressed? Gosu::KbW
|
78
|
+
@panel.enabled = !@panel.enabled if KB.key_pressed? Gosu::KbN
|
79
|
+
@panel.visible = !@panel.visible if KB.key_pressed? Gosu::KbM
|
80
|
+
|
81
|
+
@panel.add_component(Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :southeast)) if KB.key_pressed?(Gosu::KbB)
|
62
82
|
|
63
83
|
@pb.increase 1 if KB.key_down? Gosu::KbD
|
64
84
|
@pb.decrease 1 if KB.key_down? Gosu::KbA
|
@@ -89,6 +109,8 @@ class MyGame < GameWindow
|
|
89
109
|
@txt.update
|
90
110
|
@ddl.update
|
91
111
|
|
112
|
+
@panel.update
|
113
|
+
|
92
114
|
@eff.update
|
93
115
|
|
94
116
|
@objs.each_with_index do |o, i|
|
@@ -119,6 +141,8 @@ class MyGame < GameWindow
|
|
119
141
|
@txt.draw
|
120
142
|
@pb.draw 0x66
|
121
143
|
|
144
|
+
@panel.draw(204, 10)
|
145
|
+
|
122
146
|
@eff.draw
|
123
147
|
end
|
124
148
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minigl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor David Santos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gosu
|