minigl 2.3.6 → 2.3.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db8b9de89a3372e81cfdef102808b9bbaec3fbd88a930c95cd5af2f946cb744d
4
- data.tar.gz: d4fd66ee8e177e80fcbbe14808e4a8518a526fc6cec47d41adfc032da881750c
3
+ metadata.gz: ff7475dd66f98076ad86cc143943c75f186e6b696aba46083b71727ad69e95b0
4
+ data.tar.gz: 87bec4f94e32553a70ea4ca4318357bbadb71ffc6600859a8c63ec772e708137
5
5
  SHA512:
6
- metadata.gz: c966227f4b6a7d020c5e07c601fc18d8ea6603f07f6d661bc92127ae1335b02118e71ed997c2f25fd1c9089ae0e4730d61d0395a82ef0c2e495025b25fd019c3
7
- data.tar.gz: e603e887d2c595c61e16bdeee8fd1b928414cf895caa7f98dd69b2aed0cf7bf2eb2dd0d115a460b07797d19ce3dccfeafc825151935012c62bc94671fdd90f2d
6
+ metadata.gz: '09094e3898b3a19939f39acf33ba4514db24bb1771b7795769a632e7f7230874058f921609d0760ea5958b42ca70e0a5b2224c974c5d3a80b4f1d2d1e59ad4cc'
7
+ data.tar.gz: ad1fc0475cee6c71ec019e5f8516b077da8ba4f37fbd95136137acb4716f83fe3fff42f68a5c458841c80732e8117776ac14c696c70b776d06c8b73860b379f5
data/README.md CHANGED
@@ -14,6 +14,14 @@ It provides the following features:
14
14
  More functionalities are coming. Feel free to contribute! You can send feedback
15
15
  to victordavidsantos@gmail.com.
16
16
 
