class Dieses::Application::Pen::Draw

Constants

Offsite

Attributes

buffer[R]
pen[R]
pos[R]
ruler[R]

Public Class Methods

call(pen, ruler, &block) click to toggle source
# File lib/dieses/application/pen.rb, line 23
def self.call(pen, ruler, &block)
  Draw.new(pen, ruler).(&block)
end
new(pen, ruler, pos: Undefined) click to toggle source
# File lib/dieses/application/pen.rb, line 27
def initialize(pen, ruler, pos: Undefined)
  @pen    = pen
  @pos    = Undefined.default(pos, Geometry::Point::Mutable.cast(canvas.position))
  @ruler  = ruler
  @buffer = Set.new
end

Public Instance Methods

call(&block) click to toggle source
# File lib/dieses/application/pen.rb, line 48
def call(&block)
  instance_exec(&block)
  put
end
repeat(count = nil, &block) click to toggle source
# File lib/dieses/application/pen.rb, line 34
def repeat(count = nil, &block)
  self.class.new(pen, ruler, pos: pos.dup).instance_exec do
    1.step(count) do
      prev = pos.dup
      instance_exec(&block)
      put

      break if pos == prev || perfect.outside?(pos)
    rescue Offsite
      break
    end
  end
end

Private Instance Methods

perfect() click to toggle source
# File lib/dieses/application/pen.rb, line 57
def perfect
  @perfect ||= Geometry::Rect.new(ruler.even(canvas.width), ruler.even(canvas.height))
end