gruff 0.7.0-java → 0.12.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +5 -5
  2. data/{History.txt → CHANGELOG.md} +81 -25
  3. data/Gemfile +3 -1
  4. data/README.md +51 -23
  5. data/assets/plastik/blue.png +0 -0
  6. data/assets/plastik/green.png +0 -0
  7. data/assets/plastik/red.png +0 -0
  8. data/gruff.gemspec +23 -13
  9. data/init.rb +2 -0
  10. data/lib/gruff.rb +33 -4
  11. data/lib/gruff/accumulator_bar.rb +17 -9
  12. data/lib/gruff/area.rb +31 -21
  13. data/lib/gruff/bar.rb +90 -46
  14. data/lib/gruff/base.rb +476 -710
  15. data/lib/gruff/bezier.rb +29 -18
  16. data/lib/gruff/bullet.rb +58 -71
  17. data/lib/gruff/dot.rb +35 -83
  18. data/lib/gruff/helper/bar_conversion.rb +47 -0
  19. data/lib/gruff/helper/bar_value_label_mixin.rb +33 -0
  20. data/lib/gruff/helper/stacked_mixin.rb +23 -0
  21. data/lib/gruff/histogram.rb +59 -0
  22. data/lib/gruff/line.rb +121 -199
  23. data/lib/gruff/mini/bar.rb +17 -10
  24. data/lib/gruff/mini/legend.rb +26 -38
  25. data/lib/gruff/mini/pie.rb +18 -13
  26. data/lib/gruff/mini/side_bar.rb +25 -12
  27. data/lib/gruff/net.rb +69 -83
  28. data/lib/gruff/patch/rmagick.rb +31 -0
  29. data/lib/gruff/patch/string.rb +13 -0
  30. data/lib/gruff/photo_bar.rb +36 -43
  31. data/lib/gruff/pie.rb +42 -103
  32. data/lib/gruff/renderer/bezier.rb +22 -0
  33. data/lib/gruff/renderer/circle.rb +22 -0
  34. data/lib/gruff/renderer/dash_line.rb +23 -0
  35. data/lib/gruff/renderer/dot.rb +40 -0
  36. data/lib/gruff/renderer/ellipse.rb +22 -0
  37. data/lib/gruff/renderer/line.rb +43 -0
  38. data/lib/gruff/renderer/polygon.rb +24 -0
  39. data/lib/gruff/renderer/polyline.rb +22 -0
  40. data/lib/gruff/renderer/rectangle.rb +20 -0
  41. data/lib/gruff/renderer/renderer.rb +120 -0
  42. data/lib/gruff/renderer/text.rb +57 -0
  43. data/lib/gruff/scatter.rb +128 -201
  44. data/lib/gruff/scene.rb +30 -41
  45. data/lib/gruff/side_bar.rb +100 -68
  46. data/lib/gruff/side_stacked_bar.rb +92 -63
  47. data/lib/gruff/spider.rb +47 -53
  48. data/lib/gruff/stacked_area.rb +37 -34
  49. data/lib/gruff/stacked_bar.rb +99 -54
  50. data/lib/gruff/store/basic_data.rb +36 -0
  51. data/lib/gruff/store/custom_data.rb +36 -0
  52. data/lib/gruff/store/store.rb +81 -0
  53. data/lib/gruff/store/xy_data.rb +58 -0
  54. data/lib/gruff/themes.rb +32 -33
  55. data/lib/gruff/version.rb +3 -1
  56. metadata +74 -102
  57. data/.gitignore +0 -7
  58. data/.travis.yml +0 -19
  59. data/Manifest.txt +0 -81
  60. data/RELEASE.md +0 -30
  61. data/Rakefile +0 -218
  62. data/assets/bubble.png +0 -0
  63. data/assets/city_scene/background/0000.png +0 -0
  64. data/assets/city_scene/background/0600.png +0 -0
  65. data/assets/city_scene/background/2000.png +0 -0
  66. data/assets/city_scene/clouds/cloudy.png +0 -0
  67. data/assets/city_scene/clouds/partly_cloudy.png +0 -0
  68. data/assets/city_scene/clouds/stormy.png +0 -0
  69. data/assets/city_scene/grass/default.png +0 -0
  70. data/assets/city_scene/haze/true.png +0 -0
  71. data/assets/city_scene/number_sample/1.png +0 -0
  72. data/assets/city_scene/number_sample/2.png +0 -0
  73. data/assets/city_scene/number_sample/default.png +0 -0
  74. data/assets/city_scene/sky/0000.png +0 -0
  75. data/assets/city_scene/sky/0200.png +0 -0
  76. data/assets/city_scene/sky/0400.png +0 -0
  77. data/assets/city_scene/sky/0600.png +0 -0
  78. data/assets/city_scene/sky/0800.png +0 -0
  79. data/assets/city_scene/sky/1000.png +0 -0
  80. data/assets/city_scene/sky/1200.png +0 -0
  81. data/assets/city_scene/sky/1400.png +0 -0
  82. data/assets/city_scene/sky/1500.png +0 -0
  83. data/assets/city_scene/sky/1700.png +0 -0
  84. data/assets/city_scene/sky/2000.png +0 -0
  85. data/assets/pc306715.jpg +0 -0
  86. data/lib/gruff/bar_conversion.rb +0 -46
  87. data/lib/gruff/deprecated.rb +0 -39
  88. data/lib/gruff/stacked_mixin.rb +0 -23
  89. data/test/gruff_test_case.rb +0 -152
  90. data/test/image_compare.rb +0 -58
  91. data/test/test_accumulator_bar.rb +0 -51
  92. data/test/test_area.rb +0 -134
  93. data/test/test_bar.rb +0 -505
  94. data/test/test_base.rb +0 -33
  95. data/test/test_bezier.rb +0 -33
  96. data/test/test_bullet.rb +0 -26
  97. data/test/test_dot.rb +0 -263
  98. data/test/test_labels_for_null_data.rb +0 -27
  99. data/test/test_legend.rb +0 -68
  100. data/test/test_line.rb +0 -674
  101. data/test/test_mini_bar.rb +0 -33
  102. data/test/test_mini_pie.rb +0 -25
  103. data/test/test_mini_side_bar.rb +0 -36
  104. data/test/test_net.rb +0 -231
  105. data/test/test_photo.rb +0 -41
  106. data/test/test_pie.rb +0 -194
  107. data/test/test_scatter.rb +0 -270
  108. data/test/test_scene.rb +0 -100
  109. data/test/test_side_bar.rb +0 -56
  110. data/test/test_sidestacked_bar.rb +0 -105
  111. data/test/test_spider.rb +0 -226
  112. data/test/test_stacked_area.rb +0 -52
  113. data/test/test_stacked_bar.rb +0 -68
