gosu-examples 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 888d1aceda91b77fb517e8b8bcf29c0465b0db10
4
- data.tar.gz: b078a35fb710a436a9c1a0f1df81a01e3483a28e
2
+ SHA256:
3
+ metadata.gz: cb2816210de706b627f2c8120ee44874cd16035676c20f6b18d14ac52b3c3b09
4
+ data.tar.gz: 58c289986480228d033a32ba8c3e934d6166ff6b458fa2897fdafa09f90ddc9b
5
5
  SHA512:
6
- metadata.gz: 90eddc66bbd574cf91b55c8c61c7796ad4146612d14c5f72c092643ae03bcacfe0dbda96e6296c9c75051ba99c1880d088d8dd049f7d06bfde4ea5da71c7f658
7
- data.tar.gz: 9ca2489faf897835cd19a248c23f500d250ecf95a385873b8ee728ccdef028a47fba38b172870837a0bb94cab5ea924d0bc0e51a9fb77ca6134d907bdc7d24f7
6
+ metadata.gz: 59bb842a0be571014dbdf4e4257840f383360de3c79a7fecccc981ca384e6b27938da9e3544a843268ae6d8c5125e099154f4f6afc690796fe534fb10a644969
7
+ data.tar.gz: 32c948f2eeed4ac34d5168f7dea387c3c8d8fcbbea758088ca68fcfa95e0aa37f5ff46c925eaa410c450651966907c8d744118507c01191afb80b7550b612b02
@@ -1,25 +1,27 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'rubygems'
4
- require 'gosu'
3
+ require "gosu"
5
4
 
6
5
  Dir.chdir "#{File.dirname __FILE__}/../examples"
7
6
 
8
7
  $LOAD_PATH << "#{File.dirname __FILE__}/../lib/gosu-examples"
9
8
 
10
- require 'example'
11
- require 'sidebar'
9
+ require "example"
10
+ require "sidebar"
12
11
 
13
12
  Example.load_examples "*.rb"
14
13
 
15
14
  class ExampleBox < Gosu::Window
16
15
  def initialize
17
- super Sidebar::WIDTH, Sidebar::HEIGHT, :fullscreen => ARGV.include?('--fullscreen')
18
-
19
- @sidebar = Sidebar.new { |example| change_example(example) }
16
+ welcome_class = Example.initial_example
17
+ welcome = welcome_class.new
18
+
19
+ super welcome.width + Sidebar::WIDTH, welcome.height, fullscreen: ARGV.include?("--fullscreen")
20
20
 
21
- welcome_class = Example.examples.find { |example| example.name =~ /::Welcome$/ }
22
- change_example(welcome_class)
21
+ @sidebar = Sidebar.new do |example_class|
22
+ self.current_example = example_class.new unless @current_example.is_a? example_class
23
+ end
24
+ self.current_example = welcome
23
25
  end
24
26
 
25
27
  def update
@@ -43,11 +45,11 @@ class ExampleBox < Gosu::Window
43
45
  case id
44
46
  when Gosu::KB_ESCAPE
45
47
  close
46
- when Gosu.char_to_button_id('E')
48
+ when Gosu.char_to_button_id("E")
47
49
  if filename = @current_example.class.source_file
48
50
  open_file_or_folder filename
49
51
  end
50
- when Gosu.char_to_button_id('O')
52
+ when Gosu.char_to_button_id("O")
51
53
  if filename = @current_example.class.source_file
52
54
  open_file_or_folder File.dirname(filename)
53
55
  end
@@ -73,14 +75,12 @@ class ExampleBox < Gosu::Window
73
75
 
74
76
  private
75
77
 
76
- def change_example(example)
77
- if @current_example.class != example
78
- @current_example = nil
79
- GC.start
80
- @current_example = example.new
81
- self.width = @current_example.width + Sidebar::WIDTH
82
- self.height = @current_example.height
83
- end
78
+ def current_example=(example)
79
+ self.text_input = nil
80
+ @current_example = example
81
+ @current_example.parent_window = self
82
+ self.width = @current_example.width + Sidebar::WIDTH
83
+ self.height = @current_example.height
84
84
  end
