gruff 0.10.0-java → 0.13.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/.gitignore +1 -0
  3. data/.rubocop.yml +24 -4
  4. data/.rubocop_todo.yml +94 -42
  5. data/.travis.yml +3 -6
  6. data/CHANGELOG.md +35 -0
  7. data/README.md +10 -1
  8. data/assets/fonts/LICENSE.txt +202 -0
  9. data/assets/fonts/Roboto-Bold.ttf +0 -0
  10. data/assets/fonts/Roboto-Regular.ttf +0 -0
  11. data/gruff.gemspec +8 -3
  12. data/lib/gruff.rb +8 -3
  13. data/lib/gruff/accumulator_bar.rb +0 -2
  14. data/lib/gruff/area.rb +2 -6
  15. data/lib/gruff/bar.rb +35 -35
  16. data/lib/gruff/base.rb +295 -188
  17. data/lib/gruff/bezier.rb +0 -4
  18. data/lib/gruff/bullet.rb +12 -14
  19. data/lib/gruff/dot.rb +8 -33
  20. data/lib/gruff/helper/bar_conversion.rb +34 -19
  21. data/lib/gruff/helper/bar_value_label.rb +68 -0
  22. data/lib/gruff/histogram.rb +25 -25
  23. data/lib/gruff/line.rb +29 -26
  24. data/lib/gruff/mini/bar.rb +1 -1
  25. data/lib/gruff/mini/legend.rb +9 -4
  26. data/lib/gruff/mini/pie.rb +1 -2
  27. data/lib/gruff/mini/side_bar.rb +1 -2
  28. data/lib/gruff/net.rb +19 -20
  29. data/lib/gruff/patch/rmagick.rb +22 -24
  30. data/lib/gruff/patch/string.rb +7 -4
  31. data/lib/gruff/photo_bar.rb +12 -16
  32. data/lib/gruff/pie.rb +19 -30
  33. data/lib/gruff/renderer/bezier.rb +4 -3
  34. data/lib/gruff/renderer/circle.rb +4 -3
  35. data/lib/gruff/renderer/dash_line.rb +4 -3
  36. data/lib/gruff/renderer/dot.rb +4 -3
  37. data/lib/gruff/renderer/ellipse.rb +4 -3
  38. data/lib/gruff/renderer/line.rb +14 -5
  39. data/lib/gruff/renderer/polygon.rb +5 -4
  40. data/lib/gruff/renderer/polyline.rb +4 -3
  41. data/lib/gruff/renderer/rectangle.rb +3 -2
  42. data/lib/gruff/renderer/renderer.rb +31 -38
  43. data/lib/gruff/renderer/text.rb +39 -9
  44. data/lib/gruff/scatter.rb +30 -44
  45. data/lib/gruff/scene.rb +0 -1
  46. data/lib/gruff/side_bar.rb +60 -45
  47. data/lib/gruff/side_stacked_bar.rb +30 -19
  48. data/lib/gruff/spider.rb +18 -17
  49. data/lib/gruff/stacked_area.rb +8 -7
  50. data/lib/gruff/stacked_bar.rb +28 -18
  51. data/lib/gruff/store/{base_data.rb → basic_data.rb} +9 -7
  52. data/lib/gruff/store/custom_data.rb +8 -6
  53. data/lib/gruff/store/store.rb +6 -5
  54. data/lib/gruff/store/xy_data.rb +10 -7
  55. data/lib/gruff/version.rb +1 -1
  56. metadata +36 -9
  57. data/Rakefile +0 -23
  58. data/docker/Dockerfile +0 -14
  59. data/docker/build.sh +0 -4
  60. data/docker/launch.sh +0 -4
  61. data/lib/gruff/helper/bar_value_label_mixin.rb +0 -30
data/lib/gruff/scene.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'observer'
4
- require 'gruff/base'
5
4
 
6
5
  # A scene is a non-linear graph that assembles layers together to tell a story.
7
6
  # Layers are folders with appropriately named files (see below). You can group
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/base'
4
-
5
3
  # Graph with individual horizontal bars instead of vertical bars.
6
4
  #
7
5
  # Here's how to set up a Gruff::SideBar.
@@ -22,23 +20,29 @@ require 'gruff/base'
22
20
  #
23
21
  class Gruff::SideBar < Gruff::Base
24
22
  # Spacing factor applied between bars.
25
- attr_accessor :bar_spacing
23
+ attr_writer :bar_spacing
26
24
 
27
25
  # Spacing factor applied between a group of bars belonging to the same label.
