Module: Gruff::Mini::Legend
Instance Method Summary collapse
-
#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 Method Details
#draw_vertical_legend ⇒ Object
Draw the legend beneath the existing graph.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/gruff/mini/legend.rb', line 17 def draw_vertical_legend @legend_labels = @data.collect {|item| item[Gruff::Base::DATA_LABEL_INDEX] } 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 current_x_offset = @legend_left_margin current_y_offset = @original_rows + legend_top_margin 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_caps_height(@legend_font_size) * 1.7 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.
8 9 10 11 12 |
# File 'lib/gruff/mini/legend.rb', line 8 def @original_rows = @raw_rows @rows += @data.length * calculate_caps_height(scale_fontsize(@legend_font_size)) * 1.7 render_background end |
#truncate_legend_label(label) ⇒ Object
Shorten long labels so they will fit on the canvas.
Department of Hu...
67 68 69 70 71 72 73 |
# File 'lib/gruff/mini/legend.rb', line 67 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 |