@@ -1,26 +1,36 @@
1
- ##
1
+ # frozen_string_literal: true
2
+
2
3
  #
3
4
  # Makes a small bar graph suitable for display at 200px or even smaller.
4
5
  #
6
+ # Here's how to set up a Gruff::Mini::Bar.
7
+ #
8
+ # g = Gruff::Mini::Bar.new
9
+ # g.title = 'Mini Bar Graph'
10
+ # g.data :Art, [0, 5, 8, 15]
11
+ # g.data :Philosophy, [10, 3, 2, 8]
12
+ # g.data :Science, [2, 15, 8, 11]
13
+ # g.write('mini_bar.png')
14
+ #
5
15
  module Gruff
6
16
  module Mini
7
-
17
+ # A class for drawing a small bar graph.
8
18
  class Bar < Gruff::Bar
9
-
10
19
  include Gruff::Mini::Legend
11
-
20
+
12
21
  def initialize_ivars
13
22
  super
14
-
23
+
15
24
  @hide_legend = true
16
25
  @hide_title = true
17
26
  @hide_line_numbers = true
18
27
 
19
28
  @marker_font_size = 50.0
20
- @minimum_value = 0.0
21
- @maximum_value = 0.0
22
29
  @legend_font_size = 60.0
30
+
31
+ @minimum_value = 0.0
23
32
  end