28
- attr_accessor :group_spacing
26
+ attr_writer :group_spacing
29
27
 
30
- # Set the number output format for labels using sprintf.
28
+ # Set the number output format string or lambda.
31
29
  # Default is +"%.2f"+.
32
- attr_accessor :label_formatting
30
+ attr_writer :label_formatting
33
31
 
34
32
  # Output the values for the bars on a bar graph.
35
33
  # Default is +false+.
36
- attr_accessor :show_labels_for_bar_values
34
+ attr_writer :show_labels_for_bar_values
35
+
36
+ # Prevent drawing of column labels left of a side bar graph. Default is +false+.
37
+ attr_writer :hide_labels
37
38
 
38
39
  def initialize_ivars
39
40
  super
41
+ @bar_spacing = 0.9
42
+ @group_spacing = 10
40
43
  @label_formatting = nil
41
44
  @show_labels_for_bar_values = false
45
+ @hide_labels = false
42
46
  end
43
47
  private :initialize_ivars
44
48
 
@@ -51,20 +55,44 @@ class Gruff::SideBar < Gruff::Base
51
55
  draw_bars
52
56
  end
53
57
 
58
+ # With Side Bars use the data label for the marker value to the left of the bar.
59
+ # @deprecated
60
+ def use_data_label=(_value)
61
+ warn '#use_data_label is deprecated. It is no longer effective.'
62
+ end
63
+
64
+ protected
65
+
66
+ def hide_labels?
67
+ @hide_labels
68
+ end
69
+
70
+ def hide_left_label_area?
71
+ hide_labels?
72
+ end
73
+
74
+ def hide_bottom_label_area?
75
+ @hide_line_markers
76
+ end
77
+
54
78
  private
55
79
 
80
+ # Value to avoid completely overwriting the coordinate axis
81
+ AXIS_MARGIN = 0.5
82
+
56
83
  def draw_bars
57
84
  # Setup spacing.
58
85
  #
59
- @bar_spacing ||= 0.9
60
- @group_spacing ||= 10
61
-
62
86
  bars_width = (@graph_height - calculate_spacing) / column_count.to_f
63
87
  bar_width = bars_width / store.length
64
- height = Array.new(column_count, 0)
65
- length = Array.new(column_count, @graph_left)
66
88
  padding = (bar_width * (1 - @bar_spacing)) / 2
67
89
 
90
+ # Setup the BarConversion Object
91
+ conversion = Gruff::BarConversion.new(
92
+ top: @graph_right, bottom: @graph_left,
93
+ minimum_value: minimum_value, maximum_value: maximum_value, spread: @spread
94
+ )
95
+
68
96
  # if we're a side stacked bar then we don't need to draw ourself at all
69
97
  # because sometimes (due to different heights/min/max) you can actually
70
98
  # see both graphs and it looks like crap
@@ -74,40 +102,27 @@ private
74
102
  data_row.points.each_with_index do |data_point, point_index|
75
103
  group_spacing = @group_spacing * @scale * point_index
76
104
 
77
- # Using the original calcs from the stacked bar chart
78
- # to get the difference between
79
- # part of the bart chart we wish to stack.
80
- temp1 = @graph_left + (@graph_width - data_point * @graph_width - height[point_index])
81
- temp2 = @graph_left + @graph_width - height[point_index]
82
- difference = temp2 - temp1
83
-
84
- left_x = length[point_index] - 1
85
105
  left_y = @graph_top + (bars_width * point_index) + (bar_width * row_index) + padding + group_spacing
86
- right_x = left_x + difference
87
106
  right_y = left_y + bar_width * @bar_spacing
88
107
 
89
- height[point_index] += (data_point * @graph_width)
108
+ left_x, right_x = conversion.get_top_bottom_scaled(data_point).sort
90
109
 
91
110
  rect_renderer = Gruff::Renderer::Rectangle.new(color: data_row.color)
92
- rect_renderer.render(left_x, left_y, right_x, right_y)
111
+ rect_renderer.render(left_x + AXIS_MARGIN, left_y, right_x + AXIS_MARGIN, right_y)
93
112
 
94
113
  # Calculate center based on bar_width and current row
114
+ label_center = left_y + bars_width / 2
95
115
 
96
- if @use_data_label
97
- label_center = left_y + bar_width / 2
98
- draw_label(label_center, row_index, store.norm_data[row_index].label)
99
- else
100
- label_center = left_y + bars_width / 2
101
- draw_label(label_center, point_index)
102
- end
116
+ # Subtract half a bar width to center left if requested
117
+ draw_label(label_center, point_index)
103
118
  if @show_labels_for_bar_values