85
85
 
86
86
  def open_file_or_folder(filename)
@@ -6,10 +6,9 @@
6
6
  # License: Same as for Gosu (MIT)
7
7
  # Created on 21/10/2007, 00:05:19 by Robert Sheehan
8
8
 
9
- require 'rubygems'
10
- require 'gosu'
11
- require 'chipmunk'
12
- require 'rmagick'
9
+ require "gosu"
10
+ require "chipmunk"
11
+ require "rmagick"
13
12
 
14
13
  # Layering of sprites
15
14
  module ZOrder
@@ -42,7 +41,7 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
42
41
  fill = Magick::TextureFill.new(Magick::ImageList.new("granite:"))
43
42
  background = Magick::Image.new(WIDTH, HEIGHT, fill)
44
43
  setup_triangles(background)
45
- @background_image = Gosu::Image.new(background, :tileable => true) # turn the image into a Gosu one
44
+ @background_image = Gosu::Image.new(background, tileable: true) # turn the image into a Gosu one
46
45
  @boxes = create_boxes(NUM_POLYGONS)
47
46
  end
48
47
 
@@ -51,8 +50,8 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
51
50
  def setup_triangles(background)
52
51
  gc = Magick::Draw.new
53
52
  gc.stroke_width(2)
54
- gc.stroke('red')
55
- gc.fill('blue')
53
+ gc.stroke("red")
54
+ gc.fill("blue")
56
55
  # all the triangles are part of the same body
57
56
  body = CP::Body.new(Float::MAX, Float::MAX)
58
57
  base = 15
@@ -87,10 +86,10 @@ class ChipmunkAndRMagick < (Example rescue Gosu::Window)
87
86
 
88
87
  # Produces the image of a polygon.
89
88
  def polygon_image(vertices)
90
- box_image = Magick::Image.new(EDGE_SIZE * 2, EDGE_SIZE * 2) { self.background_color = 'transparent' }
89
+ box_image = Magick::Image.new(EDGE_SIZE * 2, EDGE_SIZE * 2) { self.background_color = "transparent" }
91
90
  gc = Magick::Draw.new
92
- gc.stroke('red')
93
- gc.fill('plum')
91
+ gc.stroke("red")
92
+ gc.fill("plum")
94
93
  draw_vertices = vertices.map { |v| [v.x + EDGE_SIZE, v.y + EDGE_SIZE] }.flatten
95
94
  gc.polygon(*draw_vertices)
96
95
  gc.draw(box_image)
@@ -8,9 +8,8 @@
8
8
  ## Comments: Based on the Gosu Ruby Tutorial, but incorporating the Chipmunk Physics Engine
9
9
  ## See https://github.com/jlnr/gosu/wiki/Ruby-Chipmunk-Integration for the accompanying text.
10
10
 
11
- require 'rubygems'
12
- require 'gosu'
13
- require 'chipmunk'
11
+ require "gosu"
12
+ require "chipmunk"
14
13
 
15
14
  WIDTH = 640
16
15
  HEIGHT = 480
@@ -125,7 +124,7 @@ class ChipmunkIntegration < (Example rescue Gosu::Window)
125
124
 
126
125
  self.caption = "Gosu & Chipmunk Integration Demo"
127
126
 
128
- @background_image = Gosu::Image.new("media/space.png", :tileable => true)
127
+ @background_image = Gosu::Image.new("media/space.png", tileable: true)
129
128
 
130
129
  # Put the beep here, as it is the environment now that determines collision
131
130
  @beep = Gosu::Sample.new("media/beep.wav")
@@ -1,6 +1,6 @@
1
1
  # Encoding: UTF-8
2
2
 
3
- # Basically, the tutorial game taken to a jump'n'run perspective.
3
+ # A simple jump-and-run/platformer game with a tile-based map.
4
4
 
5
5
  # Shows how to
6
6
  # * implement jumping/gravity
