class GraphicalEditor::Image

Constants

DEFAULT_COLOR

Public Class Methods

new(m, n) click to toggle source
# File lib/graphical_editor/image.rb, line 6
def initialize(m, n)
  @pixels = default_color_pixels_for(m, n)
end

Public Instance Methods

clear() click to toggle source
# File lib/graphical_editor/image.rb, line 10
def clear
  @pixels.map! do |pixel|
    pixel.map! {DEFAULT_COLOR}
  end
end
colourize(x, y, colour) click to toggle source
# File lib/graphical_editor/image.rb, line 16
def colourize(x, y, colour)
  @pixels[y.pred][x.pred] = colour
end
draw_horizontal(x1, x2, y, colour) click to toggle source
# File lib/graphical_editor/image.rb, line 26
def draw_horizontal(x1, x2, y, colour)
  (x1..x2).each do |x|
    colourize(x, y, colour)
  end
end
draw_vertical(x, y1, y2, colour) click to toggle source
# File lib/graphical_editor/image.rb, line 20
def draw_vertical(x, y1, y2, colour)
  (y1..y2).each do |y|
    colourize(x, y, colour)
  end
end
fill_region(x, y, colour) click to toggle source
# File lib/graphical_editor/image.rb, line 32
def fill_region(x, y, colour)
  target_colour = @pixels[y.pred][x.pred]
  flood_fill(x, y, target_colour, colour)
end
to_s() click to toggle source
# File lib/graphical_editor/image.rb, line 37
def to_s
  @pixels.map {|pixel| pixel.join(' ')}.join("\n")
end

Private Instance Methods

default_color_pixels_for(m, n) click to toggle source
# File lib/graphical_editor/image.rb, line 42
def default_color_pixels_for(m, n)
  [].tap {|pixels| n.times {pixels << Array.new(m, DEFAULT_COLOR)}}
end
flood_fill(x, y, target_colour, replacement_colour) click to toggle source
# File lib/graphical_editor/image.rb, line 46
def flood_fill(x, y, target_colour, replacement_colour)
  if within_bounds(x, y) && @pixels[y.pred][x.pred] == target_colour
    @pixels[y.pred][x.pred] = replacement_colour
    flood_fill(x, y.pred, target_colour, replacement_colour)
    flood_fill(x, y.next, target_colour, replacement_colour)
    flood_fill(x.pred, y, target_colour, replacement_colour)
    flood_fill(x.next, y, target_colour, replacement_colour)
  end
end
within_bounds(x, y) click to toggle source
# File lib/graphical_editor/image.rb, line 56
def within_bounds(x, y)
  x >= 1 && x <= @pixels.first.size &&
  y >= 1 && y <= @pixels.size
end