33
+ private :initialize_ivars
24
34
 
25
35
  def draw
26
36
  expand_canvas_for_vertical_legend
@@ -28,10 +38,7 @@ module Gruff
28
38
  super
29
39
 
30
40
  draw_vertical_legend
31
- @d.draw(@base_image)
32
41
  end
33
-
34
42
  end
35
-
36
43
  end
37
44
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gruff
2
4
  module Mini
5
+ # A module to handle the small legend.
3
6
  module Legend
4
-
5
7
  attr_accessor :hide_mini_legend, :legend_position
6
8
 
7
9
  def initialize(*)
@@ -16,23 +18,22 @@ module Gruff
16
18
  def expand_canvas_for_vertical_legend
17
19
  return if @hide_mini_legend
18
20
 
19
- @legend_labels = @data.collect {|item| item[Gruff::Base::DATA_LABEL_INDEX] }
21
+ @legend_labels = store.data.map(&:label)
20
22
 
21
- legend_height = scale_fontsize(
22
- @data.length * calculate_line_height +
23
- @top_margin + @bottom_margin)
23
+ legend_height = scale_fontsize(store.length * calculate_line_height + @top_margin + @bottom_margin)
24
24
 
25
25
  @original_rows = @raw_rows
26
26
  @original_columns = @raw_columns
27
27
 
28
28
  case @legend_position
29
- when :right then
29
+ when :right
30
30
  @rows = [@rows, legend_height].max
31
31
  @columns += calculate_legend_width + @left_margin
32
32
  else
33
- @rows += @data.length * calculate_caps_height(scale_fontsize(@legend_font_size)) * 1.7
33
+ @rows += store.length * calculate_caps_height(scale_fontsize(@legend_font_size)) * 1.7
34
34
  end
35
- render_background
35
+
36
+ Gruff::Renderer.setup(@columns, @rows, @font, @scale, @theme_options)
36
37
  end
37
38
 
38
39
  def calculate_line_height
@@ -41,7 +42,7 @@ module Gruff
41
42
 
42
43
  def calculate_legend_width
43
44
  width = @legend_labels.map { |label| calculate_width(@legend_font_size, label) }.max
44
- scale_fontsize(width + 40*1.7)
45
+ scale_fontsize(width + 40 * 1.7)
45
46
  end
46
47
 
47
48
  ##
@@ -54,12 +55,8 @@ module Gruff
54
55
  @legend_left_margin = 100.0
55
56
  legend_top_margin = 40.0
56
57
 
57
- # May fix legend drawing problem at small sizes
58
- @d.font = @font if @font
59
- @d.pointsize = @legend_font_size
60
-
61
58
  case @legend_position
62
- when :right then
59
+ when :right
63
60
  current_x_offset = @original_columns + @left_margin
64
61
  current_y_offset = @top_margin + legend_top_margin
65
62
  else
@@ -67,33 +64,22 @@ module Gruff
67
64
  current_y_offset = @original_rows + legend_top_margin
68
65
  end
69
66
 
70
- debug { @d.line 0.0, current_y_offset, @raw_columns, current_y_offset }
71
-
72
67
  @legend_labels.each_with_index do |legend_label, index|
73
-
74
68
  # Draw label