17
+ ## Made with MiniGL
18
+
19
+ Below are two full games built with MiniGL, both available for free download and also open source.
20
+ * [Super Bombinhas](https://github.com/victords/super-bombinhas)
21
+ * [ConnecMan](https://github.com/victords/connecman)
22
+
23
+ If you create a project using MiniGL, feel free to open a PR to include it in this list.
24
+
17
25
  ## Installing
18
26
 
19
27
  MiniGL was built on top of the Gosu gem. This gem has its own dependencies for
@@ -29,9 +37,10 @@ After installing the Gosu dependencies, you can just `gem install minigl`.
29
37
  * The [wiki](https://github.com/victords/minigl/wiki) is a work in progress with tutorials and examples.
30
38
  * Test package and examples aren't complete!
31
39
 
32
- ## Version 2.3.6
40
+ ## Version 2.3.9
33
41
 
34
- * Added inverted ramps (for sloped ceilings, still has some issues).
42
+ * Fixed click detection for very short clicks.
43
+ * Allow combining `center` and `margin` for `Button` text.
35
44
 
36
45
  ## Contributing
37
46
 
data/lib/minigl/forms.rb CHANGED
@@ -98,6 +98,9 @@ module MiniGL
98
98
  # Gets or sets whether the panel (and thus all components inside it) are visible.
99
99
  attr_accessor :visible
100
100
 
101
+ # The components contained in this panel.
102
+ attr_reader :controls
103
+
101
104
  # Creates a new Panel.
102
105
  # Parameters:
103
106
  # [x] The horizontal coordinate of the top-left corner of the panel, or the horizontal offset from the anchor, if provided.
@@ -314,12 +317,12 @@ module MiniGL
314
317
  super x, y, font, text, text_color, disabled_text_color
315
318
  @over_text_color = over_text_color
316
319
  @down_text_color = down_text_color
317
- if center_x; @text_x = x + @w / 2 if @w
318
- else; @text_x = x + margin_x * @scale_x; end
319
- if center_y; @text_y = y + @h / 2 if @h
320
- else; @text_y = y + margin_y * @scale_y; end
321
320
  @center_x = center_x
322
321
  @center_y = center_y
322
+ @margin_x = margin_x
323
+ @margin_y = margin_y
324
+ set_position(x, y)
325
+
323
326
  @action = action
324
327
  @params = params
325
328
 
@@ -348,8 +351,10 @@ module MiniGL
348
351
  @img_index = 0
349
352
  @state = :up
350
353
  elsif mouse_press
351
- @img_index = 2
352
- @state = :down
354
+ Mouse.add_click(@z_index || 0, lambda do
355
+ @img_index = 2
356
+ @state = :down
357
+ end)
353
358
  else
354
359
  @img_index = 1
355
360
  end
@@ -360,7 +365,7 @@ module MiniGL
360
365
  elsif mouse_rel
361
366
  @img_index = 1
362
367
  @state = :over
363
- click
368
+ Mouse.add_click(@z_index || 0, method(:perform_action))
364
369
  else
365
370
  @img_index = 2
366
371
  end
@@ -379,7 +384,7 @@ module MiniGL
379
384
 
380
385
  # Executes the button click action.
381
386
  def click
382
- @action.call @params if @action
387
+ perform_action
383
388
  end
384
389
 
385
390
  # Sets the position of the button in the screen.
@@ -388,10 +393,10 @@ module MiniGL
388
393
  # [x] The new x-coordinate for the button.
389
394
  # [y] The new y-coordinate for the button.
390
395
  def set_position(x, y)
391
- if @center_x; @text_x = x + @w / 2
392
- else; @text_x += x - @x; end
393
- if @center_y; @text_y = y + @h / 2
394
- else; @text_y += y - @y; end
396
+ @text_x = @center_x ? x + @w / 2 : x
397
+ @text_y = @center_y ? y + @h / 2 : y
398
+ @text_x += @margin_x
399
+ @text_y += @margin_y
395
400
  @x = x; @y = y
396
401
  end
397
402
 
@@ -404,6 +409,7 @@ module MiniGL
404
409
  # will be drawn on top of the ones with smaller z-orders.
405
410
  # [color] Color to apply a filter to the image.
406
411
  def draw(alpha = 0xff, z_index = 0, color = 0xffffff)
412
+ @z_index = z_index
407
413
  return unless @visible
408
414
 
409
415
  color = (alpha << 24) | color
@@ -435,6 +441,12 @@ module MiniGL
435
441
  @state = :up
436
442
  @img_index = 3
437
443
  end
444
+
445
+ private
446
+
447
+ def perform_action
448
+ @action.call(@params) if @action
449
+ end
438
450
  end
439
451
 
440
452
  # This class represents a toggle button, which can be also interpreted as a
@@ -502,8 +514,6 @@ module MiniGL
502
514
  else; height * @scale_y; end
503
515
  _, x, y = FormUtils.check_anchor(anchor, @anchor_offset_x, @anchor_offset_y, @w, @h)
504
516
  set_position(x, y)
505
- @text_x = x + @w / 2 if center_x
506
- @text_y = y + @h / 2 if center_y
507
517
  @checked = checked
508
518
  end
509
519
 
@@ -517,20 +527,12 @@ module MiniGL
517
527
  @img_index += 1 if @checked
518
528
  end
519
529
 
520
- # Executes the button click action, and toggles its state. The +action+
521
- # block always receives as a first parameter +true+, if the button has
522
- # been changed to checked, or +false+, otherwise.
523
- def click
524
- @checked = !@checked
525
- @action.call @checked, @params if @action
526
- end
527
-
528
530
  # Sets the state of the button to the value given.
529
531
  #
530
532
  # Parameters:
531
533
  # [value] The state to be set (+true+ for checked, +false+ for unchecked).
532
534
  def checked=(value)
533
- click if value != @checked
535
+ @action.call(value, @params) if @action && value != @checked
534
536
  @checked = value
535
537
  end
536
538
 
@@ -539,6 +541,13 @@ module MiniGL
539
541
  @state = :up
540
542
  @img_index = @checked ? 7 : 6
541
543
  end
544
+
545
+ private
546
+
547
+ def perform_action
548
+ @checked = !@checked
549
+ @action.call(@checked, @params) if @action
550
+ end
542
551
  end
543
552
 
544
553
  # This class represents a text field (input).
@@ -547,6 +556,9 @@ module MiniGL
547
556
  # INCOMPLETE!
548
557
  attr_reader :locale
549
558
 
559
+ # Whether the text field is focused (accepting input)
560
+ attr_reader :focused
561
+
550
562
  # Creates a new text field.
551
563
  #
552
564
  # Parameters:
@@ -566,9 +578,9 @@ module MiniGL
566
578
  # [margin_x] The x offset, from the field x-coordinate, to draw the text.
567
579
  # [margin_y] The y offset, from the field y-coordinate, to draw the text.
568
580
  # [max_length] The maximum length of the text inside the field.
569
- # [active] Whether the text field must be focused by default. If +false+,
570
- # focus can be granted by clicking inside the text field or by
571
- # calling the +focus+ method.
581
+ # [focused] Whether the text field must be focused by default. If +false+,
582
+ # focus can be granted by clicking inside the text field or by
583
+ # calling the +focus+ method.
572
584
  # [text] The starting text. Must not be +nil+.
573
585
  # [allowed_chars] A string containing all characters that can be typed
574
586
  # inside the text field. The complete set of supported
@@ -606,7 +618,7 @@ module MiniGL
606
618
  # *Obs.:* This method accepts named parameters, but +x+, +y+, +font+ and
607
619
  # +img+ are mandatory.
608
620
  def initialize(x, y = nil, font = nil, img = nil, cursor_img = nil, disabled_img = nil, margin_x = 0, margin_y = 0,
609
- max_length = 100, active = false, text = '', allowed_chars = nil,
621
+ max_length = 100, focused = false, text = '', allowed_chars = nil,
610
622
  text_color = 0, disabled_text_color = 0, selection_color = 0, locale = 'en-us',
611
623
  params = nil, retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &on_text_changed)
612
624
  if x.is_a? Hash
@@ -618,7 +630,7 @@ module MiniGL
618
630
  margin_x = x.fetch(:margin_x, 0)
619
631
  margin_y = x.fetch(:margin_y, 0)
620
632
  max_length = x.fetch(:max_length, 100)
621
- active = x.fetch(:active, false)
633
+ focused = x.fetch(:focused, false)
622
634
  text = x.fetch(:text, '')
623
635
  allowed_chars = x.fetch(:allowed_chars, nil)
624
636
  text_color = x.fetch(:text_color, 0)
@@ -647,7 +659,7 @@ module MiniGL
647
659
  @cursor_img = Res.img(cursor_img, false, false, '.png', retro) if cursor_img
648
660
  @disabled_img = Res.img(disabled_img, false, false, '.png', retro) if disabled_img
649
661
  @max_length = max_length
650
- @active = active
662
+ @focused = focused
651
663
  @text_x = x + margin_x * @scale_x
652
664
  @text_y = y + margin_y * @scale_y
653
665
  @selection_color = selection_color
@@ -690,14 +702,14 @@ module MiniGL
690
702
 
691
703
  ################################ Mouse ################################
692
704
  if Mouse.over? @x, @y, @w, @h
693
- if not @active and Mouse.button_pressed? :left
694
- focus
705
+ if not @focused and Mouse.button_pressed? :left
706
+ Mouse.add_click(@z_index || 0, method(:focus))
695
707
  end
696
708
  elsif Mouse.button_pressed? :left
697
709
  unfocus
698
710
  end
699
711
 
700
- return unless @active
712
+ return unless @focused
701
713
 
702
714
  if Mouse.double_click? :left
703
715
  if @nodes.size > 1
@@ -708,11 +720,7 @@ module MiniGL
708
720
  end
709
721
  set_cursor_visible
710
722
  elsif Mouse.button_pressed? :left
711
- set_node_by_mouse
712
- @anchor1 = @cur_node
713
- @anchor2 = nil
714
- @double_clicked = false
715
- set_cursor_visible
723
+ Mouse.add_click(@z_index || 0, method(:focus))
716
724
  elsif Mouse.button_down? :left
717
725
  if @anchor1 and not @double_clicked
718
726
  set_node_by_mouse
@@ -902,7 +910,12 @@ module MiniGL
902
910
 
903
911
  # Grants focus to the text field, so that it allows keyboard input.
904
912
  def focus
905
- @active = true
913
+ @focused = true
914
+ set_node_by_mouse
915
+ @anchor1 = @cur_node
916
+ @anchor2 = nil
917
+ @double_clicked = false
918
+ set_cursor_visible
906
919
  end
907
920
 
908
921
  # Removes focus from the text field, so that no keyboard input will be
@@ -911,7 +924,7 @@ module MiniGL
911
924
  @anchor1 = @anchor2 = nil
912
925
  @cursor_visible = false
913
926
  @cursor_timer = 0
914
- @active = false
927
+ @focused = false
915
928
  end
916
929
 
917
930
  # Sets the position of the text field in the screen.
@@ -941,6 +954,7 @@ module MiniGL
941
954
  # [disabled_color] Color to apply a filter to the image when the field is
942
955
  # disabled.
943
956
  def draw(alpha = 0xff, z_index = 0, color = 0xffffff, disabled_color = 0x808080)
957
+ @z_index = z_index
944
958
  return unless @visible
945
959
 
946
960
  color = (alpha << 24) | ((@enabled or @disabled_img) ? color : disabled_color)
@@ -1250,6 +1264,9 @@ module MiniGL
1250
1264
  # The selected value in the drop-down list. This is one of the +options+.
1251
1265
  attr_reader :value
1252
1266
 
1267
+ # Whether the list of options is currently visible.
1268
+ attr_reader :open
1269
+
1253
1270
  # An array containing all the options (each of them +String+s) that can be
1254
1271
  # selected in the drop-down list.
1255
1272
  attr_accessor :options
@@ -304,6 +304,14 @@ module MiniGL
304
304
  # This is +true+ when the effect's lifetime has already passed.
305
305
  attr_reader :dead
306
306
 
307
+ # The lifetime of the effect, in updates, i.e., how many calls to +update+
308
+ # must happen before the effect is marked as +dead+, since its creation.
309
+ attr_reader :lifetime
310
+
311
+ # The number of times +update+ has been called for this effect, while it
312
+ # was still active (not +dead+).
313
+ attr_reader :elapsed_time
314
+
307
315
  # Creates a new Effect.
308
316
  #
309
317
  # Parameters:
@@ -352,7 +360,7 @@ module MiniGL
352
360
  end
353
361
 
354
362
  super x, y, img, sprite_cols, sprite_rows
355
- @timer = 0
363
+ @elapsed_time = 0
356
364
  if indices
357
365
  @indices = indices
358
366
  else
@@ -369,15 +377,21 @@ module MiniGL
369
377
 
370
378
  # Updates the effect, animating and counting its remaining lifetime.
371
379
  def update
372
- unless @dead
373
- animate @indices, @interval
374
- @timer += 1
375
- @dead = true if @timer == @lifetime
376
- end
380
+ return if @dead
381
+
382
+ animate(@indices, @interval)
383
+ @elapsed_time += 1
384
+ @dead = true if @elapsed_time == @lifetime
377
385
  end
378
386
 
379
387
  def draw(map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil, z_index = 0)
380
388
  super unless @dead
381
389
  end
390
+
391
+ # The remaining number of calls to +update+ until the effect is marked
392
+ # +dead+.
393
+ def time_left
394
+ @lifetime - @elapsed_time
395
+ end
382
396
  end
383
397
  end
data/lib/minigl/global.rb CHANGED
@@ -245,6 +245,16 @@ module MiniGL
245
245
  def toggle_fullscreen
246
246
  self.fullscreen = !fullscreen?
247
247
  end
248
+
249
+ def button_down(id)
250
+ super
251
+ Mouse.register_button_down(id)
252
+ end
253
+
254
+ def button_up(id)
255
+ super
256
+ Mouse.register_button_up(id)
257
+ end
248
258
  end
249
259
 
250
260
  # Exposes methods for controlling keyboard and gamepad events.
@@ -387,6 +397,7 @@ module MiniGL
387
397
  def initialize
388
398
  @down = {}
389
399
  @prev_down = {}
400
+ @next_down = {}
390
401
  @dbl_click = {}
391
402
  @dbl_click_timer = {}
392
403
  end
@@ -394,23 +405,29 @@ module MiniGL
394
405
  # Updates the mouse position and the state of all buttons.
395
406
  def update
396
407
  @prev_down = @down.clone
397
- @down.clear
408
+ @down = @next_down.clone
409
+ @next_down.delete_if { |_, v| v.zero? }
398
410
  @dbl_click.clear
399
411
 
412
+ if @click
413
+ @click[:action].call
414
+ @click = nil
415
+ end
416
+
400
417
  @dbl_click_timer.each do |k, v|
401
- if v < G.double_click_delay; @dbl_click_timer[k] += 1
402
- else; @dbl_click_timer.delete k; end
418
+ if v < G.double_click_delay
419
+ @dbl_click_timer[k] += 1
420
+ else
421
+ @dbl_click_timer.delete(k)
422
+ end
403
423
  end
404
424
 
405
- k1 = [Gosu::MsLeft, Gosu::MsMiddle, Gosu::MsRight]
406
- k2 = [:left, :middle, :right]
407
- (0..2).each do |i|
408
- if G.window.button_down? k1[i]
409
- @down[k2[i]] = true
410
- @dbl_click[k2[i]] = true if @dbl_click_timer[k2[i]]
411
- @dbl_click_timer.delete k2[i]
412
- elsif @prev_down[k2[i]]
413
- @dbl_click_timer[k2[i]] = 0
425
+ %i[left middle right].each do |key|
426
+ if @down[key]
427
+ @dbl_click[key] = true if @dbl_click_timer[key]
428
+ @dbl_click_timer.delete(key)
429
+ elsif @prev_down[key]
430
+ @dbl_click_timer[key] = 0
414
431
  end
415
432
  end
416
433
 
@@ -474,6 +491,38 @@ module MiniGL
474
491
  return @x >= x.x && @x < x.x + x.w && @y >= x.y && @y < x.y + x.h if x.is_a? Rectangle
475
492
  @x >= x && @x < x + w && @y >= y && @y < y + h
476
493
  end
494
+
495
+ # :nodoc:
496
+ def add_click(z_index, action)
497
+ return if @click && @click[:z_index] > z_index
498
+
499
+ @click = { z_index: z_index, action: action }
500
+ end
501
+
502
+ # :nodoc:
503
+ def register_button_down(id)
504
+ key = key_from_id(id)
505
+ @next_down[key] = 1 if key
506
+ end
507
+
508
+ # :nodoc:
509
+ def register_button_up(id)
510
+ key = key_from_id(id)
511
+ @next_down[key] = 0 if key && @next_down[key]
512
+ end
513
+
514
+ private
515
+
516
+ def key_from_id(id)
517
+ case id
518
+ when Gosu::MS_LEFT
519
+ :left
520
+ when Gosu::MS_RIGHT
521
+ :right
522
+ when Gosu::MS_MIDDLE
523
+ :middle
524
+ end
525
+ end
477
526
  end
478
527
  end
479
528
 
data/lib/minigl/text.rb CHANGED
@@ -11,9 +11,18 @@ module MiniGL
11
11
  # if a character fits in the current line it must not be placed in the next
12
12
  # one. In the last line there can be any amount of free space at the end.
13
13
  class ImageFont
14
+ # A string containing the characters supported by this font.
15
+ attr_reader :chars
16
+
14
17
  # The height of this font in pixels.
15
18
  attr_reader :height
16
19
 
20
+ # The width of the white space character in this font, in pixels.
21
+ attr_reader :space_width
22
+
23
+ # The spacing between characters, in pixels (can be a decimal number).
24
+ attr_reader :char_spacing
25
+
17
26
  # Creates an +ImageFont+.
18
27
  #
19
28
  # Parameters:
@@ -26,16 +35,19 @@ module MiniGL
26
35
  # as they appear in the +chars+ string.
27
36
  # [height] The height of the lines in the image (see description above).
28
37
  # [space_width] The width of the white space character in this font.
38
+ # [char_spacing] The spacing between non-white-space characters when writing text with
39
+ # this font. It can be a decimal number, useful when scaling the text up.
29
40
  # [global] Parameter that will be passed to +Res.img+ when loading the image.
30
41
  # [ext] Parameter that will be passed to +Res.img+ when loading the image.
31
42
  # [retro] Parameter that will be passed to +Res.img+ when loading the image.
32
- def initialize(img_path, chars, widths, height, space_width, global = true, ext = '.png', retro = nil)
43
+ def initialize(img_path, chars, widths, height, space_width, char_spacing = 0, global = true, ext = '.png', retro = nil)
33
44
  retro = Res.retro_images if retro.nil?
34
45
  img = Res.img(img_path, global, false, ext, retro)
35
46
  @chars = chars
36
47
  @images = []
37
48
  @height = height
38
49
  @space_width = space_width
50
+ @char_spacing = char_spacing
39
51
  wa = widths.is_a?(Array)
40
52
  if wa && widths.length != chars.length
41
53
  raise 'Wrong widths array size!'
@@ -60,7 +72,17 @@ module MiniGL
60
72
  # Parameters:
61
73
  # [text] The string to be measured
62
74
  def markup_width(text)
63
- text.chars.reduce(0) { |w, c| if c == ' '; w += @space_width; else; i = @chars.index(c); w += i ? @images[i].width : 0; end }
75
+ w = 0
76
+ text.chars.each_with_index do |c, i|
77
+ if c == ' '
78
+ w += @space_width
79
+ else
80
+ idx = @chars.index(c)
81
+ w += idx ? @images[idx].width : 0
82
+ w += @char_spacing if i < text.chars.size - 1
83
+ end
84
+ end
85
+ w
64
86
  end
65
87
 
66
88
  # See <code>Gosu::Font#draw_markup_rel</code> for details.
@@ -82,7 +104,7 @@ module MiniGL
82
104
  i = @chars.index(c)
83
105
  next if i.nil?
84
106
  @images[i].draw(x, y, z, scale_x, scale_y, color)
85
- x += scale_x * @images[i].width
107
+ x += (scale_x * (@images[i].width + @char_spacing)).round
86
108
  end
87
109
  end
88
110
 
data/test/game.rb CHANGED
@@ -19,7 +19,7 @@ class MyGame < GameWindow
19
19
  @font2 = Res.font :font1, 50
20
20
  @writer1 = TextHelper.new @font1, 5
21
21
  @writer2 = TextHelper.new @font2, 5
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}" }
22
+ @btn = Button.new(10, 560, @font1, 'Test', :btn, 0x008000, 0x808080, 0xffffff, 0xff9980, true, false, -10, 4, 0, 0, 'friends', nil, 2, 2) { |x| puts "hello #{x}" }
23
23
  @btn.enabled = false
24
24
  @chk =
25
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|
@@ -32,11 +32,12 @@ class MyGame < GameWindow
32
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
+ @btn2 = Button.new(x: 0, y: 80, font: @font1, text: 'Below', img: :btn, anchor: :north) { puts 'Below the dropdown' }
35
36
 
36
37
  @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: 5, font: @font1, text: 'Opa', img: :text, margin_x: 5, margin_y: 5, anchor: :top_left),
39
+ Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn) { puts 'top left' },
38
40
  @lbl = Label.new(0, 70, @font1, 'Teste de label', 0, 0x666666, 1, 1, :north),
