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 219
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 185
def add_composite_primitive(gc)
    if @align == 'none'
        # Let RMagick do the scaling
        scale = 1.0
        width, height = @width, @height
    elsif @meet_or_slice == 'meet'
        scale = [@width/@image.columns, @height/@image.rows].min
        width, height = @image.columns, @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, height = @image.columns, @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 164
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 208
def init_viewbox
    @align = nil
    @vbx_width, @vbx_height = @image.columns, @image.rows
    @meet_or_slice = 'meet'
end