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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +66 -0
  3. data/.rubocop.yml +6 -10
  4. data/.rubocop_todo.yml +19 -85
  5. data/CHANGELOG.md +10 -0
  6. data/README.md +6 -7
  7. data/gruff.gemspec +2 -4
  8. data/lib/gruff.rb +1 -0
  9. data/lib/gruff/accumulator_bar.rb +3 -1
  10. data/lib/gruff/area.rb +5 -8
  11. data/lib/gruff/bar.rb +19 -23
  12. data/lib/gruff/base.rb +134 -96
  13. data/lib/gruff/bezier.rb +4 -6
  14. data/lib/gruff/bullet.rb +11 -10
  15. data/lib/gruff/dot.rb +10 -10
  16. data/lib/gruff/font.rb +39 -0
  17. data/lib/gruff/helper/stacked_mixin.rb +1 -2
  18. data/lib/gruff/histogram.rb +9 -7
  19. data/lib/gruff/line.rb +55 -46
  20. data/lib/gruff/mini/bar.rb +9 -6
  21. data/lib/gruff/mini/legend.rb +12 -8
  22. data/lib/gruff/mini/pie.rb +9 -6
  23. data/lib/gruff/mini/side_bar.rb +9 -6
  24. data/lib/gruff/net.rb +9 -15
  25. data/lib/gruff/patch/string.rb +1 -1
  26. data/lib/gruff/pie.rb +23 -65
  27. data/lib/gruff/renderer/bezier.rb +8 -9
  28. data/lib/gruff/renderer/circle.rb +8 -9
  29. data/lib/gruff/renderer/dash_line.rb +9 -10
  30. data/lib/gruff/renderer/dot.rb +13 -14
  31. data/lib/gruff/renderer/ellipse.rb +8 -9
  32. data/lib/gruff/renderer/line.rb +8 -9
  33. data/lib/gruff/renderer/polygon.rb +9 -10
  34. data/lib/gruff/renderer/polyline.rb +8 -9
  35. data/lib/gruff/renderer/rectangle.rb +7 -8
  36. data/lib/gruff/renderer/renderer.rb +21 -36
  37. data/lib/gruff/renderer/text.rb +21 -37
  38. data/lib/gruff/scatter.rb +41 -46
  39. data/lib/gruff/scene.rb +15 -13
  40. data/lib/gruff/side_bar.rb +14 -30
  41. data/lib/gruff/side_stacked_bar.rb +8 -11
  42. data/lib/gruff/spider.rb +11 -16
  43. data/lib/gruff/stacked_area.rb +10 -11
  44. data/lib/gruff/stacked_bar.rb +9 -9
  45. data/lib/gruff/store/store.rb +6 -10
  46. data/lib/gruff/themes.rb +6 -6
  47. data/lib/gruff/version.rb +1 -1
  48. data/rails_generators/gruff/templates/controller.rb +1 -1
  49. metadata +4 -21
  50. data/.travis.yml +0 -23
  51. data/assets/plastik/blue.png +0 -0
  52. data/assets/plastik/green.png +0 -0
  53. data/assets/plastik/red.png +0 -0
  54. data/lib/gruff/photo_bar.rb +0 -93
data/lib/gruff/bar.rb CHANGED
@@ -33,7 +33,21 @@ class Gruff::Bar < Gruff::Base
33
33
  # Prevent drawing of column labels below a bar graph. Default is +false+.
34
34
  attr_writer :hide_labels
35
35
 
36
- def initialize_ivars
36
+ # Can be used to adjust the spaces between the bars.
37
+ # Accepts values between 0.00 and 1.00 where 0.00 means no spacing at all
38
+ # and 1 means that each bars' width is nearly 0 (so each bar is a simple
39
+ # line with no x dimension).
40
+ #
41
+ # Default value is +0.9+.
42
+ def spacing_factor=(space_percent)
43
+ raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' unless (space_percent >= 0) && (space_percent <= 1)
44
+
45
+ @spacing_factor = (1 - space_percent)
46
+ end
47
+
48
+ private
49
+
50
+ def initialize_attributes
37
51
  super
