gruff 0.13.0-java → 0.14.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +66 -0
- data/.rubocop.yml +6 -10
- data/.rubocop_todo.yml +19 -85
- data/CHANGELOG.md +10 -0
- data/README.md +6 -7
- data/gruff.gemspec +2 -4
- data/lib/gruff.rb +1 -0
- data/lib/gruff/accumulator_bar.rb +3 -1
- data/lib/gruff/area.rb +5 -8
- data/lib/gruff/bar.rb +19 -23
- data/lib/gruff/base.rb +134 -96
- data/lib/gruff/bezier.rb +4 -6
- data/lib/gruff/bullet.rb +11 -10
- data/lib/gruff/dot.rb +10 -10
- data/lib/gruff/font.rb +39 -0
- data/lib/gruff/helper/stacked_mixin.rb +1 -2
- data/lib/gruff/histogram.rb +9 -7
- data/lib/gruff/line.rb +55 -46
- data/lib/gruff/mini/bar.rb +9 -6
- data/lib/gruff/mini/legend.rb +12 -8
- data/lib/gruff/mini/pie.rb +9 -6
- data/lib/gruff/mini/side_bar.rb +9 -6
- data/lib/gruff/net.rb +9 -15
- data/lib/gruff/patch/string.rb +1 -1
- data/lib/gruff/pie.rb +23 -65
- data/lib/gruff/renderer/bezier.rb +8 -9
- data/lib/gruff/renderer/circle.rb +8 -9
- data/lib/gruff/renderer/dash_line.rb +9 -10
- data/lib/gruff/renderer/dot.rb +13 -14
- data/lib/gruff/renderer/ellipse.rb +8 -9
- data/lib/gruff/renderer/line.rb +8 -9
- data/lib/gruff/renderer/polygon.rb +9 -10
- data/lib/gruff/renderer/polyline.rb +8 -9
- data/lib/gruff/renderer/rectangle.rb +7 -8
- data/lib/gruff/renderer/renderer.rb +21 -36
- data/lib/gruff/renderer/text.rb +21 -37
- data/lib/gruff/scatter.rb +41 -46
- data/lib/gruff/scene.rb +15 -13
- data/lib/gruff/side_bar.rb +14 -30
- data/lib/gruff/side_stacked_bar.rb +8 -11
- data/lib/gruff/spider.rb +11 -16
- data/lib/gruff/stacked_area.rb +10 -11
- data/lib/gruff/stacked_bar.rb +9 -9
- data/lib/gruff/store/store.rb +6 -10
- data/lib/gruff/themes.rb +6 -6
- data/lib/gruff/version.rb +1 -1
- data/rails_generators/gruff/templates/controller.rb +1 -1
- metadata +4 -21
- data/.travis.yml +0 -23
- data/assets/plastik/blue.png +0 -0
- data/assets/plastik/green.png +0 -0
- data/assets/plastik/red.png +0 -0
- data/lib/gruff/photo_bar.rb +0 -93
data/lib/gruff/bezier.rb
CHANGED
@@ -19,11 +19,9 @@
|
|
19
19
|
# g.write('bezier.png')
|
20
20
|
#
|
21
21
|
class Gruff::Bezier < Gruff::Base
|
22
|
-
|
23
|
-
super
|
24
|
-
|
25
|
-
return unless data_given?
|
22
|
+
private
|
26
23
|
|
24
|
+
def draw_graph
|
27
25
|
x_increment = @graph_width / (column_count - 1).to_f
|
28
26
|
|
29
27
|
store.norm_data.each do |data_row|
|
@@ -48,9 +46,9 @@ class Gruff::Bezier < Gruff::Base
|
|
48
46
|
stroke_width = clip_value_if_greater_than(@columns / (store.norm_data.first[1].size * 4), 5.0)
|
49
47
|
|
50
48
|
if RUBY_PLATFORM == 'java'
|
51
|
-
Gruff::Renderer::Polyline.new(color: data_row.color, width: stroke_width).render(poly_points)
|
49
|
+
Gruff::Renderer::Polyline.new(renderer, color: data_row.color, width: stroke_width).render(poly_points)
|
52
50
|
else
|
53
|
-
Gruff::Renderer::Bezier.new(color: data_row.color, width: stroke_width).render(poly_points)
|
51
|
+
Gruff::Renderer::Bezier.new(renderer, color: data_row.color, width: stroke_width).render(poly_points)
|
54
52
|
end
|
55
53
|
end
|
56
54
|
end
|
data/lib/gruff/bullet.rb
CHANGED
@@ -27,12 +27,13 @@ class Gruff::Bullet < Gruff::Base
|
|
27
27
|
self.theme = Gruff::Themes::GREYSCALE
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def initialize_attributes
|
31
31
|
super
|
32
32
|
|
33
|
-
@
|
33
|
+
@title_font.size = 20
|
34
|
+
@title_font.bold = false
|
34
35
|
end
|
35
|
-
private :
|
36
|
+
private :initialize_attributes
|
36
37
|
|
37
38
|
def data(value, maximum_value, options = {})
|
38
39
|
@value = value.to_f
|
@@ -51,7 +52,7 @@ class Gruff::Bullet < Gruff::Base
|
|
51
52
|
|
52
53
|
draw_title
|
53
54
|
|
54
|
-
title_width = calculate_width(@
|
55
|
+
title_width = calculate_width(@title_font, @title)
|
55
56
|
margin = 30.0
|
56
57
|
thickness = @raw_rows / 6.0
|
57
58
|
right_margin = margin
|
@@ -60,7 +61,7 @@ class Gruff::Bullet < Gruff::Base
|
|
60
61
|
graph_height = thickness * 3.0
|
61
62
|
|
62
63
|
# Background
|
63
|
-
rect_renderer = Gruff::Renderer::Rectangle.new(color: @colors[0])
|
64
|
+
rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: @colors[0])
|
64
65
|
rect_renderer.render(graph_left, 0, graph_left + graph_width, graph_height)
|
65
66
|
|
66
67
|
[:high, :low].each_with_index do |indicator, index|
|
@@ -68,7 +69,7 @@ class Gruff::Bullet < Gruff::Base
|
|
68
69
|
|
69
70
|
indicator_width_x = graph_left + graph_width * (@options[indicator] / maximum_value)
|
70
71
|
|
71
|
-
rect_renderer = Gruff::Renderer::Rectangle.new(color: @colors[index + 1])
|
72
|
+
rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: @colors[index + 1])
|
72
73
|
rect_renderer.render(graph_left, 0, indicator_width_x, graph_height)
|
73
74
|
end
|
74
75
|
|
@@ -76,12 +77,12 @@ class Gruff::Bullet < Gruff::Base
|
|
76
77
|
target_x = graph_left + graph_width * (@options[:target] / maximum_value)
|
77
78
|
half_thickness = thickness / 2.0
|
78
79
|
|
79
|
-
rect_renderer = Gruff::Renderer::Rectangle.new(color: @
|
80
|
+
rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: @marker_color)
|
80
81
|
rect_renderer.render(target_x, half_thickness, target_x + half_thickness, thickness * 2 + half_thickness)
|
81
82
|
end
|
82
83
|
|
83
84
|
# Value
|
84
|
-
rect_renderer = Gruff::Renderer::Rectangle.new(color: @
|
85
|
+
rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: @marker_color)
|
85
86
|
rect_renderer.render(graph_left, thickness, graph_left + graph_width * (@value / maximum_value), thickness * 2)
|
86
87
|
end
|
87
88
|
|
@@ -90,9 +91,9 @@ private
|
|
90
91
|
def draw_title
|
91
92
|
return if hide_title?
|
92
93
|
|
93
|
-
font_height = calculate_caps_height(
|
94
|
+
font_height = calculate_caps_height(@title_font)
|
94
95
|
|
95
|
-
text_renderer = Gruff::Renderer::Text.new(@title, font: @
|
96
|
+
text_renderer = Gruff::Renderer::Text.new(renderer, @title, font: @title_font)
|
96
97
|
text_renderer.add_to_render_queue(1.0, 1.0, font_height / 2, font_height / 2, Magick::NorthWestGravity)
|
97
98
|
end
|
98
99
|
end
|
data/lib/gruff/dot.rb
CHANGED
@@ -14,12 +14,14 @@
|
|
14
14
|
# g.write('dot.png')
|
15
15
|
#
|
16
16
|
class Gruff::Dot < Gruff::Base
|
17
|
-
|
18
|
-
@has_left_labels = true
|
19
|
-
super
|
17
|
+
private
|
20
18
|
|
21
|
-
|
19
|
+
def initialize_attributes
|
20
|
+
super
|
21
|
+
@has_left_labels = true
|
22
|
+
end
|
22
23
|
|
24
|
+
def draw_graph
|
23
25
|
# Setup spacing.
|
24
26
|
#
|
25
27
|
spacing_factor = 1.0
|
@@ -34,18 +36,16 @@ class Gruff::Dot < Gruff::Base
|
|
34
36
|
y_pos = @graph_top + (items_width * point_index) + padding + (items_width.to_f / 2.0).round
|
35
37
|
|
36
38
|
if row_index == 0
|
37
|
-
Gruff::Renderer::Line.new(color: @marker_color).render(@graph_left, y_pos, @graph_left + @graph_width, y_pos)
|
39
|
+
Gruff::Renderer::Line.new(renderer, color: @marker_color).render(@graph_left, y_pos, @graph_left + @graph_width, y_pos)
|
38
40
|
end
|
39
41
|
|
40
|
-
Gruff::Renderer::Circle.new(color: data_row.color).render(x_pos, y_pos, x_pos + (item_width.to_f / 3.0).round, y_pos)
|
42
|
+
Gruff::Renderer::Circle.new(renderer, color: data_row.color).render(x_pos, y_pos, x_pos + (item_width.to_f / 3.0).round, y_pos)
|
41
43
|
|
42
44
|
draw_label(y_pos, point_index)
|
43
45
|
end
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
|
-
protected
|
48
|
-
|
49
49
|
# Instead of base class version, draws vertical background lines and label
|
50
50
|
def draw_line_markers
|
51
51
|
return if @hide_line_markers
|
@@ -54,12 +54,12 @@ protected
|
|
54
54
|
marker_label = BigDecimal(index.to_s) * BigDecimal(@increment.to_s) + BigDecimal(minimum_value.to_s)
|
55
55
|
x = @graph_left + (marker_label - minimum_value) * @graph_width / @spread
|
56
56
|
|
57
|
-
line_renderer = Gruff::Renderer::Line.new(color: @marker_color, shadow_color: @marker_shadow_color)
|
57
|
+
line_renderer = Gruff::Renderer::Line.new(renderer, color: @marker_color, shadow_color: @marker_shadow_color)
|
58
58
|
line_renderer.render(x, @graph_bottom, x, @graph_bottom + 5)
|
59
59
|
|
60
60
|
unless @hide_line_numbers
|
61
61
|
label = y_axis_label(marker_label, @increment)
|
62
|
-
text_renderer = Gruff::Renderer::Text.new(label, font: @
|
62
|
+
text_renderer = Gruff::Renderer::Text.new(renderer, label, font: @marker_font)
|
63
63
|
text_renderer.add_to_render_queue(0, 0, x, @graph_bottom + (LABEL_MARGIN * 1.5), Magick::CenterGravity)
|
64
64
|
end
|
65
65
|
end
|
data/lib/gruff/font.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Handle font setting to draw texts
|
4
|
+
class Gruff::Font
|
5
|
+
BOLD_PATH = File.expand_path(File.join(__FILE__, '../../../assets/fonts/Roboto-Bold.ttf')).freeze
|
6
|
+
REGULAR_PATH = File.expand_path(File.join(__FILE__, '../../../assets/fonts/Roboto-Regular.ttf')).freeze
|
7
|
+
|
8
|
+
# Get/set font path.
|
9
|
+
attr_accessor :path
|
10
|
+
|
11
|
+
# Get/set font size.
|
12
|
+
attr_accessor :size
|
13
|
+
|
14
|
+
# Get/set font setting whether render bold text.
|
15
|
+
attr_accessor :bold
|
16
|
+
|
17
|
+
# Get/set font color.
|
18
|
+
attr_accessor :color
|
19
|
+
|
20
|
+
def initialize(path: nil, size: 20.0, bold: false, color: 'white')
|
21
|
+
@path = path
|
22
|
+
@bold = bold
|
23
|
+
@size = size
|
24
|
+
@color = color
|
25
|
+
end
|
26
|
+
|
27
|
+
# Get font weight.
|
28
|
+
# @return [Magick::WeightType] font weight
|
29
|
+
def weight
|
30
|
+
@bold ? Magick::BoldWeight : Magick::NormalWeight
|
31
|
+
end
|
32
|
+
|
33
|
+
# @private
|
34
|
+
def file_path
|
35
|
+
return @path if @path
|
36
|
+
|
37
|
+
@bold ? BOLD_PATH : REGULAR_PATH
|
38
|
+
end
|
39
|
+
end
|
@@ -7,10 +7,9 @@ module Gruff::Base::StackedMixin
|
|
7
7
|
# tsal: moved from Base 03 FEB 2007
|
8
8
|
def calculate_maximum_by_stack
|
9
9
|
# Get sum of each stack
|
10
|
-
max_hash = {}
|
10
|
+
max_hash = Hash.new { |h, k| h[k] = 0.0 }
|
11
11
|
store.data.each do |data_set|
|
12
12
|
data_set.points.each_with_index do |data_point, i|
|
13
|
-
max_hash[i] = 0.0 unless max_hash[i]
|
14
13
|
max_hash[i] += data_point.to_f
|
15
14
|
end
|
16
15
|
end
|
data/lib/gruff/histogram.rb
CHANGED
@@ -28,19 +28,21 @@ class Gruff::Histogram < Gruff::Bar
|
|
28
28
|
@data = []
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
31
|
+
def data(name, data_points = [], color = nil)
|
32
|
+
@data << [name, data_points, color]
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def initialize_attributes
|
32
38
|
super
|
33
39
|
@bin_width = 10
|
34
40
|
@minimum_bin = nil
|
35
41
|
@maximum_bin = nil
|
36
42
|
end
|
37
|
-
private :
|
38
|
-
|
39
|
-
def data(name, data_points = [], color = nil)
|
40
|
-
@data << [name, data_points, color]
|
41
|
-
end
|
43
|
+
private :initialize_attributes
|
42
44
|
|
43
|
-
def
|
45
|
+
def setup_data
|
44
46
|
@data.each do |(name, data_points, color)|
|
45
47
|
bins, freqs = HistogramArray.new(data_points).histogram(bin_width: @bin_width, min: @minimum_bin, max: @maximum_bin)
|
46
48
|
bins.each_with_index do |bin, index|
|
data/lib/gruff/line.rb
CHANGED
@@ -37,6 +37,9 @@ class Gruff::Line < Gruff::Base
|
|
37
37
|
# accessors for support of xy data.
|
38
38
|
attr_writer :maximum_x_value
|
39
39
|
|
40
|
+
# The number of vertical lines shown.
|
41
|
+
attr_writer :marker_x_count
|
42
|
+
|
40
43
|
# Get the value if somebody has defined it.
|
41
44
|
def baseline_value
|
42
45
|
if @reference_lines.key?(:baseline)
|
@@ -78,29 +81,6 @@ class Gruff::Line < Gruff::Base
|
|
78
81
|
end
|
79
82
|
end
|
80
83
|
|
81
|
-
def initialize_store
|
82
|
-
@store = Gruff::Store.new(Gruff::Store::XYData)
|
83
|
-
end
|
84
|
-
private :initialize_store
|
85
|
-
|
86
|
-
def initialize_ivars
|
87
|
-
super
|
88
|
-
@reference_lines = {}
|
89
|
-
@reference_line_default_color = 'red'
|
90
|
-
@reference_line_default_width = 5
|
91
|
-
|
92
|
-
@hide_dots = @hide_lines = false
|
93
|
-
@maximum_x_value = nil
|
94
|
-
@minimum_x_value = nil
|
95
|
-
|
96
|
-
@line_width = nil
|
97
|
-
@dot_radius = nil
|
98
|
-
@dot_style = 'circle'
|
99
|
-
|
100
|
-
@show_vertical_markers = false
|
101
|
-
end
|
102
|
-
private :initialize_ivars
|
103
|
-
|
104
84
|
# This method allows one to plot a dataset with both X and Y data.
|
105
85
|
#
|
106
86
|
# @overload dataxy(name, x_data_points = [], y_data_points = [], color = nil)
|
@@ -152,10 +132,34 @@ class Gruff::Line < Gruff::Base
|
|
152
132
|
store.add(name, y_data_points, color, x_data_points)
|
153
133
|
end
|
154
134
|
|
135
|
+
private
|
136
|
+
|
137
|
+
def initialize_store
|
138
|
+
@store = Gruff::Store.new(Gruff::Store::XYData)
|
139
|
+
end
|
140
|
+
|
141
|
+
def initialize_attributes
|
142
|
+
super
|
143
|
+
@reference_lines = {}
|
144
|
+
@reference_line_default_color = 'red'
|
145
|
+
@reference_line_default_width = 5
|
146
|
+
|
147
|
+
@hide_dots = @hide_lines = false
|
148
|
+
@maximum_x_value = nil
|
149
|
+
@minimum_x_value = nil
|
150
|
+
@marker_x_count = nil
|
151
|
+
|
152
|
+
@line_width = nil
|
153
|
+
@dot_radius = nil
|
154
|
+
@dot_style = 'circle'
|
155
|
+
|
156
|
+
@show_vertical_markers = false
|
157
|
+
end
|
158
|
+
|
155
159
|
def draw_reference_line(reference_line, left, right, top, bottom)
|
156
160
|
color = reference_line[:color] || @reference_line_default_color
|
157
161
|
width = reference_line[:width] || @reference_line_default_width
|
158
|
-
Gruff::Renderer::DashLine.new(color: color, width: width).render(left, top, right, bottom)
|
162
|
+
Gruff::Renderer::DashLine.new(renderer, color: color, width: width).render(left, top, right, bottom)
|
159
163
|
end
|
160
164
|
|
161
165
|
def draw_horizontal_reference_line(reference_line)
|
@@ -168,11 +172,7 @@ class Gruff::Line < Gruff::Base
|
|
168
172
|
draw_reference_line(reference_line, index, index, @graph_top, @graph_top + @graph_height)
|
169
173
|
end
|
170
174
|
|
171
|
-
def
|
172
|
-
super
|
173
|
-
|
174
|
-
return unless data_given?
|
175
|
-
|
175
|
+
def draw_graph
|
176
176
|
# Check to see if more than one datapoint was given. NaN can result otherwise.
|
177
177
|
@x_increment = (column_count > 1) ? (@graph_width / (column_count - 1).to_f) : @graph_width
|
178
178
|
|
@@ -181,18 +181,6 @@ class Gruff::Line < Gruff::Base
|
|
181
181
|
draw_vertical_reference_line(curr_reference_line) if curr_reference_line.key?(:index)
|
182
182
|
end
|
183
183
|
|
184
|
-
if @show_vertical_markers
|
185
|
-
(0..column_count).each do |column|
|
186
|
-
x = @graph_left + @graph_width - column.to_f * @x_increment
|
187
|
-
|
188
|
-
Gruff::Renderer::Line.new(color: @marker_color).render(x, @graph_bottom, x, @graph_top)
|
189
|
-
#If the user specified a marker shadow color, draw a shadow just below it
|
190
|
-
if @marker_shadow_color
|
191
|
-
Gruff::Renderer::Line.new(color: @marker_shadow_color).render(x + 1, @graph_bottom, x + 1, @graph_top)
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
184
|
store.norm_data.each do |data_row|
|
197
185
|
prev_x = prev_y = nil
|
198
186
|
|
@@ -200,7 +188,7 @@ class Gruff::Line < Gruff::Base
|
|
200
188
|
|
201
189
|
data_row.coordinates.each_with_index do |(x_data, y_data), index|
|
202
190
|
if x_data.nil?
|
203
|
-
#use the old method: equally spaced points along the x-axis
|
191
|
+
# use the old method: equally spaced points along the x-axis
|
204
192
|
new_x = @graph_left + (@x_increment * index)
|
205
193
|
draw_label(new_x, index)
|
206
194
|
else
|
@@ -221,12 +209,12 @@ class Gruff::Line < Gruff::Base
|
|
221
209
|
circle_radius = @dot_radius || clip_value_if_greater_than(@columns / (store.norm_data.first.y_points.size * 2.5), 5.0)
|
222
210
|
|
223
211
|
if !@hide_lines && prev_x && prev_y
|
224
|
-
Gruff::Renderer::Line.new(color: data_row.color, width: stroke_width)
|
212
|
+
Gruff::Renderer::Line.new(renderer, color: data_row.color, width: stroke_width)
|
225
213
|
.render(prev_x, prev_y, new_x, new_y)
|
226
214
|
end
|
227
215
|
|
228
216
|
if one_point || !@hide_dots
|
229
|
-
Gruff::Renderer::Dot.new(@dot_style, color: data_row.color, width: stroke_width).render(new_x, new_y, circle_radius)
|
217
|
+
Gruff::Renderer::Dot.new(renderer, @dot_style, color: data_row.color, width: stroke_width).render(new_x, new_y, circle_radius)
|
230
218
|
end
|
231
219
|
|
232
220
|
prev_x = new_x
|
@@ -235,8 +223,6 @@ class Gruff::Line < Gruff::Base
|
|
235
223
|
end
|
236
224
|
end
|
237
225
|
|
238
|
-
private
|
239
|
-
|
240
226
|
def setup_data
|
241
227
|
# Update the global min/max values for the x data
|
242
228
|
@maximum_x_value ||= store.max_x
|
@@ -259,6 +245,11 @@ private
|
|
259
245
|
super
|
260
246
|
end
|
261
247
|
|
248
|
+
def setup_drawing
|
249
|
+
@marker_x_count ||= column_count - 1
|
250
|
+
super
|
251
|
+
end
|
252
|
+
|
262
253
|
def normalize
|
263
254
|
return unless data_given?
|
264
255
|
|
@@ -277,6 +268,24 @@ private
|
|
277
268
|
super unless store.data.any?(&:x_points)
|
278
269
|
end
|
279
270
|
|
271
|
+
def draw_line_markers
|
272
|
+
# do all of the stuff for the horizontal lines on the y-axis
|
273
|
+
super
|
274
|
+
return if @hide_line_markers
|
275
|
+
|
276
|
+
(0..@marker_x_count).each do |index|
|
277
|
+
if @show_vertical_markers
|
278
|
+
x = @graph_left + @graph_width - index * @graph_width / @marker_x_count
|
279
|
+
|
280
|
+
Gruff::Renderer::Line.new(renderer, color: @marker_color).render(x, @graph_bottom, x, @graph_top)
|
281
|
+
# If the user specified a marker shadow color, draw a shadow just below it
|
282
|
+
if @marker_shadow_color
|
283
|
+
Gruff::Renderer::Line.new(renderer, color: @marker_shadow_color).render(x + 1, @graph_bottom, x + 1, @graph_top)
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
280
289
|
def get_x_coord(x_data_point, width, offset)
|
281
290
|
x_data_point * width + offset
|
282
291
|
end
|
data/lib/gruff/mini/bar.rb
CHANGED
@@ -16,27 +16,30 @@ module Gruff
|
|
16
16
|
module Mini
|
17
17
|
# A class for drawing a small bar graph.
|
18
18
|
class Bar < Gruff::Bar
|
19
|
+
private
|
20
|
+
|
19
21
|
include Gruff::Mini::Legend
|
20
22
|
|
21
|
-
def
|
23
|
+
def initialize_attributes
|
22
24
|
super
|
23
25
|
|
24
26
|
@hide_legend = true
|
25
27
|
@hide_title = true
|
26
28
|
@hide_line_numbers = true
|
27
29
|
|
28
|
-
@
|
29
|
-
@
|
30
|
+
@marker_font.size = 50.0
|
31
|
+
@legend_font.size = 60.0
|
30
32
|
|
31
33
|
@minimum_value = 0.0
|
32
34
|
end
|
33
|
-
private :initialize_ivars
|
34
35
|
|
35
|
-
def
|
36
|
+
def setup_data
|
36
37
|
expand_canvas_for_vertical_legend
|
37
|
-
|
38
38
|
super
|
39
|
+
end
|
39
40
|
|
41
|
+
def draw_graph
|
42
|
+
super
|
40
43
|
draw_vertical_legend
|
41
44
|
end
|
42
45
|
end
|
data/lib/gruff/mini/legend.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
module Gruff
|
4
4
|
module Mini
|
5
5
|
# A module to handle the small legend.
|
6
|
+
# @private
|
6
7
|
module Legend
|
7
8
|
attr_accessor :hide_mini_legend, :legend_position
|
8
9
|
|
@@ -30,18 +31,20 @@ module Gruff
|
|
30
31
|
@rows = [@rows, legend_height].max
|
31
32
|
@columns += calculate_legend_width + @left_margin
|
32
33
|
else
|
33
|
-
|
34
|
+
font = @legend_font.dup
|
35
|
+
font.size = scale_fontsize(font.size)
|
36
|
+
@rows += store.length * calculate_caps_height(font) * 1.7
|
34
37
|
end
|
35
38
|
|
36
|
-
Gruff::Renderer.
|
39
|
+
@renderer = Gruff::Renderer.new(@columns, @rows, @scale, @theme_options)
|
37
40
|
end
|
38
41
|
|
39
42
|
def calculate_line_height
|
40
|
-
calculate_caps_height(@
|
43
|
+
calculate_caps_height(@legend_font) * 1.7
|
41
44
|
end
|
42
45
|
|
43
46
|
def calculate_legend_width
|
44
|
-
width = @legend_labels.map { |label| calculate_width(@
|
47
|
+
width = @legend_labels.map { |label| calculate_width(@legend_font, label) }.max
|
45
48
|
scale_fontsize(width + 40 * 1.7)
|
46
49
|
end
|
47
50
|
|
@@ -67,12 +70,12 @@ module Gruff
|
|
67
70
|
@legend_labels.each_with_index do |legend_label, index|
|
68
71
|
# Draw label
|
69
72
|
label = truncate_legend_label(legend_label)
|
70
|
-
text_renderer = Gruff::Renderer::Text.new(label, font: @
|
73
|
+
text_renderer = Gruff::Renderer::Text.new(renderer, label, font: @legend_font)
|
71
74
|
x_offset = current_x_offset + (legend_square_width * 1.7)
|
72
75
|
text_renderer.add_to_render_queue(@raw_columns, 1.0, x_offset, current_y_offset, Magick::WestGravity)
|
73
76
|
|
74
77
|
# Now draw box with color of this dataset
|
75
|
-
rect_renderer = Gruff::Renderer::Rectangle.new(color: store.data[index].color)
|
78
|
+
rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: store.data[index].color)
|
76
79
|
rect_renderer.render(current_x_offset,
|
77
80
|
current_y_offset - legend_square_width / 2.0,
|
78
81
|
current_x_offset + legend_square_width,
|
@@ -90,9 +93,10 @@ module Gruff
|
|
90
93
|
def truncate_legend_label(label)
|
91
94
|
truncated_label = label.to_s
|
92
95
|
|
93
|
-
|
96
|
+
font = @legend_font.dup
|
97
|
+
font.size = scale_fontsize(font.size)
|
94
98
|
max_width = @columns - @legend_left_margin - @right_margin
|
95
|
-
while calculate_width(
|
99
|
+
while calculate_width(font, truncated_label) > max_width && truncated_label.length > 1
|
96
100
|
truncated_label = truncated_label[0..truncated_label.length - 2]
|
97
101
|
end
|
98
102
|
truncated_label + (truncated_label.length < label.to_s.length ? '...' : '')
|