104
- val = (@label_formatting || '%.2f') % store.data[row_index].points[point_index]
105
- draw_value_label(right_x + 40, right_y - bar_width / 2, val.commify, true)
119
+ bar_value_label = Gruff::BarValueLabel::SideBar.new([left_x, left_y, right_x, right_y], store.data[row_index].points[point_index])
120
+ bar_value_label.prepare_rendering(@label_formatting, bar_width) do |x, y, text|
121
+ draw_value_label(x, y, text, true)
122
+ end
106
123
  end
107
124
  end
108
125
  end
109
-
110
- Gruff::Renderer.finish
111
126
  end
112
127
 
113
128
  # Instead of base class version, draws vertical background lines and label
@@ -115,7 +130,7 @@ private
115
130
  return if @hide_line_markers
116
131
 
117
132
  # Draw horizontal line markers and annotate with numbers
118
- number_of_lines = @marker_count || 5
133
+ number_of_lines = marker_count
119
134
  number_of_lines = 1 if number_of_lines == 0
120
135
 
121
136
  # TODO: Round maximum marker value to a round number like 100, 0.1, 0.5, etc.
@@ -123,13 +138,16 @@ private
123
138
  (0..number_of_lines).each do |index|
124
139
  line_diff = (@graph_right - @graph_left) / number_of_lines
125
140
  x = @graph_right - (line_diff * index) - 1
126
- Gruff::Renderer::Line.new(color: @marker_color).render(x, @graph_bottom, x, @graph_top)
127
- diff = index - number_of_lines
128
- marker_label = diff.abs * increment + minimum_value
141
+
142
+ line_renderer = Gruff::Renderer::Line.new(color: @marker_color, shadow_color: @marker_shadow_color)
143
+ line_renderer.render(x, @graph_bottom, x, @graph_top)
129
144
 
130
145
  unless @hide_line_numbers
131
- text_renderer = Gruff::Renderer::Text.new(marker_label, font: @font, size: @marker_font_size, color: @font_color)
132
- text_renderer.render(0, 0, x, @graph_bottom + (LABEL_MARGIN * 2.0), Magick::CenterGravity)
146
+ diff = index - number_of_lines
147
+ marker_label = BigDecimal(diff.abs.to_s) * BigDecimal(increment.to_s) + BigDecimal(minimum_value.to_s)
148
+ label = x_axis_label(marker_label, @increment)
149
+ text_renderer = Gruff::Renderer::Text.new(label, font: @font, size: @marker_font_size, color: @font_color)
150
+ text_renderer.add_to_render_queue(0, 0, x, @graph_bottom + LABEL_MARGIN, Magick::CenterGravity)
133
151
  end
134
152
  end
135
153
  end
@@ -137,12 +155,9 @@ private
137
155
  ##
138
156
  # Draw on the Y axis instead of the X
139
157
 
140
- def draw_label(y_offset, index, label = nil)
158
+ def draw_label(y_offset, index)
141
159
  draw_unique_label(index) do
142
- lbl = @use_data_label ? label : @labels[index]
143
-
144
- text_renderer = Gruff::Renderer::Text.new(lbl, font: @font, size: @marker_font_size, color: @font_color)
145
- text_renderer.render(@graph_left - LABEL_MARGIN * 2, 1.0, 0.0, y_offset, Magick::EastGravity)
160
+ draw_label_at(@graph_left - LABEL_MARGIN, 1.0, 0.0, y_offset, @labels[index], Magick::EastGravity)
146
161
  end
147
162
  end
148
163
 
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/side_bar'
4
- require 'gruff/helper/stacked_mixin'
5
-
6
3
  #
7
4
  # New gruff graph type added to enable sideways stacking bar charts
8
5
  # (basically looks like a x/y flip of a standard stacking bar chart)
@@ -24,26 +21,31 @@ require 'gruff/helper/stacked_mixin'
24
21
  #
25
22
  class Gruff::SideStackedBar < Gruff::SideBar
26
23
  include StackedMixin
27
- include BarValueLabelMixin
28
24
 
29
25
  # Spacing factor applied between bars.
30
- attr_accessor :bar_spacing
26
+ attr_writer :bar_spacing
31
27
 
32
28
  # Number of pixels between bar segments.
33
- attr_accessor :segment_spacing
29
+ attr_writer :segment_spacing
34
30
 