@@ -27,8 +27,7 @@
27
27
  # ...Enemies, a more sophisticated object system, weapons, title and credits
28
28
  # screens...
29
29
 
30
- require 'rubygems'
31
- require 'gosu'
30
+ require "gosu"
32
31
 
33
32
  WIDTH, HEIGHT = 640, 480
34
33
 
@@ -140,7 +139,7 @@ class Map
140
139
 
141
140
  def initialize(filename)
142
141
  # Load 60x60 tiles, 5px overlap in all four directions.
143
- @tileset = Gosu::Image.load_tiles("media/tileset.png", 60, 60, :tileable => true)
142
+ @tileset = Gosu::Image.load_tiles("media/tileset.png", 60, 60, tileable: true)
144
143
 
145
144
  gem_img = Gosu::Image.new("media/gem.png")
146
145
  @gems = []
@@ -193,7 +192,7 @@ class CptnRuby < (Example rescue Gosu::Window)
193
192
 
194
193
  self.caption = "Cptn. Ruby"
195
194
 
196
- @sky = Gosu::Image.new("media/space.png", :tileable => true)
195
+ @sky = Gosu::Image.new("media/space.png", tileable: true)
197
196
  @map = Map.new("media/cptn_ruby_map.txt")
198
197
  @cptn = Player.new(@map, 400, 100)
199
198
  # The scrolling position is stored as top left corner of the screen.
@@ -5,9 +5,8 @@
5
5
  # the block given to Window#gl, and that Gosu Images can be
6
6
  # used as textures using the gl_tex_info call.
7
7
 
8
- require 'rubygems'
9
- require 'gosu'
10
- require 'gl'
8
+ require "gosu"
9
+ require "gl"
11
10
 
12
11
  WIDTH, HEIGHT = 640, 480
13
12
 
@@ -25,7 +24,7 @@ class GLBackground
25
24
  SCROLLS_PER_STEP = 50
26
25
 
27
26
  def initialize
28
- @image = Gosu::Image.new("media/earth.png", :tileable => true)
27
+ @image = Gosu::Image.new("media/earth.png", tileable: true)
29
28
  @scrolls = 0
30
29
  @height_map = Array.new(POINTS_Y) { Array.new(POINTS_X) { rand } }
31
30
  end
@@ -1,6 +1,6 @@
1
1
  # Encoding: UTF-8
2
2
 
3
- # A (too) simple Gorilla-style shooter for two players.
3
+ # A simple Gorilla-style shooter for two players.
4
4
  # Shows how Gosu and RMagick can be used together to generate a map, implement
5
5
  # a dynamic landscape and generally look great.
6
6
  # Also shows a very minimal, yet effective way of designing a game's object system.
@@ -13,13 +13,12 @@
13
13
  # * The look of dead soldiers is, err, by accident. Soldier.png needs to be
14
14
  # designed in a less obfuscated way :)
15
15
 
16
- require 'rubygems'
17
- require 'gosu'
18
- require 'rmagick'
16
+ require "gosu"
17
+ require "rmagick"
19
18
 
20
19
  WIDTH, HEIGHT = 640, 480
21
20
 
22
- NULL_PIXEL = Magick::Pixel.from_color('none')
21
+ NULL_PIXEL = Magick::Pixel.from_color("none")
23
22
 
24
23
  # The class for this game's map.
25
24
  # Design:
@@ -35,13 +34,13 @@ class Map
35
34
  # Loading SVG files isn't possible with Gosu, so say wow!
36
35
  # (Seems to take a while though)
37
36
  sky = Magick::Image.read("media/landscape.svg").first
38
- @sky = Gosu::Image.new(sky, :tileable => true)
37
+ @sky = Gosu::Image.new(sky, tileable: true)
39
38
 
40
39
  # Create the map an stores the RMagick image in @image
41
40
  create_rmagick_map
42
41
 
43
42
  # Copy the RMagick Image to a Gosu Image (still unchanged)
44
- @gosu_image = Gosu::Image.new(@image, :tileable => true)
43
+ @gosu_image = Gosu::Image.new(@image, tileable: true)
45
44
  end
