Module: Gruff::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.
-
#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/gruff/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/gruff/mini/legend.rb', line 5 def legend_position @legend_position end |
Instance Method Details
#calculate_legend_width ⇒ Object
36 37 38 39 |
# File 'lib/gruff/mini/legend.rb', line 36 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
32 33 34 |
# File 'lib/gruff/mini/legend.rb', line 32 def calculate_line_height calculate_caps_height(@legend_font_size) * 1.7 end |
#draw_vertical_legend ⇒ Object
Draw the legend beneath the existing graph.
44 45 46 47 48 49 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 |
# File 'lib/gruff/mini/legend.rb', line 44 def draw_vertical_legend return if @hide_mini_legend legend_square_width = 40.0 # small square with color of this item legend_square_margin = 10.0 @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][Gruff::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.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/gruff/mini/legend.rb', line 10 def return if @hide_mini_legend @legend_labels = @data.collect {|item| item[Gruff::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 |
#truncate_legend_label(label) ⇒ Object
Shorten long labels so they will fit on the canvas.
Department of Hu...
99 100 101 102 103 104 105 |
# File 'lib/gruff/mini/legend.rb', line 99 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 |