Class: Rubyshop::Canvas

Inherits:
Object
  • Object
show all
Defined in:
lib/rubyshop/canvas.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(width, height, &block) ⇒ Canvas

Returns a new instance of Canvas.



5
6
7
8
9
10
11
12
13
# File 'lib/rubyshop/canvas.rb', line 5

def initialize(width, height, &block)
  @image = Magick::Image.new width, height
  @width = width
  @height = height
  @layers = []
  @sets = {}

  self.instance_eval &block if block_given?
end

Instance Attribute Details

#heightObject (readonly)

Returns the value of attribute height.



3
4
5
# File 'lib/rubyshop/canvas.rb', line 3

def height
  @height
end

#widthObject (readonly)

Returns the value of attribute width.



3
4
5
# File 'lib/rubyshop/canvas.rb', line 3

def width
  @width
end

Instance Method Details

#flattenObject



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/rubyshop/canvas.rb', line 42

def flatten
  layers = @layers
  layers.reverse.each do |layer|
    if layer.is_a? Rubyshop::Layer
      @image.composite!(layer.image, layer.offset_x, layer.offset_y, layer.mode)
    elsif layer.is_a? Rubyshop::LayerSet
      layer.layers.reverse.each do |set_layer|
        image.composite!(set_layer.image, set_layer.offset_x, set_layer.offset_y, set_layer.mode)
      end
    end
    @layers.delete(layer) 
  end
end

#layer(filename, &block) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/rubyshop/canvas.rb', line 33

def layer(filename, &block)
  layer = Layer.new filename
  @layers << layer

  layer.instace_eval &block if block_given?

  return layer
end

#layer_set(name, &block) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rubyshop/canvas.rb', line 15

def layer_set(name, &block)
  if name.is_a? Rubyshop::LayerSet
    set = name
    @layers << set
    @sets[set.name] = set 
  elsif @sets[name]
    set = @sets[name]
  else
    set = LayerSet.new name  
    @layers << set
    @sets[name] = set
  end

  set.instance_eval &block if block_given?

  return set
end

#renderObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/rubyshop/canvas.rb', line 56

def render
  image = @image
  @layers.reverse.each do |layer|
    if layer.is_a? Rubyshop::Layer
      image.composite!(layer.image, layer.offset_x, layer.offset_y, layer.mode)
    elsif layer.is_a? Rubyshop::LayerSet
      layer.layers.reverse.each do |set_layer|
        image.composite!(set_layer.image, set_layer.offset_x, set_layer.offset_y, set_layer.mode)
      end
    elsif layer.is_a? Rubyshop::AdjustmentLayer
      # nothing to do 
    elsif layer.is_a? Rubyshop::FillLayer
      # nother to do
    end
  end
  return image
end

#save_as(filename) ⇒ Object



74
75
76
# File 'lib/rubyshop/canvas.rb', line 74

def save_as(filename)
  render.write(filename)
end