Module: Gruffy::Mini::Legend
Instance Attribute Summary collapse
-
#hide_mini_legend ⇒ Object
Returns the value of attribute hide_mini_legend.
-
#legend_position ⇒ Object
Returns the value of attribute legend_position.
Instance Method Summary collapse
- #calculate_legend_width ⇒ Object
- #calculate_line_height ⇒ Object
-
#draw_vertical_legend ⇒ Object
Draw the legend beneath the existing graph.
-
#expand_canvas_for_vertical_legend ⇒ Object
The canvas needs to be bigger so we can put the legend beneath it.
- #initialize ⇒ Object
-
#truncate_legend_label(label) ⇒ Object
Shorten long labels so they will fit on the canvas.
Instance Attribute Details
#hide_mini_legend ⇒ Object
Returns the value of attribute hide_mini_legend.
5 6 7 |
# File 'lib/gruffy/mini/legend.rb', line 5 def hide_mini_legend @hide_mini_legend end |
#legend_position ⇒ Object
Returns the value of attribute legend_position.
5 6 7 |
# File 'lib/gruffy/mini/legend.rb', line 5 def legend_position @legend_position end |
Instance Method Details
#calculate_legend_width ⇒ Object
42 43 44 45 |
# File 'lib/gruffy/mini/legend.rb', line 42 def calculate_legend_width width = @legend_labels.map { |label| calculate_width(@legend_font_size, label) }.max scale_fontsize(width + 40*1.7) end |
#calculate_line_height ⇒ Object
38 39 40 |
# File 'lib/gruffy/mini/legend.rb', line 38 def calculate_line_height calculate_caps_height(@legend_font_size) * 1.7 end |
#draw_vertical_legend ⇒ Object
Draw the legend beneath the existing graph.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/gruffy/mini/legend.rb', line 50 def draw_vertical_legend return if @hide_mini_legend legend_square_width = 40.0 # small square with color of this item @legend_left_margin = 100.0 legend_top_margin = 40.0 # May fix legend drawing problem at small sizes @d.font = @font if @font @d.pointsize = @legend_font_size case @legend_position when :right then current_x_offset = @original_columns + @left_margin current_y_offset = @top_margin + legend_top_margin else current_x_offset = @legend_left_margin current_y_offset = @original_rows + legend_top_margin end debug { @d.line 0.0, current_y_offset, @raw_columns, current_y_offset } @legend_labels.each_with_index do |legend_label, index| # Draw label @d.fill = @font_color @d.font = @font if @font @d.pointsize = scale_fontsize(@legend_font_size) @d.stroke = 'transparent' @d.font_weight = Magick::NormalWeight @d.gravity = Magick::WestGravity @d = @d.annotate_scaled( @base_image, @raw_columns, 1.0, current_x_offset + (legend_square_width * 1.7), current_y_offset, truncate_legend_label(legend_label), @scale) # Now draw box with color of this dataset @d = @d.stroke 'transparent' @d = @d.fill @data[index][Gruffy::Base::DATA_COLOR_INDEX] @d = @d.rectangle(current_x_offset, current_y_offset - legend_square_width / 2.0, current_x_offset + legend_square_width, current_y_offset + legend_square_width / 2.0) current_y_offset += calculate_line_height end @color_index = 0 end |
#expand_canvas_for_vertical_legend ⇒ Object
The canvas needs to be bigger so we can put the legend beneath it.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/gruffy/mini/legend.rb', line 16 def return if @hide_mini_legend @legend_labels = @data.collect {|item| item[Gruffy::Base::DATA_LABEL_INDEX] } legend_height = scale_fontsize( @data.length * calculate_line_height + @top_margin + @bottom_margin) @original_rows = @raw_rows @original_columns = @raw_columns case @legend_position when :right then @rows = [@rows, legend_height].max @columns += calculate_legend_width + @left_margin else @rows += @data.length * calculate_caps_height(scale_fontsize(@legend_font_size)) * 1.7 end render_background end |
#initialize ⇒ Object
7 8 9 10 11 |
# File 'lib/gruffy/mini/legend.rb', line 7 def initialize(*) @hide_mini_legend = false @legend_position = nil super end |
#truncate_legend_label(label) ⇒ Object
Shorten long labels so they will fit on the canvas.
Department of Hu...
104 105 106 107 108 109 110 |
# File 'lib/gruffy/mini/legend.rb', line 104 def truncate_legend_label(label) truncated_label = label.to_s while calculate_width(scale_fontsize(@legend_font_size), truncated_label) > (@columns - @legend_left_margin - @right_margin) && (truncated_label.length > 1) truncated_label = truncated_label[0..truncated_label.length-2] end truncated_label + (truncated_label.length < label.to_s.length ? "..." : '') end |