39
- TextField.new(x: 5, y: 40, font: @font1, text: 'Opa', img: :text, margin_x: 5, margin_y: 5, anchor: :top_left),
40
41
  Button.new(x: 0, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :top),
41
42
  DropDownList.new(x: 0, y: 40, width: 150, height: 25, font: @font1, options: ['olá amigos', 'opção 2', 'terceira'], anchor: :north),
42
43
  Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :northeast),
@@ -44,7 +45,7 @@ class MyGame < GameWindow
44
45
  Button.new(x: 0, y: 0, font: @font1, text: 'Teste', img: :btn, anchor: :center),
45
46
  Button.new(x: 5, y: 0, font: @font1, text: 'Teste', img: :btn, anchor: :right),
46
47
  ToggleButton.new(x: 5, y: 40, img: :check, center_x: false, margin_x: 36, anchor: :east),
47
- Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :southwest),
48
+ Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :southwest) { @lbl.visible = !@lbl.visible },
48
49
  Button.new(x: 0, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :south),
49
50
  ProgressBar.new(0, 40, 200, 20, :barbg, :barfg, 3456, 70, 2, 2, @font1, 0xff000080, nil, nil, 1, 1, :bottom)
50
51
  ], :text, :tiled, true, 2, 2, :bottom_right)
@@ -80,7 +81,11 @@ class MyGame < GameWindow
80
81
  @panel.enabled = !@panel.enabled if KB.key_pressed? Gosu::KbN