75
- @d.fill = @font_color
76
- @d.font = @font if @font
77
- @d.pointsize = scale_fontsize(@legend_font_size)
78
- @d.stroke = 'transparent'
79
- @d.font_weight = Magick::NormalWeight
80
- @d.gravity = Magick::WestGravity
81
- @d = @d.annotate_scaled( @base_image,
82
- @raw_columns, 1.0,
83
- current_x_offset + (legend_square_width * 1.7), current_y_offset,
84
- truncate_legend_label(legend_label), @scale)
69
+ label = truncate_legend_label(legend_label)
70
+ text_renderer = Gruff::Renderer::Text.new(label, font: @font, size: @legend_font_size, color: @font_color)
71
+ x_offset = current_x_offset + (legend_square_width * 1.7)
72
+ text_renderer.add_to_render_queue(@raw_columns, 1.0, x_offset, current_y_offset, Magick::WestGravity)
85
73
 
86
74
  # Now draw box with color of this dataset
87
- @d = @d.stroke 'transparent'
88
- @d = @d.fill @data[index][Gruff::Base::DATA_COLOR_INDEX]
89
- @d = @d.rectangle(current_x_offset,
90
- current_y_offset - legend_square_width / 2.0,
91
- current_x_offset + legend_square_width,
92
- current_y_offset + legend_square_width / 2.0)
75
+ rect_renderer = Gruff::Renderer::Rectangle.new(color: store.data[index].color)
76
+ rect_renderer.render(current_x_offset,
77
+ current_y_offset - legend_square_width / 2.0,
78
+ current_x_offset + legend_square_width,
79
+ current_y_offset + legend_square_width / 2.0)
93
80
 
94
81
  current_y_offset += calculate_line_height
95
82
  end
96
- @color_index = 0
97
83
  end
98
84
 
99
85
  ##
@@ -103,12 +89,14 @@ module Gruff
103
89
 
104
90
  def truncate_legend_label(label)
105
91
  truncated_label = label.to_s
106
- while calculate_width(scale_fontsize(@legend_font_size), truncated_label) > (@columns - @legend_left_margin - @right_margin) && (truncated_label.length > 1)
107
- truncated_label = truncated_label[0..truncated_label.length-2]
92
+
93
+ font_size = scale_fontsize(@legend_font_size)
94
+ max_width = @columns - @legend_left_margin - @right_margin
95
+ while calculate_width(font_size, truncated_label) > max_width && truncated_label.length > 1
96
+ truncated_label = truncated_label[0..truncated_label.length - 2]
108
97
  end
109
- truncated_label + (truncated_label.length < label.to_s.length ? "..." : '')
98
+ truncated_label + (truncated_label.length < label.to_s.length ? '...' : '')
110
99
  end
111
-
112
100
  end
113
101
  end
114
102
  end
@@ -1,36 +1,41 @@
1
- ##
1
+ # frozen_string_literal: true
2
+
2
3
  #
3
4
  # Makes a small pie graph suitable for display at 200px or even smaller.
4
5
  #
6
+ # Here's how to set up a Gruff::Mini::Pie.
7
+ #
8
+ # g = Gruff::Mini::Pie.new
9
+ # g.title = "Visual Pie Graph Test"
10
+ # g.data 'Fries', 20
11
+ # g.data 'Hamburgers', 50
12
+ # g.write("mini_pie_keynote.png")
13
+ #
5
14
  module Gruff
6
15
  module Mini
7
-
16
+ # A class for drawing a small pie graph.
8
17
  class Pie < Gruff::Pie
9
-
10
18
  include Gruff::Mini::Legend
11
19
 
12
20
  def initialize_ivars
13
21
  super
14
-
22
+
15
23
  @hide_legend = true
16
24
  @hide_title = true
17
25
  @hide_line_numbers = true
18
-
26
+
19
27
  @marker_font_size = 60.0
20
28
  @legend_font_size = 60.0
21
29
  end
30
+ private :initialize_ivars
22
31
 
23
32
  def draw
24
33
  expand_canvas_for_vertical_legend
25
-
34
+
26
35
  super