46
45
 
47
46
  def solid? x, y
@@ -68,9 +67,9 @@ class Map
68
67
  # Create the crater image (basically a circle shape that is used to erase
69
68
  # parts of the map) and the crater shadow image.
70
69
  CRATER_IMAGE = begin
71
- crater = Magick::Image.new(2 * RADIUS, 2 * RADIUS) { self.background_color = 'none' }
70
+ crater = Magick::Image.new(2 * RADIUS, 2 * RADIUS) { self.background_color = "none" }
72
71
  gc = Magick::Draw.new
73
- gc.fill('black').circle(RADIUS, RADIUS, RADIUS, 0)
72
+ gc.fill("black").circle(RADIUS, RADIUS, RADIUS, 0)
74
73
  gc.draw crater
75
74
  crater
76
75
  end
@@ -93,14 +92,14 @@ class Map
93
92
 
94
93
  def create_rmagick_map
95
94
  # This is the one large RMagick image that represents the map.
96
- @image = Magick::Image.new(WIDTH, HEIGHT) { self.background_color = 'none' }
95
+ @image = Magick::Image.new(WIDTH, HEIGHT) { self.background_color = "none" }
97
96
 
98
97
  # Set up a Draw object that fills with an earth texture.
99
- earth = Magick::Image.read('media/earth.png').first.resize(1.5)
98
+ earth = Magick::Image.read("media/earth.png").first.resize(1.5)
100
99
  gc = Magick::Draw.new
101
- gc.pattern('earth', 0, 0, earth.columns, earth.rows) { gc.composite(0, 0, 0, 0, earth) }
102
- gc.fill('earth')
103
- gc.stroke('#603000').stroke_width(1.5)
100
+ gc.pattern("earth", 0, 0, earth.columns, earth.rows) { gc.composite(0, 0, 0, 0, earth) }
101
+ gc.fill("earth")
102
+ gc.stroke("#603000").stroke_width(1.5)
104
103
  # Draw a smooth bezier island onto the map!
105
104
  polypoints = [0, HEIGHT]
106
105
  0.upto(8) do |x|
@@ -112,13 +111,13 @@ class Map
112
111
 
113
112
  # Create a bright-dark gradient fill, an image from it and change the map's
114
113
  # brightness with it.
115
- fill = Magick::GradientFill.new(0, HEIGHT * 0.4, WIDTH, HEIGHT * 0.4, '#fff', '#666')
114
+ fill = Magick::GradientFill.new(0, HEIGHT * 0.4, WIDTH, HEIGHT * 0.4, "#fff", "#666")
116
115
  gradient = Magick::Image.new(WIDTH, HEIGHT, fill)
117
116
  gradient = @image.composite(gradient, 0, 0, Magick::InCompositeOp)
118
117
  @image.composite!(gradient, 0, 0, Magick::MultiplyCompositeOp)
119
118
 
120
119
  # Finally, place the star in the middle of the map, just onto the ground.
121
- star = Magick::Image.read('media/large_star.png').first
120
+ star = Magick::Image.read("media/large_star.png").first
122
121
  star_y = 0
123
122
  star_y += 20 until solid?(WIDTH / 2, star_y)
124
123
  @image.composite!(star, (WIDTH - star.columns) / 2, star_y - star.rows * 0.85,
@@ -299,7 +298,7 @@ end
299
298
  class Particle
300
299
  def initialize(window, x, y)
301
300
  # All Particle instances use the same image
302
- @@image ||= Gosu::Image.new('media/smoke.png')
301
+ @@image ||= Gosu::Image.new("media/smoke.png")
303
302
 
304
303
  @x, @y = x, y
305
304
  @color = Gosu::Color.new(255, 255, 255, 255)
@@ -342,10 +341,10 @@ class RMagickIntegration < (Example rescue Gosu::Window)
342
341
  @player_instructions << Gosu::Image.from_text(
343
342
  "It is the #{ plr == 0 ? 'green' : 'red' } toy soldier's turn.\n" +
344
343
  "(Arrow keys to walk and aim, Return to jump, Space to shoot)",
345
- 30, :width => width, :align => :center)
344
+ 30, width: width, align: :center)
346
345
  @player_won_messages << Gosu::Image.from_text(
347
346
  "The #{ plr == 0 ? 'green' : 'red' } toy soldier has won!",
348
- 30, :width => width, :align => :center)
347
+ 30, width: width, align: :center)
349
348
  end
