gruff 0.13.0-java → 0.16.0-java

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +79 -0
  3. data/.rubocop.yml +29 -31
  4. data/CHANGELOG.md +43 -0
  5. data/README.md +11 -5
  6. data/gruff.gemspec +8 -10
  7. data/lib/gruff/accumulator_bar.rb +4 -2
  8. data/lib/gruff/area.rb +9 -12
  9. data/lib/gruff/bar.rb +46 -31
  10. data/lib/gruff/base.rb +236 -207
  11. data/lib/gruff/bezier.rb +6 -8
  12. data/lib/gruff/box_plot.rb +174 -0
  13. data/lib/gruff/bullet.rb +17 -16
  14. data/lib/gruff/candlestick.rb +112 -0
  15. data/lib/gruff/dot.rb +14 -14
  16. data/lib/gruff/font.rb +42 -0
  17. data/lib/gruff/helper/bar_conversion.rb +5 -5
  18. data/lib/gruff/helper/bar_value_label.rb +26 -20
  19. data/lib/gruff/helper/stacked_mixin.rb +4 -3
  20. data/lib/gruff/histogram.rb +9 -7
  21. data/lib/gruff/line.rb +96 -83
  22. data/lib/gruff/mini/bar.rb +9 -6
  23. data/lib/gruff/mini/legend.rb +16 -12
  24. data/lib/gruff/mini/pie.rb +9 -6
  25. data/lib/gruff/mini/side_bar.rb +9 -6
  26. data/lib/gruff/net.rb +16 -22
  27. data/lib/gruff/patch/rmagick.rb +0 -1
  28. data/lib/gruff/patch/string.rb +2 -1
  29. data/lib/gruff/pie.rb +42 -75
  30. data/lib/gruff/renderer/bezier.rb +8 -9
  31. data/lib/gruff/renderer/circle.rb +8 -9
  32. data/lib/gruff/renderer/dash_line.rb +10 -10
  33. data/lib/gruff/renderer/dot.rb +15 -14
  34. data/lib/gruff/renderer/ellipse.rb +8 -9
  35. data/lib/gruff/renderer/line.rb +8 -11
  36. data/lib/gruff/renderer/polygon.rb +9 -10
  37. data/lib/gruff/renderer/polyline.rb +8 -9
  38. data/lib/gruff/renderer/rectangle.rb +11 -8
  39. data/lib/gruff/renderer/renderer.rb +25 -40
  40. data/lib/gruff/renderer/text.rb +21 -37
  41. data/lib/gruff/scatter.rb +86 -85
  42. data/lib/gruff/side_bar.rb +50 -37
  43. data/lib/gruff/side_stacked_bar.rb +26 -35
  44. data/lib/gruff/spider.rb +52 -28
  45. data/lib/gruff/stacked_area.rb +20 -16
  46. data/lib/gruff/stacked_bar.rb +44 -22
  47. data/lib/gruff/store/store.rb +6 -10
  48. data/lib/gruff/store/xy_data.rb +2 -0
  49. data/lib/gruff/themes.rb +6 -6
  50. data/lib/gruff/version.rb +1 -1
  51. data/lib/gruff.rb +70 -57
  52. data/rails_generators/gruff/templates/controller.rb +1 -1
  53. metadata +15 -32
  54. data/.rubocop_todo.yml +0 -182
  55. data/.travis.yml +0 -23
  56. data/assets/plastik/blue.png +0 -0
  57. data/assets/plastik/green.png +0 -0
  58. data/assets/plastik/red.png +0 -0
  59. data/lib/gruff/photo_bar.rb +0 -93
  60. data/lib/gruff/scene.rb +0 -198
  61. data/lib/gruff/store/custom_data.rb +0 -36
data/lib/gruff/pie.rb CHANGED
@@ -9,59 +9,62 @@
9
9
  # g.data 'Hamburgers', 50
10
10
  # g.write("pie_keynote.png")
11
11
  #
12
- # To control where the pie chart starts creating slices, use {#zero_degree=}.
12
+ # To control where the pie chart starts creating slices, use {#start_degree=}.
13
13
  #
14
14
  class Gruff::Pie < Gruff::Base
15
- DEFAULT_TEXT_OFFSET_PERCENTAGE = 0.15
15
+ DEFAULT_TEXT_OFFSET_PERCENTAGE = 0.1
16
16
 
17
17
  # Can be used to make the pie start cutting slices at the top (-90.0)
