class WhirledPeas::Graphics::GridPainter

Public Instance Methods

dimensions() click to toggle source
# File lib/whirled_peas/graphics/grid_painter.rb, line 29
def dimensions
  @dimensions ||= begin
    num_cols = settings.num_cols
    num_rows = (num_children.to_f / num_cols).ceil
    content_width = 0
    each_child do |child|
      if child.dimensions.outer_width > content_width
        content_width = child.dimensions.outer_width
      end
    end
    content_height = 0
    each_child do |child|
      if child.dimensions.outer_height > content_height
        content_height = child.dimensions.outer_height
      end
    end
    ContainerDimensions.new(
      settings, content_width, content_height, num_cols, num_rows
    )
  end
end
paint(canvas, left, top, &block) click to toggle source
# File lib/whirled_peas/graphics/grid_painter.rb, line 7
def paint(canvas, left, top, &block)
  super
  return unless canvas.writable?
  each_child.with_index do |child, index|
    col_index, row_index = grid_cell(index)
    left_offset, _ = horiz_justify_offset(child.dimensions.outer_width)
    top_offset, _ = vert_justify_offset(child.dimensions.outer_height)
    child_canvas = canvas.child(
      coords(left, top).content_left(col_index) + left_offset,
      coords(left, top).content_top(row_index) + top_offset,
      [dimensions.content_width, child.dimensions.outer_width].min,
      [dimensions.content_height, child.dimensions.outer_height].min
    )
    child.paint(
      child_canvas,
      coords(left, top).content_left(col_index) + left_offset,
      coords(left, top).content_top(row_index) + top_offset,
      &block
    )
  end
end

Private Instance Methods

grid_cell(index) click to toggle source
# File lib/whirled_peas/graphics/grid_painter.rb, line 53
def grid_cell(index)
  if settings.horizontal_flow?
    col_index, row_index = [index % dimensions.num_cols, index / dimensions.num_cols]
    col_index = dimensions.num_cols - col_index - 1 if settings.reverse_flow?
  else
    col_index, row_index = [index / dimensions.num_rows, index % dimensions.num_rows]
    row_index = dimensions.num_rows - row_index - 1 if settings.reverse_flow?
  end
  [col_index, row_index]
end