class UnicodePlot::DensityCanvas

Constants

DENSITY_SIGNS
MIN_HEIGHT
MIN_WIDTH
X_PIXEL_PER_CHAR
Y_PIXEL_PER_CHAR

Public Class Methods

new(width, height, **kw) click to toggle source
Calls superclass method UnicodePlot::Canvas::new
# File lib/unicode_plot/canvas/density_canvas.rb, line 13
def initialize(width, height, **kw)
  width = [width, MIN_WIDTH].max
  height = [height, MIN_HEIGHT].max
  @max_density = 1
  super(width, height,
        width * X_PIXEL_PER_CHAR,
        height * Y_PIXEL_PER_CHAR,
        0,
        x_pixel_per_char: X_PIXEL_PER_CHAR,
        y_pixel_per_char: Y_PIXEL_PER_CHAR,
        **kw)
end

Public Instance Methods

pixel!(pixel_x, pixel_y, color) click to toggle source
# File lib/unicode_plot/canvas/density_canvas.rb, line 26
def pixel!(pixel_x, pixel_y, color)
  unless 0 <= pixel_x && pixel_x <= pixel_width &&
         0 <= pixel_y && pixel_y <= pixel_height
    return color
  end

  pixel_x -= 1 unless pixel_x < pixel_width
  pixel_y -= 1 unless pixel_y < pixel_height

  char_x = (pixel_x.fdiv(pixel_width) * width).floor
  char_y = (pixel_y.fdiv(pixel_height) * height).floor

  index = index_at(char_x, char_y)
  @grid[index] += 1
  @max_density = [@max_density, @grid[index]].max
  @colors[index] |= COLOR_ENCODE[color]
  color
end
print_row(out, row_index) click to toggle source