35
- # Set the number output format for labels using sprintf.
31
+ # Set the number output format string or lambda.
36
32
  # Default is +"%.2f"+.
37
- attr_accessor :label_formatting
33
+ attr_writer :label_formatting
38
34
 
39
35
  # Output the values for the bars on a bar graph.
40
36
  # Default is +false+.
41
- attr_accessor :show_labels_for_bar_values
37
+ attr_writer :show_labels_for_bar_values
38
+
39
+ # Prevent drawing of column labels left of a side stacked bar graph. Default is +false+.
40
+ attr_writer :hide_labels
42
41
 
43
42
  def initialize_ivars
44
43
  super
44
+ @bar_spacing = 0.9
45
+ @segment_spacing = 2.0
45
46
  @label_formatting = nil
46
47
  @show_labels_for_bar_values = false
48
+ @hide_labels = false
47
49
  end
48
50
  private :initialize_ivars
49
51
 
@@ -53,24 +55,35 @@ class Gruff::SideStackedBar < Gruff::SideBar
53
55
  super
54
56
  end
55
57
 
58
+ protected
59
+
60
+ def hide_labels?
61
+ @hide_labels
62
+ end
63
+
64
+ def hide_left_label_area?
65
+ hide_labels?
66
+ end
67
+
68
+ def hide_bottom_label_area?
69
+ @hide_line_markers
70
+ end
71
+
56
72
  private
57
73
 
58
74
  def draw_bars
59
75
  # Setup spacing.
60
76
  #
61
77
  # Columns sit stacked.
62
- @bar_spacing ||= 0.9
63
- @segment_spacing ||= 2.0
64
-
65
78
  bar_width = @graph_height / column_count.to_f
66
79
  height = Array.new(column_count, 0)
67
80
  length = Array.new(column_count, @graph_left)
68
81
  padding = (bar_width * (1 - @bar_spacing)) / 2
69
- bar_value_label = BarValueLabel.new(column_count, bar_width)
82
+ stack_bar_value_label = Gruff::BarValueLabel::StackedBar.new
70
83
 
71
84
  store.norm_data.each_with_index do |data_row, row_index|
72
85
  data_row.points.each_with_index do |data_point, point_index|
73
- ## using the original calcs from the stacked bar chart to get the difference between
86
+ ## using the original calculations from the stacked bar chart to get the difference between
74
87
  ## part of the bart chart we wish to stack.