27
-
28
- draw_vertical_legend
29
-
30
- @d.draw(@base_image)
31
- end # def draw
32
36
 
33
- end # class Pie
34
-
37
+ draw_vertical_legend
38
+ end
39
+ end
35
40
  end
36
41
  end
@@ -1,14 +1,30 @@
1
- ##
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Makes a small side bar graph suitable for display at 200px or even smaller.
5
+ #
6
+ # Here's how to set up a Gruff::Mini::SideBar.
2
7
  #
3
- # Makes a small pie graph suitable for display at 200px or even smaller.
8
+ # g = Gruff::Mini::SideBar.new
9
+ # g.title = 'SideBar Graph'
10
+ # g.labels = {
11
+ # 0 => '5/6',
12
+ # 1 => '5/15',
13
+ # 2 => '5/24',
14
+ # 3 => '5/30',
15
+ # }
16
+ # g.group_spacing = 20
17
+ # g.data :Art, [0, 5, 8, 15]
18
+ # g.data :Philosophy, [10, 3, 2, 8]
19
+ # g.data :Science, [2, 15, 8, 11]
20
+ # g.write('mini_sidebar.png')
4
21
  #
5
22
  module Gruff
6
23
  module Mini
7
-
24
+ # A class for drawing a small side bar graph.
8
25
  class SideBar < Gruff::SideBar
9
-
10
26
  include Gruff::Mini::Legend
11
-
27
+
12
28
  def initialize_ivars
13
29
  super
14
30
  @hide_legend = true
@@ -18,18 +34,15 @@ module Gruff
18
34
  @marker_font_size = 50.0
19
35
  @legend_font_size = 50.0
20
36
  end
21
-
37
+ private :initialize_ivars
38
+
22
39
  def draw
23
40
  expand_canvas_for_vertical_legend
24
-
41
+
25
42
  super
26
-
43
+
27
44
  draw_vertical_legend
28
-
29
- @d.draw(@base_image)
30
45
  end
31
-
32
46
  end
33
-
34
47
  end
35
48
  end
@@ -1,127 +1,113 @@
1
- require File.dirname(__FILE__) + '/base'
2
-
3
- # Experimental!!! See also the Spider graph.
1
+ # frozen_string_literal: true
2
+
3
+ # See also the Spider graph.
4
+ #
5
+ # Here's how to make a Gruff::Net.
6
+ #
7
+ # g = Gruff::Net.new
8
+ # g.title = "Net Graph"
9
+ # g.labels = {
10
+ # 0 => '5/6',
11
+ # 1 => '5/15',
12
+ # 2 => '5/24',
13
+ # 3 => '5/30',
14
+ # 4 => '6/4',
15
+ # 5 => '6/12',
16
+ # 6 => '6/21',
17
+ # 7 => '6/28'
18
+ # }
19
+ # g.line_width = 3
20
+ # g.dot_radius = 4
21
+ # g.data :Jimmy, [25, 36, 86, 39, 25, 31, 79, 88]
22
+ # g.data :Julie, [22, 29, 35, 38, 36, 40, 46, 57]
23
+ # g.write("net.png")
24
+ #
4
25
  class Gruff::Net < Gruff::Base
26
+ # Hide parts of the graph to fit more data points, or for a different appearance.
27
+ attr_writer :hide_dots
5
28
 
6
- # Hide parts of the graph to fit more datapoints, or for a different appearance.
7
- attr_accessor :hide_dots
8
-
9
- # Dimensions of lines and dots; calculated based on dataset size if left unspecified
10
- attr_accessor :line_width
11
- attr_accessor :dot_radius
29
+ # Dimensions of lines and dots; calculated based on dataset size if left unspecified.
30
+ attr_writer :line_width
31
+ attr_writer :dot_radius
12
32
 
13
- def initialize(*args)
33
+ def initialize_ivars
14
34
  super
15
35
 
16
36
  @hide_dots = false