18
- # or at another angle. Default is +0.0+, which starts at 3 o'clock.
19
- attr_writer :zero_degree
18
+ # or at another angle. Default is +-90.0+, which starts at 3 o'clock.
19
+ attr_writer :start_degree
20
+
21
+ # Set the number output format lambda.
22
+ attr_writer :label_formatting
20
23
 
21
24
  # Do not show labels for slices that are less than this percent. Use 0 to always show all labels.
22
25
  # Defaults to +0+.
23
26
  attr_writer :hide_labels_less_than
24
27
 
25
28
  # Affect the distance between the percentages and the pie chart.
26
- # Defaults to +0.15+.
29
+ # Defaults to +0.1+.
27
30
  attr_writer :text_offset_percentage
28
31
 
29
32
  ## Use values instead of percentages.
30
33
  attr_writer :show_values_as_labels
31
34
 
32
- def initialize_store
33
- @store = Gruff::Store.new(Gruff::Store::CustomData)
35
+ # Set to +true+ if you want the data sets sorted with largest avg values drawn
36
+ # first. Default is +true+.
37
+ attr_writer :sort
38
+
39
+ # Can be used to make the pie start cutting slices at the top (-90.0)
40
+ # or at another angle. Default is +-90.0+, which starts at 3 o'clock.
41
+ # @deprecated Please use +start_degree+ attribute instead.
42
+ def zero_degree=(value)
43
+ warn '#zero_degree= is deprecated. Please use `start_degree` attribute instead'
44
+ @start_degree = value
34
45
  end
35
- private :initialize_store
36
46
 
37
- def initialize_ivars
47
+ private
48
+
49
+ def initialize_attributes
38
50
  super
39
- @zero_degree = 0.0
51
+ @start_degree = -90.0
40
52
  @hide_labels_less_than = 0.0
41
53
  @text_offset_percentage = DEFAULT_TEXT_OFFSET_PERCENTAGE
42
54
  @show_values_as_labels = false
43
- end
44
- private :initialize_ivars
45
-
46
- def options
47
- {
48
- zero_degree: @zero_degree,
49
- hide_labels_less_than: @hide_labels_less_than,
50
- text_offset_percentage: @text_offset_percentage,
51
- show_values_as_labels: @show_values_as_labels
52
- }
53
- end
55
+ @marker_font.bold = true
56
+ @sort = true
54
57
 
55
- def draw
56
- hide_line_markers
57
-
58
- super
58
+ @hide_line_markers = true
59
+ @hide_line_markers.freeze
59
60
 
60
- return unless data_given?
61
+ @label_formatting = ->(value, percentage) { @show_values_as_labels ? value.to_s : "#{percentage}%" }
62
+ end
61
63
 
64
+ def draw_graph
62
65
  slices.each do |slice|
63
66
  if slice.value > 0
64
- Gruff::Renderer::Ellipse.new(color: slice.color, width: radius)
67
+ Gruff::Renderer::Ellipse.new(renderer, color: slice.color, width: radius)
65
68
  .render(center_x, center_y, radius / 2.0, radius / 2.0, chart_degrees, chart_degrees + slice.degrees + 0.5)
66
69
  process_label_for slice
67
70
  update_chart_degrees_with slice.degrees
@@ -69,11 +72,9 @@ class Gruff::Pie < Gruff::Base
69
72
  end
70
73
  end
71
74
 
72
- private
73
-
74
75
  def slices
75
76
  @slices ||= begin
76
- slices = store.data.map { |data| slice_class.new(data, options) }
77
+ slices = store.data.map { |data| Gruff::Pie::PieSlice.new(data.label, data.points.first, data.color) }
77
78
 
78
79
  slices.sort_by(&:value) if @sort
79
80
 
@@ -84,32 +85,19 @@ private
84
85
 
85
86
  # General Helper Methods
86
87
 
87
- def hide_line_markers
88
- @hide_line_markers = true
89
- end
90
-
91
88
  def update_chart_degrees_with(degrees)
92
89
  @chart_degrees = chart_degrees + degrees
93
90
  end
94
91
 
95
- def slice_class
96
- PieSlice
97
- end
98
-
99
92
  # Spatial Value-Related Methods
100
93
 
101
94
  def chart_degrees
102
- @chart_degrees ||= @zero_degree
95
+ @chart_degrees ||= @start_degree
103
96
  end