38
52
  @spacing_factor = 0.9
39
53
  @group_spacing = 10
@@ -41,34 +55,16 @@ class Gruff::Bar < Gruff::Base
41
55
  @show_labels_for_bar_values = false
42
56
  @hide_labels = false
43
57
  end
44
- private :initialize_ivars
45
58
 
46
- def draw
59
+ def setup_drawing
47
60
  # Labels will be centered over the left of the bar if
48
61
  # there are more labels than columns. This is basically the same
49
62
  # as where it would be for a line graph.
50
63
  @center_labels_over_point = (@labels.keys.length > column_count)
51
64
 
52
65
  super
53
- return unless data_given?
54
-
55
- draw_bars
56
66
  end
57
67
 
58
- # Can be used to adjust the spaces between the bars.
59
- # Accepts values between 0.00 and 1.00 where 0.00 means no spacing at all
60
- # and 1 means that each bars' width is nearly 0 (so each bar is a simple
61
- # line with no x dimension).
62
- #
63
- # Default value is +0.9+.
64
- def spacing_factor=(space_percent)
65
- raise ArgumentError, 'spacing_factor must be between 0.00 and 1.00' unless (space_percent >= 0) && (space_percent <= 1)
66
-
67
- @spacing_factor = (1 - space_percent)
68
- end
69
-
70
- protected
71
-
72
68
  def hide_labels?
73
69
  @hide_labels
74
70
  end
@@ -84,7 +80,7 @@ protected
84
80
  # Value to avoid completely overwriting the coordinate axis
85
81
  AXIS_MARGIN = 0.5
86
82
 
87
- def draw_bars
83
+ def draw_graph
88
84
  # Setup spacing.
89
85
  #
90
86
  # Columns sit side-by-side.
@@ -112,7 +108,7 @@ protected
112
108
  left_y, right_y = conversion.get_top_bottom_scaled(data_point)
113
109
 
114
110
  # create new bar
115
- rect_renderer = Gruff::Renderer::Rectangle.new(color: data_row.color)
111
+ rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: data_row.color)
116
112
  rect_renderer.render(left_x, left_y - AXIS_MARGIN, right_x, right_y - AXIS_MARGIN)
117
113
 
118
114
  # Calculate center based on bar_width and current row
@@ -123,7 +119,7 @@ protected
123
119
  if @show_labels_for_bar_values
124
120
  bar_value_label = Gruff::BarValueLabel::Bar.new([left_x, left_y, right_x, right_y], store.data[row_index].points[point_index])
125
121
  bar_value_label.prepare_rendering(@label_formatting, bar_width) do |x, y, text|
126
- draw_value_label(x, y, text, true)
122
+ draw_value_label(x, y, text)
127
123
  end
128
124
  end
129
125
  end
data/lib/gruff/base.rb CHANGED
@@ -93,15 +93,6 @@ module Gruff
93
93
  # Set the large title of the graph displayed at the top.
94
94
  attr_writer :title
95
95
 
96
- # Same as {#font=} but for the title.
97
- attr_writer :title_font
98
-
99
- # Specifies whether to draw the title bolded or not. Default is +true+.
100
- attr_writer :bold_title
101
-
102
- # Specifies the text color.
103
- attr_writer :font_color
104
-
105
96
  # Prevent drawing of line markers. Default is +false+.
106
97
  attr_writer :hide_line_markers
107
98
 
@@ -118,21 +109,9 @@ module Gruff
118
109
  # to +"No Data."+.
119
110
  attr_writer :no_data_message
120
111
 
121
- # Set the font size of the large title at the top of the graph. Default is +36+.
122
- attr_writer :title_font_size
123
-
124
- # Optionally set the size of the font. Based on an 800x600px graph.
125
- # Default is +20+.
126
- #
127
- # Will be scaled down if the graph is smaller than 800px wide.
128
- attr_writer :legend_font_size
129
-
130
112
  # Display the legend under the graph. Default is +false+.