37
+ @line_width = nil
38
+ @dot_radius = nil
17
39
  @hide_line_numbers = true
18
40
  @sorted_drawing = true
19
41
  end
42
+ private :initialize_ivars
20
43
 
21
44
  def draw
22
45
  super
23
46
 
24
- return unless @has_data
25
-
26
- @radius = @graph_height / 2.0
27
- @center_x = @graph_left + (@graph_width / 2.0)
28
- @center_y = @graph_top + (@graph_height / 2.0) - 10 # Move graph up a bit
29
-
30
- @x_increment = @graph_width / (@column_count - 1).to_f
31
- circle_radius = dot_radius ||
32
- clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 2.5), 5.0)
33
-
34
- @d = @d.stroke_opacity 1.0
35
- @d = @d.stroke_width line_width ||
36
- clip_value_if_greater_than(@columns / (@norm_data.first[DATA_VALUES_INDEX].size * 4), 5.0)
37
-
38
- if defined?(@norm_baseline)
39
- level = @graph_top + (@graph_height - @norm_baseline * @graph_height)
40
- @d = @d.push
41
- @d.stroke_color @baseline_color
42
- @d.fill_opacity 0.0
43
- @d.stroke_dasharray(10, 20)
44
- @d.stroke_width 5
45
- @d.line(@graph_left, level, @graph_left + @graph_width, level)
46
- @d = @d.pop
47
- end
48
-
49
- @norm_data.each do |data_row|
50
- @d = @d.stroke data_row[DATA_COLOR_INDEX]
51
- @d = @d.fill data_row[DATA_COLOR_INDEX]
47
+ return unless data_given?
52
48
 
53
- data_row[DATA_VALUES_INDEX].each_with_index do |data_point, index|
49
+ store.norm_data.each do |data_row|
50
+ data_row.points.each_with_index do |data_point, index|
54
51
  next if data_point.nil?
55
52
 
56
- rad_pos = index * Math::PI * 2 / @column_count
53
+ rad_pos = index * Math::PI * 2 / column_count
57
54
  point_distance = data_point * @radius
58
- start_x = @center_x + Math::sin(rad_pos) * point_distance
59
- start_y = @center_y - Math::cos(rad_pos) * point_distance
55
+ start_x = @center_x + Math.sin(rad_pos) * point_distance
56
+ start_y = @center_y - Math.cos(rad_pos) * point_distance
60
57
 
61
- next_index = index + 1 < data_row[DATA_VALUES_INDEX].length ? index + 1 : 0
58
+ next_index = index + 1 < data_row.points.length ? index + 1 : 0
62
59
 
63
- next_rad_pos = next_index * Math::PI * 2 / @column_count
64
- next_point_distance = data_row[DATA_VALUES_INDEX][next_index] * @radius
65
- end_x = @center_x + Math::sin(next_rad_pos) * next_point_distance
66
- end_y = @center_y - Math::cos(next_rad_pos) * next_point_distance
60
+ next_rad_pos = next_index * Math::PI * 2 / column_count
61
+ next_point_distance = data_row.points[next_index] * @radius
62
+ end_x = @center_x + Math.sin(next_rad_pos) * next_point_distance
63
+ end_y = @center_y - Math.cos(next_rad_pos) * next_point_distance
67
64
 
68
- @d = @d.line(start_x, start_y, end_x, end_y)
65
+ Gruff::Renderer::Line.new(color: data_row.color, width: @stroke_width).render(start_x, start_y, end_x, end_y)
69
66
 
70
- @d = @d.circle(start_x, start_y, start_x - circle_radius, start_y) unless @hide_dots
67
+ unless @hide_dots
68
+ circle_renderer = Gruff::Renderer::Circle.new(color: data_row.color, width: @stroke_width)
69
+ circle_renderer.render(start_x, start_y, start_x - @circle_radius, start_y)
70
+ end
71
71
  end
72
-
73
72
  end