104
97
 
105
98
  attr_reader :graph_height
106
-
107
99
  attr_reader :graph_width
108
100
 
109
- def diameter
110
- graph_height
111
- end
112
-
113
101
  def half_width
114
102
  graph_width / 2.0
115
103
  end
@@ -147,13 +135,13 @@ private
147
135
  def process_label_for(slice)
148
136
  if slice.percentage >= @hide_labels_less_than
149
137
  x, y = label_coordinates_for slice
150
-
151
- draw_label(x, y, slice.label)
138
+ label = @label_formatting.call(slice.value, slice.percentage)
139
+ draw_label_at(1.0, 1.0, x, y, label, Magick::CenterGravity)
152
140
  end
153
141
  end
154
142
 
155
143
  def label_coordinates_for(slice)
156
- angle = chart_degrees + slice.degrees / 2
144
+ angle = chart_degrees + (slice.degrees / 2.0)
157
145
 
158
146
  [x_label_coordinate(angle), y_label_coordinate(angle)]
159
147
  end
@@ -166,45 +154,24 @@ private
166
154
  center_y + (radius_offset * Math.sin(deg2rad(angle)))
167
155
  end
168
156
 
169
- # Drawing-Related Methods
170
-
171
- def draw_label(x, y, value)
172
- text_renderer = Gruff::Renderer::Text.new(value, font: @font, size: @marker_font_size, color: @font_color, weight: Magick::BoldWeight)
173
- text_renderer.add_to_render_queue(0, 0, x, y, Magick::CenterGravity)
174
- end
175
-
176
157
  # Helper Classes
177
158
  #
178
159
  # @private
179
- class PieSlice < Struct.new(:data_array, :options)
160
+ class PieSlice < Struct.new(:label, :value, :color)
180
161
  attr_accessor :total
181
162
 
182
- def name
183
- data_array[0]
184
- end
185
-
186
- def value
187
- data_array[1].first
188
- end
189
-
190
- def color
191
- data_array[2]
192
- end
193
-
194
- def size
195
- @size ||= value / total
196
- end
197
-
198
163
  def percentage
199
- @percentage ||= (size * 100.0).round
164
+ (size * 100.0).round
200
165
  end
201
166
 
202
167
  def degrees
203
- @degrees ||= size * 360.0
168
+ size * 360.0
204
169
  end
205
170
 
206
- def label
207
- options[:show_values_as_labels] ? value.to_s : "#{percentage}%"
171
+ private
172
+
173
+ def size
174
+ value / total
208
175
  end
209
176
  end
210
177
  end
@@ -3,20 +3,19 @@
3
3
  module Gruff
4
4
  # @private
5
5
  class Renderer::Bezier
6
- def initialize(color:, width: 1.0)
6
+ def initialize(renderer, color:, width: 1.0)
7
+ @renderer = renderer
7
8
  @color = color
8
9
  @width = width
9
10
  end
10
11
 
11
12
  def render(points)
12
- draw = Renderer.instance.draw
13
-
14
- draw.push
15
- draw.stroke(@color)
16
- draw.stroke_width(@width)
17
- draw.fill_opacity(0.0)
18
- draw.bezier(*points)
19
- draw.pop
13
+ @renderer.draw.push
14
+ @renderer.draw.stroke(@color)
15
+ @renderer.draw.stroke_width(@width)
16
+ @renderer.draw.fill_opacity(0.0)
17
+ @renderer.draw.bezier(*points)
18
+ @renderer.draw.pop
20
19
  end
21
20
  end
22
21
  end
@@ -3,20 +3,19 @@
3
3
  module Gruff
4
4
  # @private
5
5
  class Renderer::Circle
6
- def initialize(color:, width: 1.0)
6
+ def initialize(renderer, color:, width: 1.0)
7
+ @renderer = renderer
7
8
  @color = color
8
9
  @width = width
9
10
  end
10
11
 
11
12
  def render(origin_x, origin_y, perim_x, perim_y)
12
- draw = Renderer.instance.draw
13
-
14
- draw.push
15
- draw.fill(@color)
16
- draw.stroke(@color)
17
- draw.stroke_width(@width)
18
- draw.circle(origin_x, origin_y, perim_x, perim_y)
19
- draw.pop
13
+ @renderer.draw.push
14
+ @renderer.draw.fill(@color)
15
+ @renderer.draw.stroke(@color)
16
+ @renderer.draw.stroke_width(@width)
17
+ @renderer.draw.circle(origin_x, origin_y, perim_x, perim_y)
18
+ @renderer.draw.pop
20
19
  end