350
349
 
351
350
  # Create everything!
@@ -0,0 +1,158 @@
1
+ # This example demonstrates use of the TextInput class with three text field widgets.
2
+ # One can cycle through them with tab, or click into the text fields and change their contents.
3
+
4
+ # The way TextInput works is that you create an instance of it, and then assign it to the text_input
5
+ # attribute of your window.
6
+ # Until you set this attribute to nil again, the TextInput object will then build a string from user
7
+ # input that can be accessed via TextInput#text.
8
+
9
+ # The TextInput object also maintains the position of the caret, which is defined as the index of
10
+ # its right neighbour character, i.e. a carent_pos of 0 is always the left-most position, and a
11
+ # caret_pos of text.length is always the right-most position.
12
+ # There is a second attribute called selection_start that is equal to caret_pos when there is no
13
+ # selection, and otherwise defines the selected range. If you set caret_pos to a different value,
14
+ # you usually want to set selection_start as well.
15
+
16
+ # A TextInput object is purely abstract. Drawing the input field is left to the user.
17
+ # In this example, we are subclassing TextInput to add this code, but you can also work with
18
+ # composition instead of inheritance.
19
+
20
+ require "gosu"
21
+
22
+ class TextField < Gosu::TextInput
23
+ FONT = Gosu::Font.new(20)
24
+ WIDTH = 350
25
+ LENGTH_LIMIT = 20
26
+ PADDING = 5
27
+
28
+ INACTIVE_COLOR = 0xcc_666666
29
+ ACTIVE_COLOR = 0xcc_ff6666
30
+ SELECTION_COLOR = 0xcc_0000ff
31
+ CARET_COLOR = 0xff_ffffff
32
+
33
+ attr_reader :x, :y
34
+
35
+ def initialize(window, x, y)
36
+ # It's important to call the inherited constructor.
37
+ super()
38
+
39
+ @window, @x, @y = window, x, y
40
+
41
+ # Start with a self-explanatory text in each field.
42
+ self.text = "Click to edit"
43
+ end
44
+
45
+ # In this example, we use the filter method to prevent the user from entering a text that exceeds
46
+ # the length limit. However, you can also use this to blacklist certain characters, etc.
47
+ def filter new_text
48
+ allowed_length = [LENGTH_LIMIT - text.length, 0].max
49
+ new_text[0, allowed_length]
50
+ end
51
+
52
+ def draw(z)
53
+ # Change the background colour if this is the currently selected text field.
54
+ if @window.text_input == self
55
+ color = ACTIVE_COLOR
56
+ else
57
+ color = INACTIVE_COLOR
58
+ end
59
+ Gosu.draw_rect x - PADDING, y - PADDING, WIDTH + 2 * PADDING, height + 2 * PADDING, color, z
60
+
61
+ # Calculate the position of the caret and the selection start.
62
+ pos_x = x + FONT.text_width(self.text[0...self.caret_pos])
63
+ sel_x = x + FONT.text_width(self.text[0...self.selection_start])
64
+ sel_w = pos_x - sel_x
65
+
66
+ # Draw the selection background, if any. (If not, sel_x and pos_x will be
67
+ # the same value, making this a no-op call.)
68
+ Gosu.draw_rect sel_x, y, sel_w, height, SELECTION_COLOR, z
69
+
70
+ # Draw the caret if this is the currently selected field.
71
+ if @window.text_input == self
72
+ Gosu.draw_line pos_x, y, CARET_COLOR, pos_x, y + height, CARET_COLOR, z
73
+ end
74
+
75
+ # Finally, draw the text itself!
76
+ FONT.draw self.text, x, y, z
77
+ end
78
+
79
+ def height
80
+ FONT.height
81
+ end
82
+
83
+ # Hit-test for selecting a text field with the mouse.
84
+ def under_mouse?
85
+ @window.mouse_x > x - PADDING and @window.mouse_x < x + WIDTH + PADDING and
86
+ @window.mouse_y > y - PADDING and @window.mouse_y < y + height + PADDING
87
+ end
88
+
89
+ # Tries to move the caret to the position specifies by mouse_x
90
+ def move_caret_to_mouse
91
+ # Test character by character
92
+ 1.upto(self.text.length) do |i|
93
+ if @window.mouse_x < x + FONT.text_width(text[0...i])
94
+ self.caret_pos = self.selection_start = i - 1;
95
+ return
96
+ end
97
+ end
98
+ # Default case: user must have clicked the right edge
99
+ self.caret_pos = self.selection_start = self.text.length
100
+ end
101
+ end
102
+
103
+ class TextInputDemo < (Example rescue Gosu::Window)
104
+ def initialize
105
+ super 640, 480
106
+ self.caption = "Text Input Demo"
107
+
108
+
109
+ text =
110
+ "This demo explains (in the source code) how to use the Gosu::TextInput API by building a little TextField class around it.
111
+
112
+ Each text field can take up to 30 characters, and you can use Tab to switch between them.
113
+
114
+ As in every example, press <b>S</b> to look at the source code."
115
+
116
+ # Remove all leading spaces so the text is left-aligned
117
+ text.gsub! /^ +/, ""
118
+
119
+ @text = Gosu::Image.from_text text, 20, width: 540
120
+
121
+ # Set up an array of three text fields.
122
+ @text_fields = Array.new(3) { |index| TextField.new(self, 50, 300 + index * 50) }
123
+ end
124
+
125
+ def needs_cursor?
126
+ true
127
+ end
128
+
129
+ def draw
130
+ @text.draw 50, 50, 0
131
+ @text_fields.each { |tf| tf.draw(0) }
132
+ end
133
+
134
+ def button_down(id)
135
+ if id == Gosu::KB_TAB
136
+ # Tab key will not be 'eaten' by text fields; use for switching through
137
+ # text fields.
138
+ index = @text_fields.index(self.text_input) || -1
139
+ self.text_input = @text_fields[(index + 1) % @text_fields.size]
140
+ elsif id == Gosu::KB_ESCAPE
141
+ # Escape key will not be 'eaten' by text fields; use for deselecting.
142
+ if self.text_input
143
+ self.text_input = nil
144
+ else
145
+ close
146
+ end
147
+ elsif id == Gosu::MS_LEFT
148
+ # Mouse click: Select text field based on mouse position.
149
+ self.text_input = @text_fields.find { |tf| tf.under_mouse? }
150
+ # Also move caret to clicked position
151
+ self.text_input.move_caret_to_mouse unless self.text_input.nil?
152
+ else
153
+ super
154
+ end
155
+ end
156
+ end
157
+
158
+ TextInputDemo.new.show if __FILE__ == $0
@@ -1,7 +1,6 @@
1
1
  # Encoding: UTF-8