74
-
75
- @d.draw(@base_image)
76
73
  end
77
74
 
75
+ private
78
76
 
79
- # the lines connecting in the center, with the first line vertical
80
- def draw_line_markers
81
- return if @hide_line_markers
82
-
77
+ def setup_drawing
78
+ super
83
79
 
84
- # have to do this here (AGAIN)... see draw() in this class
85
- # because this funtion is called before the @radius, @center_x and @center_y are set
86
80
  @radius = @graph_height / 2.0
81
+ @circle_radius = @dot_radius || clip_value_if_greater_than(@columns / (store.norm_data.first.points.size * 2.5), 5.0)
82
+ @stroke_width = @line_width || clip_value_if_greater_than(@columns / (store.norm_data.first.points.size * 4), 5.0)
87
83
  @center_x = @graph_left + (@graph_width / 2.0)
88
- @center_y = @graph_top + (@graph_height / 2.0) - 10 # Move graph up a bit
84
+ @center_y = @graph_top + (@graph_height / 2.0) + 10
85
+ end
89
86
 
87
+ # the lines connecting in the center, with the first line vertical
88
+ def draw_line_markers
89
+ return if @hide_line_markers
90
90
 
91
91
  # Draw horizontal line markers and annotate with numbers
92
- @d = @d.stroke(@marker_color)
93
- @d = @d.stroke_width 1
92
+ (0..column_count - 1).each do |index|
93
+ rad_pos = index * Math::PI * 2 / column_count
94
94
 
95
+ Gruff::Renderer::Line.new(color: @marker_color)
96
+ .render(@center_x, @center_y, @center_x + Math.sin(rad_pos) * @radius, @center_y - Math.cos(rad_pos) * @radius)
95
97
 
96
- (0..@column_count-1).each do |index|
97
- rad_pos = index * Math::PI * 2 / @column_count
98
-
99
- @d = @d.line(@center_x, @center_y, @center_x + Math::sin(rad_pos) * @radius, @center_y - Math::cos(rad_pos) * @radius)
100
-
101
-
102
- marker_label = labels[index] ? labels[index].to_s : '000'
103
-
104
- draw_label(@center_x, @center_y, rad_pos * 360 / (2 * Math::PI), @radius, marker_label)
98
+ marker_label = @labels[index] ? @labels[index].to_s : '000'
99
+ draw_label(@center_x, @center_y, rad_pos * 360 / (2 * Math::PI), @radius + @circle_radius, marker_label)
105
100
  end
106
101
  end
107
102
 
108
- private
109
-
110
103
  def draw_label(center_x, center_y, angle, radius, amount)
111
- r_offset = 1.1
112
104
  x_offset = center_x # + 15 # The label points need to be tweaked slightly
113
105
  y_offset = center_y # + 0 # This one doesn't though
114
- x = x_offset + (radius * r_offset * Math.sin(deg2rad(angle)))
115
- y = y_offset - (radius * r_offset * Math.cos(deg2rad(angle)))
106
+ x = x_offset + (radius + LABEL_MARGIN) * Math.sin(deg2rad(angle))
107
+ y = y_offset - (radius + LABEL_MARGIN) * Math.cos(deg2rad(angle))
116
108
 
117
109
  # Draw label
118
- @d.fill = @marker_color
119
- @d.font = @font if @font
120
- @d.pointsize = scale_fontsize(20)
121
- @d.stroke = 'transparent'
122
- @d.font_weight = BoldWeight
123
- @d.gravity = CenterGravity
124
- @d.annotate_scaled(@base_image, 0, 0, x, y, amount, @scale)
110
+ text_renderer = Gruff::Renderer::Text.new(amount, font: @font, size: 20, color: @marker_color, weight: Magick::BoldWeight)
111
+ text_renderer.add_to_render_queue(0, 0, x, y, Magick::CenterGravity)
125
112
  end
126
-
127
113
  end