21
20
  end
22
21
  end
@@ -3,21 +3,21 @@
3
3
  module Gruff
4
4
  # @private
5
5
  class Renderer::DashLine
6
- def initialize(color:, width:)
6
+ def initialize(renderer, color:, width:, dasharray: [10, 20])
7
+ @renderer = renderer
7
8
  @color = color
8
9
  @width = width
10
+ @dasharray = dasharray
9
11
  end
10
12
 
11
13
  def render(start_x, start_y, end_x, end_y)
12
- draw = Renderer.instance.draw
13
-
14
- draw.push
15
- draw.stroke_color(@color)
16
- draw.fill_opacity(0.0)
17
- draw.stroke_dasharray(10, 20)
18
- draw.stroke_width(@width)
19
- draw.line(start_x, start_y, end_x, end_y)
20
- draw.pop
14
+ @renderer.draw.push
15
+ @renderer.draw.stroke_color(@color)
16
+ @renderer.draw.fill_opacity(0.0)
17
+ @renderer.draw.stroke_dasharray(*@dasharray)
18
+ @renderer.draw.stroke_width(@width)
19
+ @renderer.draw.line(start_x, start_y, end_x, end_y)
20
+ @renderer.draw.pop
21
21
  end
22
22
  end
23
23
  end
@@ -3,38 +3,39 @@
3
3
  module Gruff
4
4
  # @private
5
5
  class Renderer::Dot
6
- def initialize(style, color:, width: 1.0)
6
+ def initialize(renderer, style, color:, width: 1.0, opacity: 1.0)
7
+ @renderer = renderer
7
8
  @style = style
8
9
  @color = color
9
10
  @width = width
11
+ @opacity = opacity
10
12
  end
11
13
 
12
14
  def render(new_x, new_y, circle_radius)
13
- draw = Renderer.instance.draw
14
-
15
- # draw.push # TODO
16
- draw.stroke_width(@width)
17
- draw.stroke(@color)
18
- draw.fill(@color)
15
+ # @renderer.draw.push # TODO
16
+ @renderer.draw.stroke_width(@width)
17
+ @renderer.draw.stroke(@color)
18
+ @renderer.draw.fill(@color)
19
+ @renderer.draw.fill_opacity(@opacity)
19
20
  if @style.to_s == 'square'
20
- square(draw, new_x, new_y, circle_radius)
21
+ square(new_x, new_y, circle_radius)
21
22
  else
22
- circle(draw, new_x, new_y, circle_radius)
23
+ circle(new_x, new_y, circle_radius)
23
24
  end
24
- # draw.pop # TODO
25
+ # @renderer.draw.pop # TODO
25
26
  end
26
27
 
27
- def circle(draw, new_x, new_y, circle_radius)
28
- draw.circle(new_x, new_y, new_x - circle_radius, new_y)
28
+ def circle(new_x, new_y, circle_radius)
29
+ @renderer.draw.circle(new_x, new_y, new_x - circle_radius, new_y)
29
30
  end
30
31
 
31
- def square(draw, new_x, new_y, circle_radius)
32
+ def square(new_x, new_y, circle_radius)
32
33
  offset = (circle_radius * 0.8).to_i
33
34
  corner1 = new_x - offset
34
35
  corner2 = new_y - offset
35
36
  corner3 = new_x + offset
36
37
  corner4 = new_y + offset
37
- draw.rectangle(corner1, corner2, corner3, corner4)
38
+ @renderer.draw.rectangle(corner1, corner2, corner3, corner4)
38
39
  end
39
40
  end
40
41
  end
@@ -3,20 +3,19 @@
3
3
  module Gruff
4
4
  # @private
5
5
  class Renderer::Ellipse
6
- def initialize(color:, width: 1.0)
6
+ def initialize(renderer, color:, width: 1.0)
7
+ @renderer = renderer
7
8
  @color = color
8
9
  @width = width
9
10
  end
10
11
 
11
12
  def render(origin_x, origin_y, width, height, arc_start, arc_end)