2
2
 
3
- require 'rubygems'
4
- require 'gosu'
3
+ require "gosu"
5
4
 
6
5
  module ZOrder
7
6
  BACKGROUND, STARS, PLAYER, UI = *0..3
@@ -86,7 +85,7 @@ class Tutorial < (Example rescue Gosu::Window)
86
85
  super 640, 480
87
86
  self.caption = "Tutorial Game"
88
87
 
89
- @background_image = Gosu::Image.new("media/space.png", :tileable => true)
88
+ @background_image = Gosu::Image.new("media/space.png", tileable: true)
90
89
 
91
90
  @player = Player.new
92
91
  @player.warp(320, 240)
@@ -1,7 +1,6 @@
1
1
  # Encoding: UTF-8
2
2
 
3
- require 'rubygems'
4
- require 'gosu'
3
+ require "gosu"
5
4
 
6
5
  WIDTH, HEIGHT = 640, 480
7
6
 
@@ -27,12 +26,12 @@ class Welcome < (Example rescue Gosu::Window)
27
26
  • To quit this tool, press <b>Esc</b>.
28
27
  • To toggle fullscreen mode, press <b>Alt+Enter</b> (Windows, Linux) or <b>cmd+F</b> (macOS).
29
28
 
30
- Why not take a look at the code for this example right now? Simply press <b>S</b>."
29
+ Why not take a look at the code for this example right now? Simply press <b>E</b>."
31
30
 
