Class: Gruff::PhotoBar

Inherits:
Base
  • Object
show all
Defined in:
lib/gruff/photo_bar.rb

Overview

EXPERIMENTAL!

Doesn’t work yet.

Constant Summary

Constants inherited from Base

Base::DATA_COLOR_INDEX, Base::DATA_LABEL_INDEX, Base::DATA_VALUES_INDEX, Base::DEBUG, Base::DEFAULT_TARGET_WIDTH, Base::LEGEND_MARGIN

Instance Attribute Summary collapse

Attributes inherited from Base

#additional_line_values, #bottom_margin, #center_labels_over_point, #colors, #font, #font_color, #has_left_labels, #hide_legend, #hide_line_markers, #hide_line_numbers, #hide_title, #labels, #left_margin, #legend_box_size, #legend_font_size, #marker_color, #marker_count, #marker_font_size, #maximum_value, #minimum_value, #no_data_message, #right_margin, #sort, #stacked, #title, #title_font_size, #top_margin, #x_axis_label, #y_axis_increment, #y_axis_label

Instance Method Summary collapse

Methods inherited from Base

#add_color, #data, #initialize, #initialize_ivars, #margins=, #replace_colors, #theme=, #theme_37signals, #theme_greyscale, #theme_keynote, #theme_odeo, #theme_pastel, #theme_rails_keynote, #to_blob, #write

Methods included from Deprecated

#graph_height, #graph_left, #graph_top, #graph_width, #scale_measurements, #total_height

Constructor Details

This class inherits a constructor from Gruff::Base

Instance Attribute Details

#themeObject (readonly)

Return the chosen theme or the default



19
20
21
# File 'lib/gruff/photo_bar.rb', line 19

def theme
  @theme
end

Instance Method Details

#drawObject

def initialize(target_width=800)

  super
  init_photo_bar_graphics()
end


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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/gruff/photo_bar.rb', line 26

def draw
  super
  return unless @has_data

  return # TODO Remove for further development

  init_photo_bar_graphics()
  
  #Draw#define_clip_path()
  #Draw#clip_path(pathname)
  #Draw#composite....with bar graph image OverCompositeOp
  #
  # See also
  #
  # Draw.pattern # define an image to tile as the filling of a draw object
  # 

  # Setup spacing.
  #
  # Columns sit side-by-side.
  spacing_factor = 0.9
  @bar_width = @norm_data[0][DATA_COLOR_INDEX].columns

  @norm_data.each_with_index do |data_row, row_index|

    data_row[DATA_VALUES_INDEX].each_with_index do |data_point, point_index|
      data_point = 0 if data_point.nil?
      # Use incremented x and scaled y
      left_x = @graph_left + (@bar_width * (row_index + point_index + ((@data.length - 1) * point_index)))
      left_y = @graph_top + (@graph_height - data_point * @graph_height) + 1
      right_x = left_x + @bar_width * spacing_factor
      right_y = @graph_top + @graph_height - 1
    
      bar_image_width = data_row[DATA_COLOR_INDEX].columns
      bar_image_height = right_y.to_f - left_y.to_f
    
      # Crop to scale for data
      bar_image = data_row[DATA_COLOR_INDEX].crop(0, 0, bar_image_width, bar_image_height)
      
      @d.gravity = NorthWestGravity
      @d = @d.composite(left_x, left_y, bar_image_width, bar_image_height, bar_image)
    
      # Calculate center based on bar_width and current row
      label_center = @graph_left + (@data.length * @bar_width * point_index) + (@data.length * @bar_width / 2.0)
      draw_label(label_center, point_index)
    end

  end

  @d.draw(@base_image)    
end