12
- draw = Renderer.instance.draw
13
-
14
- draw.push
15
- draw.stroke_width(@width)
16
- draw.stroke(@color)
17
- draw.fill('transparent')
18
- draw.ellipse(origin_x, origin_y, width, height, arc_start, arc_end)
19
- draw.pop
13
+ @renderer.draw.push
14
+ @renderer.draw.stroke_width(@width)
15
+ @renderer.draw.stroke(@color)
16
+ @renderer.draw.fill('transparent')
17
+ @renderer.draw.ellipse(origin_x, origin_y, width, height, arc_start, arc_end)
18
+ @renderer.draw.pop
20
19
  end
21
20
  end
22
21
  end
@@ -5,15 +5,14 @@ module Gruff
5
5
  class Renderer::Line
6
6
  EPSILON = 0.001
7
7
 
8
- def initialize(color:, width: nil, shadow_color: nil)
8
+ def initialize(renderer, color:, width: nil)
9
+ @renderer = renderer
9
10
  @color = color
10
11
  @width = width
11
- @shadow_color = shadow_color
12
12
  end
13
13
 
14
14
  def render(start_x, start_y, end_x, end_y)
15
15
  render_line(start_x, start_y, end_x, end_y, @color)
16
- render_line(start_x, start_y + 1, end_x, end_y + 1, @shadow_color) if @shadow_color
17
16
  end
18
17
 
19
18
  private
@@ -30,14 +29,12 @@ module Gruff
30
29
  end_y += EPSILON
31
30
  end
32
31
 
33
- draw = Renderer.instance.draw
34
-
35
- draw.push
36
- draw.stroke(color)
37
- draw.fill(color)
38
- draw.stroke_width(@width) if @width
39
- draw.line(start_x, start_y, end_x, end_y)
40
- draw.pop
32
+ @renderer.draw.push
33
+ @renderer.draw.stroke(color)
34
+ @renderer.draw.fill(color)
35
+ @renderer.draw.stroke_width(@width) if @width
36
+ @renderer.draw.line(start_x, start_y, end_x, end_y)
37
+ @renderer.draw.pop
41
38
  end
42
39
  end
43
40
  end
@@ -3,22 +3,21 @@
3
3
  module Gruff
4
4
  # @private
5
5
  class Renderer::Polygon
6
- def initialize(color:, width: 1.0, opacity: 1.0)
6
+ def initialize(renderer, color:, width: 1.0, opacity: 1.0)
7
+ @renderer = renderer
7
8
  @color = color
8
9
  @width = width
9
10
  @opacity = opacity
10
11
  end
11
12
 
12
13
  def render(points)
13
- draw = Renderer.instance.draw
14
-
15
- draw.push
16
- draw.stroke_width(@width)
17
- draw.stroke(@color)
18
- draw.fill(@color)
19
- draw.fill_opacity(@opacity)
20
- draw.polygon(*points)
21
- draw.pop
14
+ @renderer.draw.push
15
+ @renderer.draw.stroke_width(@width)
16
+ @renderer.draw.stroke(@color)
17
+ @renderer.draw.fill(@color)
18
+ @renderer.draw.fill_opacity(@opacity)
19
+ @renderer.draw.polygon(*points)
20
+ @renderer.draw.pop
22
21
  end
23
22
  end
24
23
  end
@@ -3,20 +3,19 @@
3
3
  module Gruff
4
4
  # @private
5
5
  class Renderer::Polyline
6
- def initialize(color:, width:)
6
+ def initialize(renderer, color:, width:)
7
+ @renderer = renderer
7
8
  @color = color
8
9
  @width = width
9
10
  end
10
11
 
11
12
  def render(points)
12
- draw = Renderer.instance.draw
13
-
14
- draw.push
15
- draw.stroke(@color)
16
- draw.fill('transparent')
17
- draw.stroke_width(@width)
18
- draw.polyline(*points)
19
- draw.pop
13
+ @renderer.draw.push
14
+ @renderer.draw.stroke(@color)
15
+ @renderer.draw.fill('transparent')
16
+ @renderer.draw.stroke_width(@width)
17
+ @renderer.draw.polyline(*points)
18
+ @renderer.draw.pop
20
19
  end
21
20
  end
22
21
  end
@@ -3,18 +3,21 @@
3
3
  module Gruff
4
4
  # @private
5
5
  class Renderer::Rectangle
6
- def initialize(color: nil)
6
+ def initialize(renderer, color: nil, width: 1.0, opacity: 1.0)
7
+ @renderer = renderer
7
8
  @color = color
9
+ @width = width
10
+ @opacity = opacity
8
11
  end
