Module: Gruff::Mini::Legend

Included in:
Bar, Pie, SideBar
Defined in:
lib/gruff/mini/legend.rb

Instance Method Summary collapse

Instance Method Details

#draw_vertical_legendObject

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_legendObject

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 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

#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