131
113
  attr_writer :legend_at_bottom
132
114
 
133
- # The font size of the labels around the graph. Default is +21+.
134
- attr_writer :marker_font_size
135
-
136
115
  # Set the color of the auxiliary lines.
137
116
  attr_writer :marker_color
138
117
 
@@ -181,7 +160,7 @@ module Gruff
181
160
  @rows.freeze
182
161
 
183
162
  initialize_graph_scale
184
- initialize_ivars
163
+ initialize_attributes
185
164
  initialize_store
186
165
 
187
166
  self.theme = Themes::KEYNOTE
@@ -209,7 +188,7 @@ module Gruff
209
188
  #
210
189
  # This makes it possible to set defaults in a subclass but still allow
211
190
  # developers to change this values in their program.
212
- def initialize_ivars
191
+ def initialize_attributes
213
192
  @marker_count = nil
214
193
  @maximum_value = @minimum_value = nil
215
194
  @labels = {}
@@ -217,13 +196,9 @@ module Gruff
217
196
  @sorted_drawing = false
218
197
  @title = nil
219
198
 
220
- @title_font = nil
221
- @font = nil
222
- @bold_title = true
223
-
224
- @marker_font_size = 21.0
225
- @legend_font_size = 20.0
226
- @title_font_size = 36.0
199
+ @title_font = Gruff::Font.new(size: 36.0, bold: true)
200
+ @marker_font = Gruff::Font.new(size: 21.0)
201
+ @legend_font = Gruff::Font.new(size: 20.0)
227
202
 
228
203
  @top_margin = @bottom_margin = @left_margin = @right_margin = DEFAULT_MARGIN
229
204
  @legend_margin = LEGEND_MARGIN
@@ -247,7 +222,7 @@ module Gruff
247
222
  @x_axis_label_format = nil
248
223
  @y_axis_label_format = nil
249
224
  end
250
- protected :initialize_ivars
225
+ protected :initialize_attributes
251
226
 
252
227
  # Sets the top, bottom, left and right margins to +margin+.
253
228
  #
@@ -262,8 +237,62 @@ module Gruff
262
237
  # @param font_path [String] The path to font.
263
238
  #
264
239
  def font=(font_path)
265
- @font = font_path
266
- Gruff::Renderer.font = @font
240
+ @title_font.path = font_path unless @title_font.path
241
+ @marker_font.path = font_path
242
+ @legend_font.path = font_path
243
+ end
244
+
245
+ # Same as {#font=} but for the title.
246
+ #
247
+ # @param font_path [String] The path to font.
248
+ #
249
+ def title_font=(font_path)
250
+ @title_font.path = font_path
251
+ end
252
+
253
+ # Set the font size of the large title at the top of the graph. Default is +36+.
254
+ #
255
+ # @param value [Numeric] title font size
256
+ #
257
+ def title_font_size=(value)
258
+ @title_font.size = value
259
+ end
260
+
261
+ # The font size of the labels around the graph. Default is +21+.
262
+ #
263
+ # @param value [Numeric] marker font size
264
+ #
265
+ def marker_font_size=(value)
266
+ @marker_font.size = value
267
+ end
268
+
269
+ # Optionally set the size of the font. Based on an 800x600px graph.
270
+ # Default is +20+.
271
+ #
272
+ # Will be scaled down if the graph is smaller than 800px wide.
273
+ #
274
+ # @param value [Numeric] legend font size
275
+ #
276
+ def legend_font_size=(value)
277
+ @legend_font.size = value
278
+ end
279
+
280
+ # Specifies whether to draw the title bolded or not. Default is +true+.
281
+ #
282
+ # @param value [Boolean] specifies whether to draw the title bolded or not.
283
+ #
284
+ def bold_title=(value)
285
+ @title_font.bold = value
286
+ end
287
+
288
+ # Specifies the text color.
289
+ #
290
+ # @param value [String] color
291
+ #
292
+ def font_color=(value)
293
+ @title_font.color = value
294
+ @marker_font.color = value
295
+ @legend_font.color = value
267
296
  end