9
12
 
10
13
  def render(upper_left_x, upper_left_y, lower_right_x, lower_right_y)
11
- draw = Renderer.instance.draw
12
-
13
- draw.push
14
- draw.stroke('transparent')
15
- draw.fill(@color) if @color
16
- draw.rectangle(upper_left_x, upper_left_y, lower_right_x, lower_right_y)
17
- draw.pop
14
+ @renderer.draw.push
15
+ @renderer.draw.stroke_width(@width)
16
+ @renderer.draw.stroke(@color) if @width > 1.0
17
+ @renderer.draw.fill_opacity(@opacity)
18
+ @renderer.draw.fill(@color) if @color
19
+ @renderer.draw.rectangle(upper_left_x, upper_left_y, lower_right_x, lower_right_y)
20
+ @renderer.draw.pop
18
21
  end
19
22
  end
20
23
  end
@@ -1,53 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'singleton'
4
-
5
3
  module Gruff
6
4
  # @private
7
5
  class Renderer
8
- include Singleton
9
-
10
- attr_accessor :draw, :image, :scale, :text_renderers
11
-
12
- def self.setup(columns, rows, font, scale, theme_options)
13
- draw = Magick::Draw.new
14
- draw.font = font if font
15
- # Scale down from 800x600 used to calculate drawing.
16
- draw.scale(scale, scale)
17
-
18
- image = Renderer.instance.background(columns, rows, scale, theme_options)
6
+ attr_accessor :text_renderers
7
+ attr_reader :draw, :image, :scale
19
8
 
20
- Renderer.instance.draw = draw
21
- Renderer.instance.scale = scale
22
- Renderer.instance.image = image
23
- Renderer.instance.text_renderers = []
24
- end
25
-
26
- def self.setup_transparent_background(columns, rows)
27
- image = Renderer.instance.render_transparent_background(columns, rows)
28
- Renderer.instance.image = image
29
- end
9
+ def initialize(columns, rows, scale, theme_options)
10
+ @draw = Magick::Draw.new
11
+ @text_renderers = []
30
12
 
31
- def self.background_image=(image)
32
- Renderer.instance.image = image
13
+ @scale = scale
14
+ @draw.scale(scale, scale)
15
+ @image = background(columns, rows, scale, theme_options)
33
16
  end
34
17
 
35
- def self.font=(font)
36
- draw = Renderer.instance.draw
37
- draw.font = font if font
38
- end
18
+ def finish
19
+ @draw.draw(@image)
39
20
 
40
- def self.finish
41
- draw = Renderer.instance.draw
42
- image = Renderer.instance.image
43
-
44
- draw.draw(image)
45
-
46
- Renderer.instance.text_renderers.each do |renderer|
21
+ @text_renderers.each do |renderer|
47
22
  renderer.render(renderer.width, renderer.height, renderer.x, renderer.y, renderer.gravity)
48
23
  end
49
24
  end
50
25
 
26
+ def background_image=(image)
27
+ @image = image
28
+ end
29
+
51
30
  def background(columns, rows, scale, theme_options)
52
31
  case theme_options[:background_colors]
53
32
  when Array
@@ -59,10 +38,14 @@ module Gruff
59
38
  end
60
39
  end
61
40
 
41
+ def transparent_background(columns, rows)
42
+ @image = render_transparent_background(columns, rows)
43
+ end
44
+
62
45
  # Make a new image at the current size with a solid +color+.
63
46
  def solid_background(columns, rows, color)
64
- Magick::Image.new(columns, rows) do
65
- self.background_color = color
47
+ Magick::Image.new(columns, rows) do |img|
48
+ img.background_color = color
66
49
  end
67
50
  end
68
51
 
@@ -101,6 +84,8 @@ module Gruff
101
84
  end
102
85
  end
103
86
 
87
+ private
88
+
104
89
  # Use with a theme to use an image (800x600 original) background.
105
90
  def image_background(scale, image_path)
106
91
  image = Magick::Image.read(image_path)
@@ -112,8 +97,8 @@ module Gruff
112
97
 
113
98
  # Use with a theme to make a transparent background
114
99
  def render_transparent_background(columns, rows)
115
- Magick::Image.new(columns, rows) do
116
- self.background_color = 'transparent'
100
+ Magick::Image.new(columns, rows) do |img|
101
+ img.background_color = 'transparent'
117
102
  end
118
103
  end
119
104
  end