+++ /dev/null
-module Gruff
- module Mini
- module Legend
-
- ##
- # The canvas needs to be bigger so we can put the legend beneath it.
-
- def expand_canvas_for_vertical_legend
- @original_rows = @raw_rows
- @rows += @data.length * calculate_caps_height(scale_fontsize(@legend_font_size)) * 1.7
- render_background
- end
-
- ##
- # Draw the legend beneath the existing graph.
-
- 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 = 40.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 = @graph_left + @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
-
- ##
- # Shorten long labels so they will fit on the canvas.
- #
- # Department of Hu...
-
- def truncate_legend_label(label)
- truncated_label = label.to_s
- while calculate_width(scale_fontsize(@legend_font_size), truncated_label) > (@columns - @legend_left_margin - Gruff::Base::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
-
- end
- end
-end