class Prawn::SVG::Calculators::AspectRatio

Attributes

align[R]
defer[R]
height[R]
width[R]
x[R]
y[R]

Public Class Methods

new(value, container_dimensions, object_dimensions) click to toggle source
# File lib/prawn/svg/calculators/aspect_ratio.rb, line 6
def initialize(value, container_dimensions, object_dimensions)
  values = (value || "xMidYMid meet").strip.split(/\s+/)
  @x = @y = 0

  if values.first == "defer"
    @defer = true
    values.shift
  end

  @align, @meet_or_slice = values

  w_container, h_container = container_dimensions
  w_object,    h_object    = object_dimensions

  container_ratio = w_container / h_container.to_f
  object_ratio    = w_object / h_object.to_f

  if @align == "none"
    @width, @height = container_dimensions
  else
    matches = @align.to_s.strip.match(/\Ax(Min|Mid|Max)Y(Min|Mid|Max)\z/i) || [nil, "Mid", "Mid"]

    if (container_ratio > object_ratio) == slice?
      @width, @height = [w_container, w_container / object_ratio]
      @y = case matches[2].downcase
           when "min" then 0
           when "mid" then (h_container - w_container/object_ratio)/2
           when "max" then h_container - w_container/object_ratio
           end
    else
      @width, @height = [h_container * object_ratio, h_container]
      @x = case matches[1].downcase
           when "min" then 0
           when "mid" then (w_container - h_container*object_ratio)/2
           when "max" then w_container - h_container*object_ratio
           end
    end
  end
end

Public Instance Methods

inspect() click to toggle source
# File lib/prawn/svg/calculators/aspect_ratio.rb, line 54
def inspect
  "[AspectRatio: #{@width},#{@height} offset #{@x},#{@y}]"
end
meet?() click to toggle source
# File lib/prawn/svg/calculators/aspect_ratio.rb, line 50
def meet?
  @meet_or_slice != "slice"
end
slice?() click to toggle source
# File lib/prawn/svg/calculators/aspect_ratio.rb, line 46
def slice?
  @meet_or_slice == "slice"
end