268
297
 
269
298
  # Add a color to the list of available colors for lines.
@@ -332,12 +361,13 @@ module Gruff
332
361
  }
333
362
  @theme_options = defaults.merge options
334
363
 
364
+ self.marker_color = @theme_options[:marker_color]
365
+ self.font_color = @theme_options[:font_color] || @marker_color
366
+
335
367
  @colors = @theme_options[:colors]
336
- @marker_color = @theme_options[:marker_color]
337
368
  @marker_shadow_color = @theme_options[:marker_shadow_color]
338
- @font_color = @theme_options[:font_color] || @marker_color
339
369
 
340
- Gruff::Renderer.setup(@columns, @rows, @font, @scale, @theme_options)
370
+ @renderer = Gruff::Renderer.new(@columns, @rows, @scale, @theme_options)
341
371
  end
342
372
 
343
373
  # Apply Apple's keynote theme.
@@ -439,8 +469,8 @@ module Gruff
439
469
  def to_image
440
470
  @to_image ||= begin
441
471
  draw
442
- Gruff::Renderer.finish
443
- Gruff::Renderer.instance.image
472
+ renderer.finish
473
+ renderer.image
444
474
  end
445
475
  end
446
476
 
@@ -456,27 +486,29 @@ module Gruff
456
486
  end
457
487
  end
458
488
 
459
- protected
460
-
461
- # Overridden by subclasses to do the actual plotting of the graph.
462
- #
463
- # Subclasses should start by calling super() for this method.
489
+ # Draw a graph.
464
490
  def draw
491
+ setup_data
492
+
465
493
  # Maybe should be done in one of the following functions for more granularity.
466
494
  unless data_given?
467
495
  draw_no_data
468
496
  return
469
497
  end
470
498
 
471
- setup_data
472
499
  setup_drawing
473
500
 
474
501
  draw_legend
475
502
  draw_line_markers
476
503
  draw_axis_labels
477
504
  draw_title
505
+ draw_graph
478
506
  end
479
507
 
508
+ protected
509
+
510
+ attr_reader :renderer
511
+
480
512
  # Perform data manipulation before calculating chart measurements
481
513
  def setup_data # :nodoc:
482
514
  if @y_axis_increment && !@hide_line_markers
@@ -581,13 +613,13 @@ module Gruff
581
613
  x_axis_label_y_coordinate = @graph_bottom + LABEL_MARGIN + @marker_caps_height
582
614
 
583
615
  # TODO: Center between graph area
584
- text_renderer = Gruff::Renderer::Text.new(@x_axis_label, font: @font, size: @marker_font_size, color: @font_color)
616
+ text_renderer = Gruff::Renderer::Text.new(renderer, @x_axis_label, font: @marker_font)
585
617
  text_renderer.add_to_render_queue(@raw_columns, 1.0, 0.0, x_axis_label_y_coordinate)
586
618
  end
587
619
 
588
620
  if @y_axis_label
589
621
  # Y Axis, rotated vertically
590
- text_renderer = Gruff::Renderer::Text.new(@y_axis_label, font: @font, size: @marker_font_size, color: @font_color, rotation: -90)
622
+ text_renderer = Gruff::Renderer::Text.new(renderer, @y_axis_label, font: @marker_font, rotation: -90)
591
623
  text_renderer.add_to_render_queue(1.0, @raw_rows, @left_margin + @marker_caps_height / 2.0, 0.0, Magick::CenterGravity)
592
624
  end
593
625
  end
@@ -602,13 +634,13 @@ module Gruff
602
634
  (0..marker_count).each do |index|
603
635
  y = @graph_top + @graph_height - index.to_f * increment_scaled
