edu_draw 1.0.1 → 2.0.0

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
2
  SHA1:
3
- metadata.gz: fd768abe04a69ab7b6157dfff3bcad5bb051464b
4
- data.tar.gz: cfa2a99ee7eb1320b237ce207dd8d4c595cf3247
3
+ metadata.gz: dfc3b98dd75cc8bba96e5c4232b6fd63af037220
4
+ data.tar.gz: 7ad1c99a69f9146c9ec8b9c2fdc8d3d58c1591ea
5
5
  SHA512:
6
- metadata.gz: ffca39137a42964697fb9bf6fe8de51caae460af6022f8cb3f3d90775ffa1c58949225743e1a6162929bc2c590fd240a0aef1a5bcff34ba14da2c80489def5ef
7
- data.tar.gz: 1847a9ed2b554d930c2eab0da09aab7abcdeb7e4fb76106492558a6e24e6bbc0f87ee572fbe7e5f6da4bfafdbc053e9f79c1a1eabe0705f0ea1aa29542845506
6
+ metadata.gz: 94cdaeefbc9b682466f99041b32632e0fcb167f92140cd4d363d6cb67c6926e52b8a25f14d7191a7bf636207213aa7c4e23839bbf1a0f8bc1da7b0bea93d3851
7
+ data.tar.gz: 1516ae2a65123eebbe63a900f9500d744635c320cf71c79e08b34ce00d17c59f085cce7a65d6afd42ce9c25613e7818e790e1ac89254e79cadff63cc1d6ac10e
data/README.md CHANGED
@@ -41,10 +41,10 @@ When you are done drawing, you have to make one final call to the sheet, to actu
41
41
 
42
42
  The whole program looks like this:
43
43
 
44
- ```
44
+ ```ruby
45
45
  require "edu_draw"
46
46
 
47
- sheet = EduDraw::Sheet.new x: 500, y: 600, title: "It works"
47
+ sheet = EduDraw::Sheet.new x: 500, y: 600, title: "A beautiful rectangle"
48
48
  green_pen = sheet.new_pen(x: 100, y: 20)
49
49
 
50
50
  green_pen.move 100
@@ -58,6 +58,71 @@ green_pen.move 80
58
58
  sheet.show
