class WhirledPeas::Graphics::PixelGrid

Constants

Pixel

Attributes

pixels[R]

Public Class Methods

new(width, height) click to toggle source
# File lib/whirled_peas/graphics/pixel_grid.rb, line 6
def initialize(width, height)
  @pixels = Array.new(height) { Array.new(width) { Pixel.new } }
end

Public Instance Methods

add_stroke(left, top, fstring) click to toggle source
# File lib/whirled_peas/graphics/pixel_grid.rb, line 10
def add_stroke(left, top, fstring)
  fstring.each_char.with_index do |char, offset|
    pixels[top][left + offset].char = char
    pixels[top][left + offset].formatting = fstring.formatting
  end
end
diff(other) click to toggle source
# File lib/whirled_peas/graphics/pixel_grid.rb, line 21
def diff(other)
  str = ''
  formatting = nil
  chars = ''
  pixels.each.with_index do |row, row_index|
    row.each.with_index do |pixel, col_index|
      if pixel == other.pixel_at(col_index, row_index)
        if chars != ''
          str += Utils::FormattedString.new(chars, formatting).to_s
          chars = ''
          formatting = nil
        end
      elsif chars == ''
        str += Utils::Ansi.cursor_pos(left: col_index, top: row_index)
        chars = pixel.char
        formatting = pixel.formatting
      elsif formatting != pixel.formatting
        str += Utils::FormattedString.new(chars, formatting).to_s
        chars = pixel.char
        formatting = pixel.formatting
      else
        chars += pixel.char
      end
    end
  end
  if chars != ''
    str += chars
    chars = ''
    formatting = nil
  end
  str
end
pixel_at(col, row) click to toggle source
# File lib/whirled_peas/graphics/pixel_grid.rb, line 17
def pixel_at(col, row)
  pixels[row][col]
end
to_s() click to toggle source
# File lib/whirled_peas/graphics/pixel_grid.rb, line 54
def to_s
  str = Utils::Ansi.cursor_pos(left: 0, top: 0) + Utils::Ansi.clear_down
  formatting = nil
  chars = ''
  pixels.each.with_index do |row, row_offset|
    str += Utils::Ansi.cursor_pos(left: 0, top: row_offset) if row_offset > 0
    row.each do |pixel|
      if pixel.formatting != formatting
        str += Utils::FormattedString.new(chars, formatting).to_s if chars != ''
        chars = ''
        formatting = pixel.formatting
      end
      chars << pixel.char
    end
    if chars != ''
      str += Utils::FormattedString.new(chars, formatting).to_s
      chars = ''
    end
  end
  str
end