class Compass::SassExtensions::Sprites::Layout::Vertical

Public Instance Methods

layout!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/vertical.rb, line 7
def layout!
  calculate_width!
  calculate_positions!
  calculate_height!
  tile_images_that_repeat!
end

Private Instance Methods

calculate_height!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/vertical.rb, line 25
def calculate_height!
  last    = @images.last
  @height = last.top + last.height
end
calculate_positions!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/vertical.rb, line 40
def calculate_positions!
  @images.each_with_index do |image, index|
  image.left = (image.position.unit_str == "%" ? (@width - image.width) * (image.position.value / 100.0) : image.position.value).to_i
  next if index == 0
  last_image = @images[index-1]
  image.top = last_image.top + last_image.height + [image.spacing,  last_image.spacing].max
  end #each_with_index
end
calculate_repeat_extra_width!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/vertical.rb, line 34
def calculate_repeat_extra_width!
  m = @images.inject(1) {|m,img| img.repeat_x? ? m.lcm(img.width) : m }
  remainder = @width % m
  @width += (m - remainder) unless remainder.zero?
end
calculate_width!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/vertical.rb, line 16
def calculate_width!
  @width = @images.map { |image| image.width + image.offset }.max
  if repeating_images?
    calculate_repeat_extra_width!
  end

  @width
end
repeating_images?() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/vertical.rb, line 30
def repeating_images?
  @repeating_images ||= @images.any?(&:repeat_x?)
end
tile_images_that_repeat!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/vertical.rb, line 49
def tile_images_that_repeat!
  return unless repeating_images?
  @images.map {|img| img if img.repeat_x?}.compact.each do |image|
    x = image.left - (image.left / image.width).ceil * image.width
    while x < @width do
      begin
        img = image.dup
        img.top = image.top
        img.left = x.to_i
        @images << img
        x += image.width 
      end #begin
    end #while
  end #map
end