gruff 0.7.0-java → 0.12.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 (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