class Magick::RVG::Image

Public Class Methods

new(image, width = nil, height = nil, x = 0, y = 0) click to toggle source

Composite a raster image in the viewport defined by [x,y] and width and height. Use the Magick::RVG::ImageConstructors#image method to create Text objects in a container.

Calls superclass method Magick::RVG::Transformable.new
# File lib/rvg/embellishable.rb, line 222
def initialize(image, width = nil, height = nil, x = 0, y = 0)
  super()             # run module initializers
  @image = image.copy # use a copy of the image in case app. re-uses the argument
  @x, @y, @width, @height = Magick::RVG.convert_to_float(x, y, width || @image.columns, height || @image.rows)
  if @width < 0 || @height < 0
    fail ArgumentError, 'width, height must be >= 0'
  end
  init_viewbox
end

Private Instance Methods

add_composite_primitive(gc) click to toggle source
# File lib/rvg/embellishable.rb, line 184
def add_composite_primitive(gc)
  if @align == 'none'
    # Let RMagick do the scaling
    scale = 1.0
    width = @width
    height = @height
  elsif @meet_or_slice == 'meet'
    scale = [@width/@image.columns, @height/@image.rows].min
    width = @image.columns
    height = @image.rows
  else
    # Establish clipping path around the current viewport
    name = __id__.to_s
    gc.define_clip_path(name) do
      gc.path("M#{@x},#{@y} l#{@width},0 l0,#{@height} l-#{@width},0 l0,-#{@height}z")
    end

    gc.clip_path(name)
    scale = [@width/@image.columns, @height/@image.rows].max
    width = @image.columns
    height = @image.rows
  end
  tx, ty = align_to_viewport(scale)
  gc.composite(@x+tx, @y+ty, width*scale, height*scale, @image)
end
align_to_viewport(scale) click to toggle source
# File lib/rvg/embellishable.rb, line 163
def align_to_viewport(scale)
  tx = case @align
      when 'none', /\AxMin/
        0
      when NilClass, /\AxMid/
        (@width - @image.columns*scale) / 2.0
      when /\AxMax/
        @width - @image.columns*scale
  end

  ty = case @align
      when 'none', /YMin\z/
        0
      when NilClass, /YMid\z/
        (@height - @image.rows*scale) / 2.0
      when /YMax\z/
        @height - @image.rows*scale
  end
  [tx, ty]
end
init_viewbox() click to toggle source
# File lib/rvg/embellishable.rb, line 210
def init_viewbox
  @align = nil
  @vbx_width = @image.columns
  @vbx_height = @image.rows
  @meet_or_slice = 'meet'
end