Module Gruff::Mini::Legend
In: lib/gruff/mini/legend.rb

Methods

Attributes

hide_mini_legend  [RW] 

Public Instance methods

Draw the legend beneath the existing graph.

[Source]

# File lib/gruff/mini/legend.rb, line 21
      def draw_vertical_legend
        return if @hide_mini_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

The canvas needs to be bigger so we can put the legend beneath it.

[Source]

# File lib/gruff/mini/legend.rb, line 10
      def expand_canvas_for_vertical_legend
        return if @hide_mini_legend
        
        @original_rows = @raw_rows
        @rows += @data.length * calculate_caps_height(scale_fontsize(@legend_font_size)) * 1.7
        render_background
      end

Shorten long labels so they will fit on the canvas.

  Department of Hu...

[Source]

# File lib/gruff/mini/legend.rb, line 72
      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

[Validate]