75
88
  temp1 = @graph_left + (@graph_width -
76
89
  data_point * @graph_width -
@@ -85,8 +98,8 @@ private
85
98
  length[point_index] += difference
86
99
  height[point_index] += (data_point * @graph_width - 2)
87
100
 
88
- bar_value_label.coordinates[point_index] = [left_x, left_y, right_x, right_y]
89
- bar_value_label.values[point_index] += store.data[row_index].points[point_index]
101
+ bar_value_label = Gruff::BarValueLabel::SideBar.new([left_x, left_y, right_x, right_y], store.data[row_index].points[point_index])
102
+ stack_bar_value_label.add(bar_value_label, point_index)
90
103
 
91
104
  # if a data point is 0 it can result in weird really thing lines
92
105
  # that shouldn't even be there being drawn on top of the existing
@@ -104,11 +117,9 @@ private
104
117
  end
105
118
 
106
119
  if @show_labels_for_bar_values
107
- bar_value_label.prepare_sidebar_rendering(@label_formatting) do |x, y, text|
120
+ stack_bar_value_label.prepare_rendering(@label_formatting, bar_width) do |x, y, text|
108
121
  draw_value_label(x, y, text, true)
109
122
  end
110
123
  end
111
-
112
- Gruff::Renderer.finish
113
124
  end
114
125
  end
data/lib/gruff/spider.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/base'
4
-
5
3
  # Experimental!!! See also the Net graph.
6
4
  #
7
5
  # Here's how to set up a Gruff::Spider.
@@ -15,13 +13,11 @@ require 'gruff/base'
15
13
  # g.data :Wisdom, [10]
16
14
  # g.data 'Charisma', [16]
17
15
  # g.write("spider.png")
18
-
16
+ #
19
17
  class Gruff::Spider < Gruff::Base
20
18
  # Hide all text.
21
- attr_reader :hide_text
22
- attr_accessor :hide_axes
23
- attr_reader :transparent_background
24
- attr_accessor :rotation
19
+ attr_writer :hide_axes
20
+ attr_writer :rotation
25
21
 
26
22
  def transparent_background=(value)
27
23
  Gruff::Renderer.setup_transparent_background(@columns, @rows) if value
@@ -34,9 +30,16 @@ class Gruff::Spider < Gruff::Base
34
30
  def initialize(max_value, target_width = 800)
35
31
  super(target_width)
36
32
  @max_value = max_value
33
+ end
34
+
35
+ def initialize_ivars
36
+ super
37
37
  @hide_legend = true
38
+ @hide_axes = false
39
+ @hide_text = false
38
40
  @rotation = 0
39
41
  end
42
+ private :initialize_ivars
40
43
 
41
44
  def draw
42
45
  @hide_line_markers = true
@@ -55,12 +58,10 @@ class Gruff::Spider < Gruff::Base
55
58
  additive_angle = (2 * Math::PI) / store.length
56
59
 
57
60
  # Draw axes
58
- draw_axes(center_x, center_y, radius, additive_angle) unless hide_axes
61
+ draw_axes(center_x, center_y, radius, additive_angle) unless @hide_axes
59
62
 
60
63
  # Draw polygon
61
64
  draw_polygon(center_x, center_y, additive_angle)
62
-
63
- Gruff::Renderer.finish
64
65
  end
65
66
 
66
67
  private
@@ -77,14 +78,14 @@ private
77
78
  y = y_offset + ((radius + r_offset) * Math.sin(angle))
78
79
 
79
80
  # Draw label
80
- text_renderer = Gruff::Renderer::Text.new(amount, font: @font, size: legend_font_size, color: @marker_color, weight: Magick::BoldWeight)
81
- text_renderer.render(0, 0, x, y, Magick::CenterGravity)
81
+ text_renderer = Gruff::Renderer::Text.new(amount, font: @font, size: @legend_font_size, color: @marker_color, weight: Magick::BoldWeight)
82
+ text_renderer.add_to_render_queue(0, 0, x, y, Magick::CenterGravity)
82
83
  end
83
84
 
84
85
  def draw_axes(center_x, center_y, radius, additive_angle, line_color = nil)
85
- return if hide_axes
86
+ return if @hide_axes
86
87
 
87
- current_angle = rotation * Math::PI / 180.0
88
+ current_angle = @rotation * Math::PI / 180.0
88
89
 
89
90
  store.data.each do |data_row|
90
91
  x_offset = radius * Math.cos(current_angle)
@@ -93,7 +94,7 @@ private
93
94
  Gruff::Renderer::Line.new(color: line_color || data_row.color, width: 5.0)
94
95
  .render(center_x, center_y, center_x + x_offset, center_y + y_offset)
95
96
 
96
- draw_label(center_x, center_y, current_angle, radius, data_row.label.to_s) unless hide_text
97
+ draw_label(center_x, center_y, current_angle, radius, data_row.label.to_s) unless @hide_text
97
98
 
98
99
  current_angle += additive_angle
99
100
  end
@@ -101,7 +102,7 @@ private
101
102
 
102
103
  def draw_polygon(center_x, center_y, additive_angle, color = nil)
103
104
  points = []
104
- current_angle = rotation * Math::PI / 180.0
105
+ current_angle = @rotation * Math::PI / 180.0
105
106
 
106
107
  store.data.each do |data_row|
107
108
  points << center_x + normalize_points(data_row.points.first) * Math.cos(current_angle)
@@ -113,6 +114,6 @@ private
113
114
  end
114
115
 
115
116
  def sums_for_spider
116
- store.data.reduce(0.0) { |sum, data_row| sum + data_row.points.first }
117
+ store.data.sum { |data_row| data_row.points.first }
117
118
  end
118
119
  end
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/base'
4
- require 'gruff/helper/stacked_mixin'
5
-
6
3
  #
7
4
  # Here's how to set up a Gruff::StackedArea.
8
5
  #
@@ -15,7 +12,13 @@ require 'gruff/helper/stacked_mixin'
15
12
  #
16
13
  class Gruff::StackedArea < Gruff::Base
17
14
  include StackedMixin
18
- attr_accessor :last_series_goes_on_bottom
15
+ attr_writer :last_series_goes_on_bottom
16
+
17
+ def initialize_ivars
18
+ super
19
+ @last_series_goes_on_bottom = false
20
+ end
21
+ private :initialize_ivars
19
22
 
20
23
  def draw
21
24
  calculate_maximum_by_stack
@@ -28,7 +31,7 @@ class Gruff::StackedArea < Gruff::Base
28
31
  height = Array.new(column_count, 0)
29
32
 
30
33
  data_points = nil
31
- iterator = last_series_goes_on_bottom ? :reverse_each : :each
34
+ iterator = @last_series_goes_on_bottom ? :reverse_each : :each
32
35
  store.norm_data.public_send(iterator) do |data_row|
33
36
  prev_data_points = data_points
34
37
  data_points = []
@@ -63,7 +66,5 @@ class Gruff::StackedArea < Gruff::Base
63
66
 
64
67
  Gruff::Renderer::Polygon.new(color: data_row.color).render(poly_points)
65
68
  end
66
-
67
- Gruff::Renderer.finish
68
69
  end
69
70
  end
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gruff/base'
4
- require 'gruff/helper/stacked_mixin'
5
- require 'gruff/helper/bar_value_label_mixin'
6
-
7
3
  #
8
4
  # Here's how to set up a Gruff::StackedBar.
9
5
  #
@@ -16,26 +12,31 @@ require 'gruff/helper/bar_value_label_mixin'
16
12
  #
17
13
  class Gruff::StackedBar < Gruff::Base
18
14
  include StackedMixin
19
- include BarValueLabelMixin
20
15
 
21
16
  # Spacing factor applied between bars.
22
- attr_accessor :bar_spacing
17
+ attr_writer :bar_spacing
23
18
 
24
19
  # Number of pixels between bar segments.
25
- attr_accessor :segment_spacing
20
+ attr_writer :segment_spacing
26
21
 
27
- # Set the number output format for labels using sprintf.
22
+ # Set the number output format string or lambda.
28
23
  # Default is +"%.2f"+.
29
- attr_accessor :label_formatting
24
+ attr_writer :label_formatting
30
25
 
31
26
  # Output the values for the bars on a bar graph.
32
27
  # Default is +false+.
33
- attr_accessor :show_labels_for_bar_values
28
+ attr_writer :show_labels_for_bar_values
29
+
30
+ # Prevent drawing of column labels below a stacked bar graph. Default is +false+.
31
+ attr_writer :hide_labels
34
32
 
35
33
  def initialize_ivars
36
34
  super
35
+ @bar_spacing = 0.9
36
+ @segment_spacing = 2
37
37
  @label_formatting = nil
38
38
  @show_labels_for_bar_values = false
39
+ @hide_labels = false
39
40
  end
40
41
  private :initialize_ivars
41
42
 
@@ -48,14 +49,11 @@ class Gruff::StackedBar < Gruff::Base
48
49
  # Setup spacing.
49
50
  #
50
51
  # Columns sit stacked.
51
- @bar_spacing ||= 0.9
52
- @segment_spacing ||= 2
53
-
54
52
  bar_width = @graph_width / column_count.to_f
55
53
  padding = (bar_width * (1 - @bar_spacing)) / 2
56
54
 
57
55
  height = Array.new(column_count, 0)
58
- bar_value_label = BarValueLabel.new(column_count, bar_width)
56
+ stack_bar_value_label = Gruff::BarValueLabel::StackedBar.new
59
57
 
60
58
  store.norm_data.each_with_index do |data_row, row_index|
61
59
  data_row.points.each_with_index do |data_point, point_index|
@@ -79,17 +77,29 @@ class Gruff::StackedBar < Gruff::Base
79
77
  label_center = left_x + bar_width * @bar_spacing / 2.0
80
78
  draw_label(label_center, point_index)
81
79
 
82
- bar_value_label.coordinates[point_index] = [left_x, left_y, right_x, right_y]
83
- bar_value_label.values[point_index] += store.data[row_index].points[point_index]
80
+ bar_value_label = Gruff::BarValueLabel::Bar.new([left_x, left_y, right_x, right_y], store.data[row_index].points[point_index])
81
+ stack_bar_value_label.add(bar_value_label, point_index)
84
82
  end
85
83
  end
86
84
 
87
85
  if @show_labels_for_bar_values
88
- bar_value_label.prepare_rendering(@label_formatting) do |x, y, text|
86
+ stack_bar_value_label.prepare_rendering(@label_formatting, bar_width) do |x, y, text|
89
87
  draw_value_label(x, y, text, true)
90
88
  end
91
89
  end
90
+ end
91
+
92
+ protected
93
+
94
+ def hide_labels?
95
+ @hide_labels
96
+ end
97
+
98
+ def hide_left_label_area?
99
+ @hide_line_markers
100
+ end
92
101
 
93
- Gruff::Renderer.finish
102
+ def hide_bottom_label_area?
103
+ hide_labels?
94
104
  end
95
105
  end