# class IRB::Canvas

### Public Class Methods

new((h, w)) click to toggle source

    # File lib/irb/easter-egg.rb, line 32
    def initialize((h, w))
      @data = (0..h-2).map { [0] * w }
      @scale = [w / 2.0, h-2].min
      @center = Complex(w / 2, h-2)
    end

### Public Instance Methods

draw() { || ... } click to toggle source

    # File lib/irb/easter-egg.rb, line 55
    def draw
      @data.each {|row| row.fill(0) }
      yield
      @data.map {|row| row.map {|n| " ',;"[n] }.join }.join("\n")
    end

line((x1, y1), (x2, y2)) click to toggle source

    # File lib/irb/easter-egg.rb, line 38
    def line((x1, y1), (x2, y2))
      p1 = Complex(x1, y1) / 2 * @scale + @center
      p2 = Complex(x2, y2) / 2 * @scale + @center
      line0(p1, p2)
    end

### Private Instance Methods

line0(p1, p2) click to toggle source

    # File lib/irb/easter-egg.rb, line 44
            def line0(p1, p2)
      mid = (p1 + p2) / 2
      if (p1 - p2).abs < 1
        x, y = mid.rect
        @data[y / 2][x] |= (y % 2 > 1 ? 2 : 1)
      else
        line0(p1, mid)
        line0(p2, mid)
      end
    end