604
636
 
605
- line_renderer = Gruff::Renderer::Line.new(color: @marker_color, shadow_color: @marker_shadow_color)
637
+ line_renderer = Gruff::Renderer::Line.new(renderer, color: @marker_color, shadow_color: @marker_shadow_color)
606
638
  line_renderer.render(@graph_left, y, @graph_right, y)
607
639
 
608
640
  unless @hide_line_numbers
609
641
  marker_label = BigDecimal(index.to_s) * BigDecimal(@increment.to_s) + BigDecimal(minimum_value.to_s)
610
642
  label = y_axis_label(marker_label, @increment)
611
- text_renderer = Gruff::Renderer::Text.new(label, font: @font, size: @marker_font_size, color: @font_color)
643
+ text_renderer = Gruff::Renderer::Text.new(renderer, label, font: @marker_font)
612
644
  text_renderer.add_to_render_queue(@graph_left - LABEL_MARGIN, 1.0, 0.0, y, Magick::EastGravity)
613
645
  end
614
646
  end
@@ -641,17 +673,17 @@ module Gruff
641
673
  next if legend_label.empty?
642
674
 
643
675
  # Draw label
644
- text_renderer = Gruff::Renderer::Text.new(legend_label, font: @font, size: @legend_font_size, color: @font_color)
676
+ text_renderer = Gruff::Renderer::Text.new(renderer, legend_label, font: @legend_font)
645
677
  text_renderer.add_to_render_queue(@raw_columns, 1.0, current_x_offset + (legend_square_width * 1.7), current_y_offset, Magick::WestGravity)
646
678
 
647
679
  # Now draw box with color of this dataset
648
- rect_renderer = Gruff::Renderer::Rectangle.new(color: store.data[index].color)
680
+ rect_renderer = Gruff::Renderer::Rectangle.new(renderer, color: store.data[index].color)
649
681
  rect_renderer.render(current_x_offset,
650
682
  current_y_offset - legend_square_width / 2.0,
651
683
  current_x_offset + legend_square_width,
652
684
  current_y_offset + legend_square_width / 2.0)
653
685
 
654
- width = calculate_width(@legend_font_size, legend_label)
686
+ width = calculate_width(@legend_font, legend_label)
655
687
  current_x_offset += width + (legend_square_width * 2.7)
656
688
  label_widths.first.shift
657
689
 
@@ -672,15 +704,12 @@ module Gruff
672
704
  def draw_title
673
705
  return if hide_title?
674
706
 
675
- font = @title_font || @font
676
- font_weight = @bold_title ? Magick::BoldWeight : Magick::NormalWeight
677
- font_size = @title_font_size
678
-
679
- metrics = Renderer::Text.metrics(@title, font, font_size, font_weight)
707
+ metrics = Gruff::Renderer::Text.new(renderer, @title, font: @title_font).metrics
680
708
  if metrics.width > @raw_columns
681
- font_size = font_size * (@raw_columns / metrics.width) * 0.95
709
+ @title_font.size = @title_font.size * (@raw_columns / metrics.width) * 0.95
682
710
  end
683
- text_renderer = Gruff::Renderer::Text.new(@title, font: font, size: font_size, color: @font_color, weight: font_weight)
711
+
712
+ text_renderer = Gruff::Renderer::Text.new(renderer, @title, font: @title_font)
684
713
  text_renderer.add_to_render_queue(@raw_columns, 1.0, 0, @top_margin)
685
714
  end
686
715
 
@@ -714,24 +743,31 @@ module Gruff
714
743
 
715
744
  def draw_label_at(width, height, x, y, text, gravity = Magick::NorthGravity)
716
745
  label_text = truncate_label_text(text)
717
- text_renderer = Gruff::Renderer::Text.new(label_text, font: @font, size: @marker_font_size, color: @font_color)
746
+ text_renderer = Gruff::Renderer::Text.new(renderer, label_text, font: @marker_font)
718
747
  text_renderer.add_to_render_queue(width, height, x, y, gravity)