81
82
  @panel.visible = !@panel.visible if KB.key_pressed? Gosu::KbM
82
83
 
83
- @panel.add_component(Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :southeast)) if KB.key_pressed?(Gosu::KbB)
84
+ if KB.key_pressed?(Gosu::KbB)
85
+ @panel.add_component(Button.new(x: 5, y: 5, font: @font1, text: 'Teste', img: :btn, anchor: :southeast) {
86
+ puts 'new button added'
87
+ })
88
+ end
84
89
  @lbl.text = 'Test of changed text' if KB.key_pressed?(Gosu::KB_C)
85
90
  @lbl2.text = 'Shorter text' if KB.key_pressed?(Gosu::KB_X)
86
91
 
@@ -112,6 +117,7 @@ class MyGame < GameWindow
112
117
  @chk.update
113
118
  @txt.update
114
119
  @ddl.update
120
+ @btn2.update
115
121
 
116
122
  @panel.update
117
123
 
@@ -145,6 +151,7 @@ class MyGame < GameWindow
145
151
  780, 450, 300, :right, 0xff0000, 255, 1
146
152
 
147
153
  @ddl.draw 0x80, 1, 0xff8080
154
+ @btn2.draw
148
155
  @btn.draw 0xcc, 1, 0x33ff33
149
156
  @chk.draw
150
157
  @txt.draw
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.3.6
4
+ version: 2.3.9
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: 2021-10-02 00:00:00.000000000 Z
11
+ date: 2022-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gosu