Sha256: 9db656f0519428816fdd8f2636b1dceaaf977bad74f3b2e33ea5d2668953e7ea

Contents?: true

Size: 1.69 KB

Versions: 2

Compression:

Stored size: 1.69 KB

Contents

module Squib

  # Cache all pngs we've already loaded
  #
  # :nodoc:
  # @api private
  def cache_load_image(file)
    @img_cache ||= {}
    @img_cache[file] || @img_cache[file] = Cairo::ImageSurface.from_png(file)
  end
  module_function :cache_load_image

  class Card

    # :nodoc:
    # @api private
    def png(file, x, y, alpha, blend, angle)
      Squib.logger.debug {"Rendering: #{file} @#{x},#{y} #{width}x#{height}, alpha: #{alpha}, blend: #{blend}, angle: #{angle}"}
      return if file.nil? or file.eql? ''
      png = Squib.cache_load_image(file)
      use_cairo do |cc|
        cc.translate(x, y)
        cc.rotate(angle)
        cc.translate(-1 * x, -1 * y)
        cc.set_source(png, x, y)
        cc.operator = blend unless blend == :none
        cc.paint(alpha)
      end
    end

    # :nodoc:
    # @api private
    def svg(file, id, x, y, width, height, alpha, blend, angle)
      Squib.logger.debug {"Rendering: #{file}, id: #{id} @#{x},#{y} #{width}x#{height}, alpha: #{alpha}, blend: #{blend}, angle: #{angle}"}
      return if file.nil? or file.eql? ''
      svg = RSVG::Handle.new_from_file(file)
      width = svg.width if width == :native
      height = svg.height if height == :native
      tmp = Cairo::ImageSurface.new(width, height)
      tmp_cc = Cairo::Context.new(tmp)
      tmp_cc.scale(width.to_f / svg.width.to_f, height.to_f / svg.height.to_f)
      tmp_cc.render_rsvg_handle(svg, id)
      use_cairo do |cc|
        cc.translate(x, y)
        cc.rotate(angle)
        cc.translate(-1 * x, -1 * y)
        cc.set_source(tmp, x, y)
        cc.operator = blend unless blend == :none
        cc.paint(alpha)
      end
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
squib-0.0.6 lib/squib/graphics/image.rb
squib-0.0.5 lib/squib/graphics/image.rb