Class: PSD::Renderer::Mask

Inherits:
Object
  • Object
show all
Defined in:
lib/psd/renderer/mask.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(canvas) ⇒ Mask

Returns a new instance of Mask.



6
7
8
9
10
11
12
13
14
# File 'lib/psd/renderer/mask.rb', line 6

def initialize(canvas)
  @canvas = canvas
  @layer = canvas.node

  @mask_data = @layer.image.mask_data

  @doc_width = @layer.header.width.to_i
  @doc_height = @layer.header.height.to_i
end

Instance Attribute Details

#mask_dataObject

Returns the value of attribute mask_data.



4
5
6
# File 'lib/psd/renderer/mask.rb', line 4

def mask_data
  @mask_data
end

Instance Method Details

#apply!Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/psd/renderer/mask.rb', line 16

def apply!
  PSD.logger.debug "Applying mask to #{@layer.name}"
  
  # Now we apply the mask
  i = 0
  @layer.mask.height.times do |y|
    @layer.mask.width.times do |x|
      doc_x = @layer.mask.left + x
      doc_y = @layer.mask.top + y

      layer_x = doc_x - @layer.left
      layer_y = doc_y - @layer.top

      next unless @canvas.canvas.include_xy?(layer_x, layer_y)
      color = ChunkyPNG::Color.to_truecolor_alpha_bytes(@canvas[layer_x, layer_y])

      # We're off the document canvas. Crop.
      if doc_x < 0 || doc_x > @doc_width || doc_y < 0 || doc_y > @doc_height
        color[3] = 0
      else
        color[3] = color[3] * @mask_data[i] / 255
      end 

      @canvas[layer_x, layer_y] = ChunkyPNG::Color.rgba(*color)
      i += 1
    end
  end
end