32
31
  # Remove all leading spaces so the text is left-aligned
33
- text.gsub! /^ +/, ''
32
+ text.gsub! /^ +/, ""
34
33
 
35
- @text = Gosu::Image.from_text text, 20, :width => WIDTH - 2 * PADDING
34
+ @text = Gosu::Image.from_text text, 20, width: WIDTH - 2 * PADDING
36
35
 
37
36
  @background = Gosu::Image.new "media/space.png"
38
37
  end
@@ -1,6 +1,7 @@
1
1
  class Example
2
2
  attr_accessor :caption
3
3
  attr_reader :width, :height
4
+ attr_writer :parent_window
4
5
 
5
6
  def initialize(width, height, *options)
6
7
  @width, @height = width, height
@@ -22,6 +23,22 @@ class Example
22
23
  # no-op, examples cannot close the containing window.
23
24
  end
24
25
 
26
+ def mouse_x
27
+ @parent_window && @parent_window.mouse_x
28
+ end
29
+
30
+ def mouse_y
31
+ @parent_window && @parent_window.mouse_y
32
+ end
33
+
34
+ def text_input
35
+ @parent_window && @parent_window.text_input
36
+ end
37
+
38
+ def text_input=(text_input)
39
+ @parent_window && @parent_window.text_input = text_input
40
+ end
41
+
25
42
  def self.current_source_file
26
43
  @current_source_file
27
44
  end
@@ -43,6 +60,10 @@ class Example
43
60
  @@examples[self]
44
61
  end
45
62
 
63
+ def self.initial_example
64
+ @@examples.keys.find { |cls| cls.name.end_with? "::Welcome" }
65
+ end
66
+
46
67
  def self.load_examples(pattern)
47
68
  Dir.glob(pattern) do |file|
48
69
  begin
@@ -2,7 +2,7 @@ class Sidebar
2
2
  WIDTH = 300
3
3
  HEIGHT = 600
4
4
  FONT = Gosu::Font.new(20)
5
- HEADER = Gosu::Image.new("media/header@2x.psd", :tileable => true)
5
+ HEADER = Gosu::Image.new("media/header@2x.psd", tileable: true)
6
6
 
7
7
  class Button
8
8
  HEIGHT = 25
@@ -19,7 +19,7 @@ class Sidebar
19
19
  text_color = Gosu::Color::BLACK
20
20
 
21
21
  if is_current
22
- Gosu.draw_rect 0, @top, Sidebar::WIDTH, HEIGHT, 0xff_1565e5 if is_current
22
+ Gosu.draw_rect 0, @top, Sidebar::WIDTH, HEIGHT, 0xff_1565e5
23
23
  text_color = Gosu::Color::WHITE
24
24
  end
25
25
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gosu-examples
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Raschke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-22 00:00:00.000000000 Z
11
+ date: 2018-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gosu
@@ -81,6 +81,7 @@ files:
81
81
  - examples/media/vera.ttf
82
82
  - examples/opengl_integration.rb
83
83
  - examples/rmagick_integration.rb
84
+ - examples/text_input.rb
84
85
  - examples/tutorial.rb
85
86
  - examples/welcome.rb
86
87
  - lib/gosu-examples/example.rb
@@ -104,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
105
  version: '0'
105
106
  requirements: []
106
107
  rubyforge_project:
107
- rubygems_version: 2.6.8
108
+ rubygems_version: 2.7.6
108
109
  signing_key:
109
110
  specification_version: 4
110
111
  summary: Ruby examples for the Gosu library