minigl 1.2.7 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -4
- data/data/img/check.png +0 -0
- data/lib/minigl/forms.rb +104 -17
- data/test/game.rb +7 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 667a3bf9b0c24c5b639a09bd70f8020fa09d7f88
|
4
|
+
data.tar.gz: 6c57295ac2e1e00a442d8ab87a959c4dc10b63d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e958267a7ff88286ed27bba81e4e59554fbb91dc80f5fe351368060074b4c6a12439f43fd91ef388d6117f73bf0e8a8931e69209eb0b8ef3acf3ee134bcf4d8
|
7
|
+
data.tar.gz: a5f27fd536134d5a4dd69113ed5c35d98db356fe0afaad3856be0160489fe98606c877e3d0fcb26a86f2e2f7e673fd2e12d9298b73903df6b3d75338bea0c150
|
data/README.md
CHANGED
@@ -22,8 +22,9 @@ this [working game example](https://github.com/victords/aventura-do-saber).
|
|
22
22
|
* An auxiliary, tutorial-like documentation is under construction
|
23
23
|
[here](https://github.com/victords/minigl/wiki).
|
24
24
|
|
25
|
-
**Version 1.
|
25
|
+
**Version 1.3.0**
|
26
26
|
|
27
|
-
*
|
28
|
-
*
|
29
|
-
*
|
27
|
+
* Introduced the `ToggleButton` class.
|
28
|
+
* `Button` action now accepts parameters.
|
29
|
+
* `TextField` now triggers a "text changed" event (which accepts parameters,
|
30
|
+
as well).
|
data/data/img/check.png
ADDED
Binary file
|
data/lib/minigl/forms.rb
CHANGED
@@ -28,9 +28,15 @@ module AGL
|
|
28
28
|
# if +img+ is +nil+.
|
29
29
|
# [height] Height of the button clickable area. This parameter is used
|
30
30
|
# only if +img+ is +nil+.
|
31
|
+
# [params] An object containing any parameters you want passed to the
|
32
|
+
# +action+ block. When the button is clicked, the following is
|
33
|
+
# called:
|
34
|
+
# @action.call @params
|
35
|
+
# Note that this doesn't force you to declare a block that takes
|
36
|
+
# parameters.
|
31
37
|
# [action] The block of code executed when the button is clicked (or by
|
32
38
|
# calling the +click+ method).
|
33
|
-
def initialize x, y, font, text, img, text_color = 0, center = true, margin_x = 0, margin_y = 0, width = nil, height = nil, &action
|
39
|
+
def initialize x, y, font, text, img, text_color = 0, center = true, margin_x = 0, margin_y = 0, width = nil, height = nil, params = nil, &action
|
34
40
|
@x = x
|
35
41
|
@y = y
|
36
42
|
@font = font
|
@@ -54,6 +60,7 @@ module AGL
|
|
54
60
|
@text_color = text_color
|
55
61
|
@center = center
|
56
62
|
@action = action
|
63
|
+
@params = params
|
57
64
|
|
58
65
|
@state = :up
|
59
66
|
@img_index = 0
|
@@ -70,6 +77,8 @@ module AGL
|
|
70
77
|
if mouse_over
|
71
78
|
@img_index = 1
|
72
79
|
@state = :over
|
80
|
+
else
|
81
|
+
@img_index = 0
|
73
82
|
end
|
74
83
|
elsif @state == :over
|
75
84
|
if not mouse_over
|
@@ -78,30 +87,36 @@ module AGL
|
|
78
87
|
elsif mouse_press
|
79
88
|
@img_index = 2
|
80
89
|
@state = :down
|
90
|
+
else
|
91
|
+
@img_index = 1
|
81
92
|
end
|
82
93
|
elsif @state == :down
|
83
94
|
if not mouse_over
|
84
95
|
@img_index = 0
|
85
96
|
@state = :down_out
|
86
97
|
elsif mouse_rel
|
87
|
-
@img_index =
|
88
|
-
@state = :
|
98
|
+
@img_index = 1
|
99
|
+
@state = :over
|
89
100
|
click
|
101
|
+
else
|
102
|
+
@img_index = 2
|
90
103
|
end
|
91
|
-
|
104
|
+
else # :down_out
|
92
105
|
if mouse_over
|
93
106
|
@img_index = 2
|
94
107
|
@state = :down
|
95
108
|
elsif mouse_rel
|
96
109
|
@img_index = 0
|
97
110
|
@state = :up
|
111
|
+
else
|
112
|
+
@img_index = 0
|
98
113
|
end
|
99
114
|
end
|
100
115
|
end
|
101
116
|
|
102
117
|
# Executes the button click action.
|
103
118
|
def click
|
104
|
-
@action.call
|
119
|
+
@action.call @params
|
105
120
|
end
|
106
121
|
|
107
122
|
# Sets the position of the button in the screen.
|
@@ -141,6 +156,64 @@ module AGL
|
|
141
156
|
end
|
142
157
|
end
|
143
158
|
|
159
|
+
# This class represents a toggle button, which can be also interpreted as a
|
160
|
+
# check box. It is always in one of two states, given as +true+ or +false+
|
161
|
+
# by its property +checked+.
|
162
|
+
class ToggleButton < Button
|
163
|
+
# Defines the state of the button (returns +true+ or +false+).
|
164
|
+
attr_reader :checked
|
165
|
+
|
166
|
+
# Creates a ToggleButton. All parameters work the same as in Button,
|
167
|
+
# except the image, +img+, which now has to be composed of two columns
|
168
|
+
# and three rows, the first column with images for the unchecked state,
|
169
|
+
# and the second with images for the checked state.
|
170
|
+
#
|
171
|
+
# The +action+ block now will always receive a first boolean parameter
|
172
|
+
# corresponding to the value of +checked+. So, if you want to pass
|
173
|
+
# parameters to the block, you should declare it like this:
|
174
|
+
# b = ToggleButton.new ... { |checked, params|
|
175
|
+
# puts "button was checked" if checked
|
176
|
+
# # do something with params
|
177
|
+
# }
|
178
|
+
def initialize x, y, font, text, img, text_color = 0, center = true, margin_x = 0, margin_y = 0, width = nil, height = nil, params = nil, &action
|
179
|
+
super x, y, font, text, nil, text_color, center, margin_x, margin_y, width, height, params, &action
|
180
|
+
@img =
|
181
|
+
if img; Res.imgs img, 2, 3, true
|
182
|
+
else; nil; end
|
183
|
+
@w =
|
184
|
+
if img; @img[0].width
|
185
|
+
else; width; end
|
186
|
+
@h =
|
187
|
+
if img; @img[0].height
|
188
|
+
else; height; end
|
189
|
+
end
|
190
|
+
|
191
|
+
# Updates the button, checking the mouse movement and buttons to define
|
192
|
+
# the button state.
|
193
|
+
def update
|
194
|
+
super
|
195
|
+
@img_index *= 2
|
196
|
+
@img_index += 1 if @checked
|
197
|
+
end
|
198
|
+
|
199
|
+
# Executes the button click action, and toggles its state. The +action+
|
200
|
+
# block always receives as a first parameter +true+, if the button has
|
201
|
+
# been changed to checked, or +false+, otherwise.
|
202
|
+
def click
|
203
|
+
@checked = !@checked
|
204
|
+
@action.call @checked, @params
|
205
|
+
end
|
206
|
+
|
207
|
+
# Sets the state of the button to the value given.
|
208
|
+
#
|
209
|
+
# Parameters:
|
210
|
+
# [value] The state to be set (+true+ for checked, +false+ for unchecked).
|
211
|
+
def checked= value
|
212
|
+
click if value != @checked
|
213
|
+
@checked = value
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
144
217
|
# This class represents a text field (input).
|
145
218
|
class TextField
|
146
219
|
# The current text inside the text field.
|
@@ -176,8 +249,17 @@ module AGL
|
|
176
249
|
# [selection_color] The color of the rectangle highlighting selected text,
|
177
250
|
# in hexadecimal RRGGBB format. The rectangle will
|
178
251
|
# always be drawn with 50% of opacity.
|
252
|
+
# [params] An object containing any parameters you want passed to the
|
253
|
+
# +on_text_changed+ block. When the text of the text field is
|
254
|
+
# changed, the following is called:
|
255
|
+
# @on_text_changed.call @params
|
256
|
+
# Note that this doesn't force you to declare a block that takes
|
257
|
+
# parameters.
|
258
|
+
# [on_text_changed] The block of code executed when the text in the text
|
259
|
+
# field is changed, either by user input or by calling
|
260
|
+
# +text=+. Can be +nil+.
|
179
261
|
def initialize x, y, font, img, cursor_img = nil, margin_x = 0, margin_y = 0, max_length = 100, active = false, text = "",
|
180
|
-
allowed_chars = nil, text_color = 0, selection_color = 0
|
262
|
+
allowed_chars = nil, text_color = 0, selection_color = 0, params = nil, &on_text_changed
|
181
263
|
@x = x
|
182
264
|
@y = y
|
183
265
|
@font = font
|
@@ -221,6 +303,9 @@ module AGL
|
|
221
303
|
else
|
222
304
|
@chars
|
223
305
|
end
|
306
|
+
|
307
|
+
@on_text_changed = on_text_changed
|
308
|
+
@params = params
|
224
309
|
end
|
225
310
|
|
226
311
|
# Updates the text field, checking for mouse events and keyboard input.
|
@@ -280,7 +365,7 @@ module AGL
|
|
280
365
|
inserted = false
|
281
366
|
for i in 0..46 # alnum
|
282
367
|
if KB.key_pressed?(@k[i]) or KB.key_held?(@k[i])
|
283
|
-
remove_interval if @anchor1 and @anchor2
|
368
|
+
remove_interval true if @anchor1 and @anchor2
|
284
369
|
if i < 26
|
285
370
|
# bool capsLock = Console.CapsLock;
|
286
371
|
if shift
|
@@ -400,6 +485,7 @@ module AGL
|
|
400
485
|
@anchor1 = nil
|
401
486
|
@anchor2 = nil
|
402
487
|
set_cursor_visible
|
488
|
+
@on_text_changed.call @params if @on_text_changed
|
403
489
|
end
|
404
490
|
|
405
491
|
# Returns the currently selected text.
|
@@ -495,19 +581,18 @@ module AGL
|
|
495
581
|
end
|
496
582
|
|
497
583
|
def insert_char char
|
498
|
-
return unless @allowed_chars.index char
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
@nodes[i] += @font.text_width(char)
|
504
|
-
end
|
505
|
-
@cur_node += 1
|
506
|
-
set_cursor_visible
|
584
|
+
return unless @allowed_chars.index char and @text.length < @max_length
|
585
|
+
@text.insert @cur_node, char
|
586
|
+
@nodes.insert @cur_node + 1, @nodes[@cur_node] + @font.text_width(char)
|
587
|
+
for i in (@cur_node + 2)..(@nodes.size - 1)
|
588
|
+
@nodes[i] += @font.text_width(char)
|
507
589
|
end
|
590
|
+
@cur_node += 1
|
591
|
+
set_cursor_visible
|
592
|
+
@on_text_changed.call @params if @on_text_changed
|
508
593
|
end
|
509
594
|
|
510
|
-
def remove_interval
|
595
|
+
def remove_interval will_insert = false
|
511
596
|
min = @anchor1 < @anchor2 ? @anchor1 : @anchor2
|
512
597
|
max = min == @anchor1 ? @anchor2 : @anchor1
|
513
598
|
interval_width = 0
|
@@ -523,6 +608,7 @@ module AGL
|
|
523
608
|
@anchor1 = nil
|
524
609
|
@anchor2 = nil
|
525
610
|
set_cursor_visible
|
611
|
+
@on_text_changed.call @params if @on_text_changed and not will_insert
|
526
612
|
end
|
527
613
|
|
528
614
|
def remove_char back
|
@@ -534,6 +620,7 @@ module AGL
|
|
534
620
|
@nodes[i] -= char_width
|
535
621
|
end
|
536
622
|
set_cursor_visible
|
623
|
+
@on_text_changed.call @params if @on_text_changed
|
537
624
|
end
|
538
625
|
end
|
539
626
|
end
|
data/test/game.rb
CHANGED
@@ -11,8 +11,9 @@ class MyGame < Gosu::Window
|
|
11
11
|
|
12
12
|
@font = Res.font :font1, 20
|
13
13
|
@writer = TextHelper.new @font, 5
|
14
|
-
@btn = Button.new(10, 560, @font, "Test", :btn, 0x008000) {}
|
15
|
-
@
|
14
|
+
@btn = Button.new(10, 560, @font, "Test", :btn, 0x008000, 0, 0, 0, 0, 0, "friends") { |x| puts "hello #{x}" }
|
15
|
+
@chk = ToggleButton.new(210, 560, @font, "Click me", :check, 0xffffffff, false, 36, 5, 0, 0, "friends") { |c, x| puts "hello #{x}, checked: #{c}" }
|
16
|
+
@txt = TextField.new(10, 520, @font, :text, nil, 15, 5, 16, false, "", nil, 0, 0x0000ff, "test") { |x| puts "field #{x}" }
|
16
17
|
end
|
17
18
|
|
18
19
|
def needs_cursor?
|
@@ -26,6 +27,7 @@ class MyGame < Gosu::Window
|
|
26
27
|
@obj1.y += 1 if KB.key_held? Gosu::KbDown
|
27
28
|
@obj1.x -= 1 if KB.key_down? Gosu::KbLeft
|
28
29
|
@btn.set_position rand(700), rand(550) if KB.key_pressed? Gosu::KbSpace
|
30
|
+
@chk.checked = false if KB.key_pressed? Gosu::KbEscape
|
29
31
|
@txt.set_position rand(700), rand(550) if KB.key_pressed? Gosu::KbReturn
|
30
32
|
|
31
33
|
Mouse.update
|
@@ -35,6 +37,7 @@ class MyGame < Gosu::Window
|
|
35
37
|
end
|
36
38
|
|
37
39
|
@btn.update
|
40
|
+
@chk.update
|
38
41
|
@txt.update
|
39
42
|
end
|
40
43
|
|
@@ -44,9 +47,10 @@ class MyGame < Gosu::Window
|
|
44
47
|
@writer.write_breaking "Testing multiple line text.\nThis should draw text "\
|
45
48
|
"across multiple lines, respecting a limit width. "\
|
46
49
|
"Furthermore, the text must be right-aligned.",
|
47
|
-
780, 300, 300, :right
|
50
|
+
780, 300, 300, :right, 0xffffffff
|
48
51
|
|
49
52
|
@btn.draw 0xcc
|
53
|
+
@chk.draw
|
50
54
|
@txt.draw
|
51
55
|
end
|
52
56
|
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: 1.
|
4
|
+
version: 1.3.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: 2014-08-
|
11
|
+
date: 2014-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gosu
|
@@ -41,6 +41,7 @@ files:
|
|
41
41
|
- Rakefile
|
42
42
|
- data/font/font1.ttf
|
43
43
|
- data/img/btn.png
|
44
|
+
- data/img/check.png
|
44
45
|
- data/img/image.png
|
45
46
|
- data/img/img1.png
|
46
47
|
- data/img/text.png
|