Sha256: 102c52bc66443e42d21e68bd7ec9b76c1c3305f60c2a0fea03dcdad26bad0e06

Contents?: true

Size: 1.11 KB

Versions: 18

Compression:

Stored size: 1.11 KB

Contents

class PSD
  class Renderer
    class ClippingMask
      attr_reader :canvas, :mask

      def initialize(canvas)
        @canvas = canvas
        @node = @canvas.node
        
        mask_node = @canvas.node.clipping_mask

        @mask = MaskCanvas.new(mask_node)
      end

      def apply!
        return unless @node.clipped?

        PSD.logger.debug "Applying clipping mask #{mask.node.name} to #{@node.name}"

        @canvas.height.times do |y|
          @canvas.width.times do |x|
            doc_x = @canvas.left + x
            doc_y = @canvas.top + y

            mask_x = doc_x - @mask.left
            mask_y = doc_y - @mask.top

            if mask_x < 0 || mask_x > mask.width || mask_y < 0 || mask_y > mask.height
              alpha = 0
            else
              pixel = mask.canvas.pixels[mask_y * mask.width + mask_x]
              alpha = pixel.nil? ? 0 : ChunkyPNG::Color.a(pixel)
            end
            
            color = @canvas.get_pixel(x, y)
            @canvas.set_pixel x, y, (color & 0xffffff00) | (ChunkyPNG::Color.a(color) * alpha / 255)
          end
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
psd-3.9.0 lib/psd/renderer/clipping_mask.rb
psd-3.8.0 lib/psd/renderer/clipping_mask.rb
psd-3.7.0 lib/psd/renderer/clipping_mask.rb
psd-3.6.0 lib/psd/renderer/clipping_mask.rb
psd-3.5.0 lib/psd/renderer/clipping_mask.rb
psd-3.4.0 lib/psd/renderer/clipping_mask.rb
psd-3.3.3 lib/psd/renderer/clipping_mask.rb
psd-3.3.2 lib/psd/renderer/clipping_mask.rb
psd-3.3.1 lib/psd/renderer/clipping_mask.rb
psd-3.2.4 lib/psd/renderer/clipping_mask.rb
psd-3.2.3 lib/psd/renderer/clipping_mask.rb
psd-3.2.2 lib/psd/renderer/clipping_mask.rb
psd-3.2.1 lib/psd/renderer/clipping_mask.rb
psd-3.2.0 lib/psd/renderer/clipping_mask.rb
psd-3.1.5 lib/psd/renderer/clipping_mask.rb
psd-3.1.4 lib/psd/renderer/clipping_mask.rb
psd-3.1.3 lib/psd/renderer/clipping_mask.rb
psd-3.1.2 lib/psd/renderer/clipping_mask.rb