719
748
  end
720
749
 
721
750
  # Draws the data value over the data point in bar graphs
722
- def draw_value_label(x_offset, y_offset, data_point, bar_value = false)
723
- return if @hide_line_markers && !bar_value
751
+ def draw_value_label(x_offset, y_offset, data_point)
752
+ return if @hide_line_markers
724
753
 
725
- text_renderer = Gruff::Renderer::Text.new(data_point, font: @font, size: @marker_font_size, color: @font_color)
754
+ text_renderer = Gruff::Renderer::Text.new(renderer, data_point, font: @marker_font)
726
755
  text_renderer.add_to_render_queue(1.0, 1.0, x_offset, y_offset)
727
756
  end
728
757
 
729
758
  # Shows an error message because you have no data.
730
759
  def draw_no_data
731
- text_renderer = Gruff::Renderer::Text.new(@no_data_message, font: @font, size: 80, color: @font_color)
760
+ font = @title_font.dup
761
+ font.size = 80
762
+ font.bold = false
763
+ text_renderer = Gruff::Renderer::Text.new(renderer, @no_data_message, font: font)
732
764
  text_renderer.render(@raw_columns, @raw_rows, 0, 0, Magick::CenterGravity)
733
765
  end
734
766
 
767
+ def draw_graph
768
+ raise 'Should implement this method at inherited class.'
769
+ end
770
+
735
771
  # Resets everything to defaults (except data).
736
772
  def reset_themes
737
773
  @theme_options = {}
@@ -794,15 +830,15 @@ module Gruff
794
830
  private
795
831
 
796
832
  def setup_marker_caps_height
797
- hide_bottom_label_area? ? 0 : calculate_caps_height(@marker_font_size)
833
+ hide_bottom_label_area? ? 0 : calculate_caps_height(@marker_font)
798
834
  end
799
835
 
800
836
  def setup_title_caps_height
801
- hide_title? ? 0 : calculate_caps_height(@title_font_size) * @title.lines.to_a.size
837
+ hide_title? ? 0 : calculate_caps_height(@title_font) * @title.lines.to_a.size
802
838
  end
803
839
 
804
840
  def setup_legend_caps_height
805
- @hide_legend ? 0 : calculate_caps_height(@legend_font_size)
841
+ @hide_legend ? 0 : calculate_caps_height(@legend_font)
806
842
  end
807
843
 
808
844
  def graph_right_margin
@@ -813,7 +849,7 @@ module Gruff
813
849
  # Make space for half the width of the rightmost column label.
814
850
  # Might be greater than the number of columns if between-style bar markers are used.
815
851
  last_label = @labels.keys.max.to_i
816
- (last_label >= (column_count - 1) && @center_labels_over_point) ? calculate_width(@marker_font_size, @labels[last_label]) / 2.0 : 0
852
+ (last_label >= (column_count - 1) && @center_labels_over_point) ? calculate_width(@marker_font, @labels[last_label]) / 2.0 : 0
817
853
  end
818
854
 
819
855
  def setup_left_margin
@@ -826,7 +862,7 @@ module Gruff
826
862
  y_axis_label(maximum_value.to_f, @increment)
827
863
  end
828
864
  end
829
- longest_left_label_width = calculate_width(@marker_font_size, truncate_label_text(text))
865
+ longest_left_label_width = calculate_width(@marker_font, truncate_label_text(text))
830
866
  longest_left_label_width *= 1.25 if @has_left_labels
831
867
 
832
868
  # Shift graph if left line numbers are hidden
@@ -868,29 +904,31 @@ module Gruff
868
904
  # Return a formatted string representing a number value that should be
869
905
  # printed as a label.
870
906
  def label(value, increment)