59
59
  ```
60
60
 
61
+ ### Areas / Filled shapes
62
+ You can also draw filled or party-filled shapes. Here is an short example, that can be also found in the examples folder:
63
+ ```ruby
64
+ require "edu_draw"
65
+
66
+ sheet = EduDraw::Sheet.new(x: 150, y: 150)
67
+ pen = sheet.new_pen(x: 52, y: 10)
68
+
69
+ # Every move in the fill-block will create a filled a shape
70
+ pen.fill do
71
+ 5.times do
72
+ pen.move 40
73
+ pen.turn_right 36
74
+ end
75
+ end
76
+
77
+ #Every move out of the fill block just draws a line
78
+ # Those 10 moves result in a half-filled decagon
79
+ 5.times do
80
+ pen.move 40
81
+ pen.turn_right 36
82
+ end
83
+
84
+
85
+ sheet.show
86
+ ```
87
+
88
+ ### Animations
89
+ You can even draw animated shapes. Here is an short example, that can be also found in the examples folder:
90
+ ```ruby
91
+ require "edu_draw"
92
+
93
+ sheet = EduDraw::Sheet.new(x: 150, y: 150)
94
+
95
+ # Instead of using sheet.new_pen, now you create a new_animation_pen
96
+ pen = sheet.new_animation_pen(x: 75, y: 75)
97
+
98
+ # Here you define what happens in the beginning of each frame
99
+ pen.each_frame do
100
+ pen.turn_right 1
101
+ end
102
+
103
+ # Now you define what the pen should draw each frame
104
+ # It is important to leave the pen in a state, where
105
+ # it can start drawing on the next frame, that's why
106
+ # the pens moves back, even though it does not draw
107
+ # any actual lines.
108
+ pen.draw_frame do
109
+ pen.move 50
110
+ pen.move -50
111
+ end
112
+
113
+
114
+ # You're set. No just show the sheet as usual and enjoy
115
+ # the wonderfully spinning line you just drew.
116
+ sheet.show
117
+ ```
118
+
119
+ ## Changelog
120
+ * 2.0.0
121
+ * Adds ability to fill shapes. See `examples/areas.rb`
122
+ * Adds ability to draw animated shapes. See `examples/animations.rb`
123
+ * Makes state of pen writable
124
+ * Greatly improves documentation
125
+
61
126
  ## Contributing
62
127
  Feel free to contribute anything, may it be better tests, better documentation or more features. As you can see, I tried to keep the code tidy so it is appreciated if you'd do the same. Just add a pull request and we will make it work. Oh, and don't forget to have fun ;)
63
128
 
@@ -0,0 +1,26 @@
1
+ require "edu_draw"
2
+
3
+ sheet = EduDraw::Sheet.new(x: 150, y: 150)
4
+
5
+ # Instead of using sheet.new_pen, now you create a new_animation_pen
6
+ pen = sheet.new_animation_pen(x: 75, y: 75)
7
+
8
+ # Here you define what happens in the beginning of each frame
9
+ pen.each_frame do
10
+ pen.turn_right 1
11
+ end
12
+
13
+ # Now you define what the pen should draw each frame
14
+ # It is important to leave the pen in a state, where
15
+ # it can start drawing on the next frame, that's why
16
+ # the pens moves back, even though it does not draw
17
+ # any actual lines.
18
+ pen.draw_frame do
19
+ pen.move 50
20
+ pen.move -50
21
+ end
22
+
23
+
24
+ # You're set. No just show the sheet as usual and enjoy
25
+ # the wonderfully spinning line you just drew.
26
+ sheet.show
data/examples/areas.rb ADDED
@@ -0,0 +1,22 @@
1
+ require "edu_draw"
2
+
3
+ sheet = EduDraw::Sheet.new(x: 150, y: 150)
4
+ pen = sheet.new_pen(x: 52, y: 10)
5
+
6
+ # Every move in the fill-block will create a filled a shape
7
+ pen.fill do
8
+ 5.times do
9
+ pen.move 40
10
+ pen.turn_right 36
11
+ end
12
+ end
13
+
14
+ #Every move out of the fill block just draws a line
15
+ # Those 10 moves result in a half-filled decagon
16
+ 5.times do
17
+ pen.move 40
18
+ pen.turn_right 36
19
+ end
20
+
21
+
22
+ sheet.show
data/lib/edu_draw.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  require "gosu"
2
2
  require_relative "edu_draw/sheet"
3
3
  require_relative "edu_draw/pen"
4
+ require_relative "edu_draw/animation_pen"
@@ -0,0 +1,65 @@
1
+ module EduDraw
2
+ # An AnimatedPen is a special {Pen} that is used for drawing animated shapes
3
+ class AnimationPen < Pen
4
+
5
+ # @private
6
+ # Creates a new AnimationPen
7
+ # @overload initialize(x, y, angle, color)
8
+ # @param (see Pen#initialize)
9
+ def initialize(*args)
10
+ super
11
+ @update_block = -> {}
12
+ @draw_block = -> {}
13
+ end
14
+
15
+ # Defines what needs to be done every frame before drawing
16
+ #
17
+ # @example
18
+ # # This makes the pen turn around slowly
19
+ # pen.each_frame do
20
+ # pen.turn_right 1
21
+ # end
22
+ def each_frame &block
23
+ @update_block = block
24
+ end
25
+
26
+ # Defines what the pen needs to draw every frame
27
+ #
28
+ # @note Every {#move} outside this block will draw only in the first frame
29
+ #
30
+ # @note Remember to set the state of the pen so that it can start drawing the next frame.
31
+ # In the given example the last `pen.turn_right 90` is not neccessary for the shape,
32
+ # but without it, the pen would draw the rectangle in a different direction on the next frame.
33
+ # Maybe, this is what you need, but it is still recommended to do these changes in the
34
+ # {#each_frame}-block.
35
+ #
36
+ # @example
37
+ # # Draw a rectangle
38
+ # pen.draw_frame do
39
+ # pen.move 20
40
+ # pen.turn_right 90
41
+ # pen.move 10
42
+ # pen.turn_right 90
43
+ # pen.move 20
44
+ # pen.turn_right 90
45
+ # pen.move 10
46
+ # pen.turn_right 90
47
+ # end
48
+ def draw_frame &block
49
+ @draw_block = block
50
+ end
51
+
52
+ # @private
53
+ def update
54
+ empty_shapes
55
+ @update_block.call
56
+ @draw_block.call
57
+ end
58
+
59
+ private
60
+
61
+ def empty_shapes
62
+ shapes.clear
63
+ end
64
+ end
65
+ end
data/lib/edu_draw/pen.rb CHANGED
@@ -2,30 +2,39 @@ module EduDraw
2
2
  # A Pen is a drawing tool that provides basic drawing functionalities on a 2d {Sheet}.
3
3
  class Pen
4
4
 
5
+ # Tolerance with which to consider two points the same
6
+ PIXEL_TOLERANCE = 0.2
7
+ private_constant :PIXEL_TOLERANCE
8
+
9
+ # Shapes to be drawn by sheet
10
+ # @private
11
+ attr_reader :shapes
12
+
5
13
  # @return [Fixnum] x-coordinate of position in pixel where left is 0
6
- attr_reader :x
14
+ attr_accessor :x
7
15
 
8
16
  # @return [Fixnum] y-coordinate of position in pixel where top is 0
9
- attr_reader :y
17
+ attr_accessor :y
10
18
 
11
19
  # @return [Fixnum] Direction of the pen in degree where 0 points to the right
12
- attr_reader :angle
20
+ attr_accessor :angle
13
21
 
14
22
  # @return [Gosu::Color] Color of the pen
15
- attr_reader :color
23
+ attr_accessor :color
16
24
 
17
- # Creates a new Sheet
25
+ # Creates a new Pen
18
26
  #
19
- # @param x [Fixnum] initial value of {#x}
20
- # @param y [Fixnum] initial value of {#y}
21
- # @param angle [Fixnum] initial value of {#angle}
22
- # @param color [Gosu::Color] initial value of {#color}
23
- def initialize(sheet, x: 0, y: 0, angle: 0, color: Gosu::Color::GREEN)
27
+ # @param x [Fixnum] Initial value of {#x}
28
+ # @param y [Fixnum] Initial value of {#y}
29
+ # @param angle [Fixnum] Initial value of {#angle}
30
+ # @param color [Gosu::Color] Initial value of {#color}
31
+ def initialize(x: 0, y: 0, angle: 0, color: Gosu::Color::GREEN)
24
32
  @x = x
25
33
  @y = y
26
34
  @angle = angle
27
35
  @color = color
28
- @sheet = sheet
36
+ @shapes = []
37
+ @to_be_filled = []
29
38
 
30
39
  down!
31
40
  end
@@ -42,7 +51,7 @@ module EduDraw
42
51
  # Changes the direction of self to be turned to the right
43
52
  # The {#angle} stays within 0..364
44
53
  #
45
- # @param degree [Fixnum] Amount of degree to be turned
54
+ # @param (see #turn_left)
46
55
  def turn_right(degree)
47
56
  turn_left -degree
48
57
  end
@@ -52,23 +61,23 @@ module EduDraw
52
61
  @up
53
62
  end
54
63
 
55
- # If the pen is up, it touches the {Sheet} and is drawing when moved.
64
+ # If the pen is down, it touches the {Sheet} and is drawing when moved.
56
65
  def down?
57
66
  !up?
58
67
  end
59
68
 
60
69
  # Lifts the pen from the {Sheet}
61
70
  #
62
- # @see {#up?}
63
- # @see {#down?}
71
+ # @see #up?
72
+ # @see #down?
64
73
  def up!
65
74
  @up = true
66
75
  end
67
76
 
68
77
  # Sticks the pen to the {Sheet}
69
78
  #
70
- # @see {#up?}
71
- # @see {#down?}
79
+ # @see #up?
80
+ # @see #down?
72
81
  def down!
73
82
  @up = false
74
83
  end
@@ -80,9 +89,7 @@ module EduDraw
80
89
  def move(length)
81
90
  target_x = x + Math.cos(angle_in_rad) * length
82
91
  target_y = y + Math.sin(angle_in_rad) * length
83
- if down?
84
- @sheet.shapes << [:draw_line, x, y, color, target_x, target_y, color]
85
- end
92
+ handle_movement x, y, target_x, target_y
86
93
  @x = target_x
87
94
  @y = target_y
88
95
  end
@@ -91,5 +98,73 @@ module EduDraw
91
98
  def angle_in_rad
92
99
  angle * Math::PI / 180.0
93
100
  end
101
+
102
+ # Draws filled shapes.
103
+ #
104
+ # @note If the pen does not end where it started, the
105
+ # pen will assume a connection between start and end point.
106
+ # This does not affect the actual position and direction
107
+ # of the pen.
108
+ #
109
+ # @example
110
+ # # This draws a triangle
111
+ # pen.fill do
112
+ # pen.move 10
113
+ # pen.turn_right 90
114
+ # pen.move 10
115
+ # end
116
+ def fill(&block)
117
+ @to_be_filled << [x,y]
118
+ yield
119
+ if starting_point_is_end_point?
120
+ @to_be_filled.delete_at(0)
121
+ end
122
+ origin_x, origin_y = @to_be_filled.first
123
+ @to_be_filled[1..@to_be_filled.length-1].each_cons(2) do |point_a, point_b|
124
+ @shapes << [:draw_triangle,
125
+ origin_x, origin_y, color,
126
+ point_a[0], point_a[1], color,
127
+ point_b[0], point_b[1], color]
128
+ end
129
+ @to_be_filled.clear
130
+ end
131
+
132
+ # Hook method
133
+ # @private
134
+ def update
135
+ # nothing to do since nothing ever changes
136
+ end
137
+
138
+ private
139
+
140
+
141
+ # True, if pen is currently in a {#fill}-block
142
+ def fill_mode?
143
+ @to_be_filled.length > 0
144
+ end
145
+
146
+ # Does whatever needs to be done upon movement.
147
+ # This depends on the state of the pen.
148
+ # up or down? fill mode or regular mode?
149
+ def handle_movement(x, y, target_x, target_y)
150
+ if down?
151
+ if fill_mode?
152
+ @to_be_filled << [target_x, target_y]
153
+ else
154
+ @shapes << [:draw_line, x, y, color, target_x, target_y, color]
155
+ end
156
+ end
157
+ end
158
+
159
+ # Checks whether the pen came back to its starting point during
160
+ # the {#fill}-block.
161
+ def starting_point_is_end_point?
162
+ start_x = @to_be_filled.first[0]
163
+ start_y = @to_be_filled.first[1]
164
+ end_x = @to_be_filled.last[0]
165
+ end_y = @to_be_filled.last[1]
166
+ (start_x - end_x).abs <= PIXEL_TOLERANCE and
167
+ (start_y - end_y).abs <= PIXEL_TOLERANCE
168
+ end
94
169
  end
95
170
  end
@@ -3,7 +3,9 @@ module EduDraw
3
3
  class Sheet < Gosu::Window
4
4
 
5
5
  # @private
6
- attr_reader :shapes
6
+ # All pens created by and for this sheet
7
+ attr_reader :pens
8
+ private :pens
7
9
 
8
10
  # Creates a new Sheet
9
11
  #
@@ -13,39 +15,58 @@ module EduDraw
13
15
  def initialize(x: 100, y: 100, title: "A blank sheet")
14
16
  super x, y, false
15
17
  self.caption = title
16
- @shapes = []
18
+ @pens = []
17
19
  end
18
20
 
19
- # @private
20
- def needs_cursor?
21
- true
22
- end
23
21
 
24
22
  # Creates a new {Pen} that draws on self
25
23
  #
26
- # @see {Pen}
24
+ # @see Pen
27
25
  #
28
26
  # @param x [Fixnum] x-coordinate of starting position. Left is 0.
29
27
  # @param y [Fixnum] y-coordinate of starting position. Top is 0.
30
28
  # @param angle [Fixnum] Direction of pen in degree. 0 points to the right.
31
29
  # @param color [Gosu::Color] Color of the pen
32
30
  def new_pen(x: 0, y: 0, angle: 0, color: Gosu::Color::GREEN)
33
- Pen.new(self, x: x, y: y, angle: angle, color: color)
31
+ pen = Pen.new(x: x, y: y, angle: angle, color: color)
32
+ pens << pen
33
+ pen
34
34
  end
35
35
 
36
- # @private
37
- def draw
38
- shapes.each do |shape|
39
- method,*args = shape
40
- send method, *args
41
- end
36
+ # Create a new {AnimationPen} that draws something different each frame
37
+ #
38
+ # @see AnimationPen
39
+ #
40
+ # @param (see #new_pen)
41
+ def new_animation_pen(x: 0, y: 0, angle: 0, color: Gosu::Color::GREEN)
42
+ pen = AnimationPen.new(x: x, y: y, angle: angle, color: color)
43
+ pens << pen
44
+ pen
42
45
  end
43
46
 
44
- # @private
45
- def update
46
- if button_down? Gosu::KbEscape
47
- close
47
+ private
48
+ # Makes gosu display the system mouse cursor
49
+ def needs_cursor?
50
+ true
51
+ end
52
+
53
+ # Gosu hook method for drawing window content
54
+ def draw
55
+ pens.map(&:shapes).each do |shapes|
56
+ shapes.each do |shape|
57
+ method,*args = shape
58
+ send method, *args
59
+ end
60
+ end
61
+ end
62
+
63
+ # Gosu hook method for updating game state before drawing
64
+ # This is called once per frame
65
+ def update
66
+ pens.each &:update
67
+ if button_down? Gosu::KbEscape
68
+ close
69
+ end
48
70
  end
49
- end
50
71
  end
51
72
  end
@@ -0,0 +1,16 @@
1
+ require_relative "../test_helper"
2
+ module EduDraw
3
+ class AnimationPenTest < Minitest::Unit::TestCase
4
+ include BasicPenTests
5
+
6
+ def setup
7
+ @pen = AnimationPen.new(x: 10, y: 20, angle: 25, color: Gosu::Color::BLACK)
8
+ end
9
+
10
+ def test_update_removes_shapes
11
+ pen_shapes << Object.new
12
+ @pen.send :update
13
+ assert_empty pen_shapes
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,71 @@
1
+ module EduDraw
2
+ module BasicPenTests
3
+ def pen_shapes
4
+ @pen.instance_variable_get :@shapes
5
+ end
6
+
7
+ def test_initialize
8
+ assert_equal 10, @pen.x
9
+ assert_equal 20, @pen.y
10
+ assert_equal 25, @pen.angle
11
+ assert_equal Gosu::Color::BLACK, @pen.color
12
+ end
13
+
14
+ def test_move
15
+ @pen.move 100
16
+ expected_x = 10 + Math.cos(25 * Math::PI / 180.0) * 100
17
+ expected_y = 20 + Math.sin(25 * Math::PI / 180.0) * 100
18
+ assert_equal expected_x, @pen.x # x changed
19
+ assert_equal expected_y, @pen.y # y changed
20
+ assert_equal 25, @pen.angle # angle unchanged
21
+ assert_equal Gosu::Color::BLACK, @pen.color # color unchanged
22
+ end
23
+
24
+ def test_doesnt_draws_when_up
25
+ @pen.up!
26
+ @pen.move 100
27
+ assert_empty pen_shapes
28
+ end
29
+
30
+ def test_up_and_down
31
+ assert @pen.down?
32
+ refute @pen.up?
33
+
34
+ @pen.up!
35
+ assert @pen.up?
36
+ refute @pen.down?
37
+
38
+ @pen.down!
39
+ assert @pen.down?
40
+ refute @pen.up?
41
+ end
42
+
43
+ def test_turning
44
+ assert_equal 25, @pen.angle
45
+
46
+ @pen.turn_left 25
47
+ assert_equal 0, @pen.angle
48
+
49
+ @pen.turn_left 10
50
+ assert_equal 350, @pen.angle
51
+
52
+ @pen.turn_right 20
53
+ assert_equal 10, @pen.angle
54
+ end
55
+
56
+ def test_angle_in_rad
57
+ assert_equal 25 * Math::PI / 180.0, @pen.angle_in_rad
58
+ end
59
+
60
+ def test_area
61
+ assert_respond_to @pen, :fill
62
+ @pen.fill do
63
+ 4.times do
64
+ @pen.move 10
65
+ @pen.turn_right 90
66
+ end
67
+ end
68
+ assert_equal 2, pen_shapes.length # 2 rectangles
69
+ end
70
+ end
71
+ end
@@ -1,62 +1,16 @@
1
1
  require_relative "../test_helper"
2
2
  module EduDraw
3
3
  class PenTest < Minitest::Unit::TestCase
4
- def setup
5
- @sheet_stub = stub shapes: []
6
- @pen = Pen.new(@sheet_stub, x: 10, y: 20, angle: 25, color: Gosu::Color::BLACK)
7
- end
8
-
9
- def test_initialize
10
- assert_equal 10, @pen.x
11
- assert_equal 20, @pen.y
12
- assert_equal 25, @pen.angle
13
- assert_equal Gosu::Color::BLACK, @pen.color
14
- end
15
-
16
- def test_move
17
- @pen.move 100
18
- expected_x = 10 + Math.cos(25 * Math::PI / 180.0) * 100
19
- expected_y = 20 + Math.sin(25 * Math::PI / 180.0) * 100
20
- assert_equal expected_x, @pen.x # x changed
21
- assert_equal expected_y, @pen.y # y changed
22
- assert_equal 25, @pen.angle # angle unchanged
23
- assert_equal Gosu::Color::BLACK, @pen.color # color unchanged
24
- end
25
-
26
- def test_doesnt_draws_when_up
27
- @sheet_stub.expects(:shapes).times(0)
28
- @pen.up!
29
- @pen.move 100
30
- end
4
+ include BasicPenTests
31
5
 
32
- def test_up_and_down
33
- assert @pen.down?
34
- refute @pen.up?
35
-
36
- @pen.up!
37
- assert @pen.up?
38
- refute @pen.down?
39
-
40
- @pen.down!
41
- assert @pen.down?
42
- refute @pen.up?
43
- end
44
-
45
- def test_turning
46
- assert_equal 25, @pen.angle
47
-
48
- @pen.turn_left 25
49
- assert_equal 0, @pen.angle
50
-
51
- @pen.turn_left 10
52
- assert_equal 350, @pen.angle
53
-
54
- @pen.turn_right 20
55
- assert_equal 10, @pen.angle
6
+ def setup
7
+ @pen = Pen.new(x: 10, y: 20, angle: 25, color: Gosu::Color::BLACK)
56
8
  end
57
9
 
58
- def test_angle_in_rad
59
- assert_equal 25 * Math::PI / 180.0, @pen.angle_in_rad
10
+ def test_update_does_not_remove_shapes
11
+ pen_shapes << Object.new
12
+ @pen.send :update
13
+ refute_empty pen_shapes
60
14
  end
61
15
  end
62
16
  end
@@ -12,7 +12,7 @@ module EduDraw
12
12
  end
13
13
 
14
14
  def test_cursor_visible
15
- assert @sheet.needs_cursor?
15
+ assert @sheet.send :needs_cursor?
16
16
  end
17
17
 
18
18
  def test_window
@@ -26,8 +26,14 @@ module EduDraw
26
26
 
27
27
  def test_new_pen_creates_new_instance
28
28
  Pen.expects(:new).once
29
+ AnimationPen.expects(:new).never
29
30
  @sheet.new_pen
30
31
  end
31
32
 
33
+ def test_new_animation_pen
34
+ AnimationPen.expects(:new).never
35
+ Pen.expects(:new).once
36
+ @sheet.new_animation_pen
37
+ end
32
38
  end
33
39
  end
data/test/test_helper.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  require "minitest/autorun"
2
2
  require "minitest/mock"
3
+ require "minitest/focus"
4
+
3
5
  require "mocha"
4
6
  require "mocha/mini_test"
7
+
8
+ require_relative "edu_draw/basic_pen_tests.rb"
9
+
5
10
  require_relative "../lib/edu_draw"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: edu_draw
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marvin Ede
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-focus
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
41
55
  description: Simple object oriented API for opening a window and drawing in it. Based
42
56
  on gosu. It's meant to teach beginners programming as a visualization of code can
43
57
  help.
@@ -49,10 +63,15 @@ files:
49
63
  - LICENSE
50
64
  - README.md
51
65
  - Rakefile
66
+ - examples/animations.rb
67
+ - examples/areas.rb
52
68
  - examples/lines.rb
53
69
  - lib/edu_draw.rb
70
+ - lib/edu_draw/animation_pen.rb
54
71
  - lib/edu_draw/pen.rb
55
72
  - lib/edu_draw/sheet.rb
73
+ - test/edu_draw/animation_pen_test.rb
74
+ - test/edu_draw/basic_pen_tests.rb
56
75
  - test/edu_draw/pen_test.rb
57
76
  - test/edu_draw/sheet_test.rb
58
77
  - test/test_helper.rb