871
- label = if increment
872
- if increment >= 10 || (increment * 1) == (increment * 1).to_i.to_f
873
- sprintf('%0i', value)
874
- elsif increment >= 1.0 || (increment * 10) == (increment * 10).to_i.to_f
875
- sprintf('%0.1f', value)
876
- elsif increment >= 0.1 || (increment * 100) == (increment * 100).to_i.to_f
877
- sprintf('%0.2f', value)
878
- elsif increment >= 0.01 || (increment * 1000) == (increment * 1000).to_i.to_f
879
- sprintf('%0.3f', value)
880
- elsif increment >= 0.001 || (increment * 10000) == (increment * 10000).to_i.to_f
881
- sprintf('%0.4f', value)
882
- else
883
- value.to_s
884
- end
885
- elsif (@spread.to_f % (marker_count.to_f == 0 ? 1 : marker_count.to_f) == 0) || !@y_axis_increment.nil?
886
- value.to_i.to_s
887
- elsif @spread > 10.0
888
- sprintf('%0i', value)
889
- elsif @spread >= 3.0
890
- sprintf('%0.2f', value)
891
- else
892
- value.to_s
893
- end
907
+ label = begin
908
+ if increment
909
+ if increment >= 10 || (increment * 1) == (increment * 1).to_i.to_f
910
+ sprintf('%0i', value)
911
+ elsif increment >= 1.0 || (increment * 10) == (increment * 10).to_i.to_f
912
+ sprintf('%0.1f', value)
913
+ elsif increment >= 0.1 || (increment * 100) == (increment * 100).to_i.to_f
914
+ sprintf('%0.2f', value)
915
+ elsif increment >= 0.01 || (increment * 1000) == (increment * 1000).to_i.to_f
916
+ sprintf('%0.3f', value)
917
+ elsif increment >= 0.001 || (increment * 10000) == (increment * 10000).to_i.to_f
918
+ sprintf('%0.4f', value)
919
+ else
920
+ value.to_s
921
+ end
922
+ elsif (@spread.to_f % (marker_count.to_f == 0 ? 1 : marker_count.to_f) == 0) || !@y_axis_increment.nil?
923
+ value.to_i.to_s
924
+ elsif @spread > 10.0
925
+ sprintf('%0i', value)
926
+ elsif @spread >= 3.0
927
+ sprintf('%0.2f', value)
928
+ else
929
+ value.to_s
930
+ end
931
+ end
894
932
 
895
933
  parts = label.split('.')
896
934
  parts[0] = parts[0].commify
@@ -917,7 +955,7 @@ module Gruff
917
955
  # May fix legend drawing problem at small sizes
918
956
  label_widths = [[]] # Used to calculate line wrap
919
957
  legend_labels.each do |label|
920
- width = calculate_width(@legend_font_size, label)
958
+ width = calculate_width(@legend_font, label)
921
959
  label_width = width + legend_square_width * 2.7
922
960
  label_widths.last.push label_width
923
961
 
@@ -959,8 +997,8 @@ module Gruff
959
997
  #
960
998
  # Not scaled since it deals with dimensions that the regular scaling will
961
999
  # handle.
962
- def calculate_caps_height(font_size)
963
- metrics = Renderer::Text.metrics('X', @font, font_size)
1000
+ def calculate_caps_height(font)
1001
+ metrics = Gruff::Renderer::Text.new(renderer, 'X', font: font).metrics
964
1002
  metrics.height
965
1003
  end
966
1004
 
@@ -968,11 +1006,11 @@ module Gruff
968
1006
  #
969
1007
  # Not scaled since it deals with dimensions that the regular
970
1008
  # scaling will handle.
971
- def calculate_width(font_size, text)
1009
+ def calculate_width(font, text)
972
1010
  text = text.to_s
973
1011
  return 0 if text.empty?
974
1012
 
975
- metrics = Renderer::Text.metrics(text, @font, font_size)
1013
+ metrics = Gruff::Renderer::Text.new(renderer, text, font: font).metrics
976
1014
  metrics.width
977
1015
  end
978
1016