class Compass::SassExtensions::Sprites::Layout::Horizontal

Public Instance Methods

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

Private Instance Methods

calculate_height!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/horizontal.rb, line 16
def calculate_height!
  @height = @images.map {|image| image.height + image.offset}.max
  if repeating_images?
    calculate_repeat_extra_height!
  end
  @height
end
calculate_positions!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/horizontal.rb, line 38
def calculate_positions!
  @images.each_with_index do |image, index|
    image.top = image.position.unit_str == '%' ? (@height - image.height) * (image.position.value / 100.0) : image.position.value
    next if index == 0
    last_image = @images[index-1]
    image.left = last_image.left + last_image.width + [image.spacing, last_image.spacing].max
  end
end
calculate_repeat_extra_height!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/horizontal.rb, line 32
def calculate_repeat_extra_height!
  m = @images.inject(1) {|m,img| img.repeat_y? ? m.lcm(img.height) : m }
  remainder = @height % m
  @height += (m - remainder) unless remainder.zero?
end
calculate_width!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/horizontal.rb, line 24
def calculate_width!
  @width = @images.inject(0) { |sum, image| sum += (image.width + image.spacing) }
end
repeating_images?() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/horizontal.rb, line 28
def repeating_images?
  @repeating_images ||= @images.any?(&:repeat_y?)
end
tile_images_that_repeat!() click to toggle source
# File lib/compass/sass_extensions/sprites/layout/horizontal.rb, line 47
def tile_images_that_repeat!
  return unless repeating_images?
  @images.map {|img| img if img.repeat_y?}.compact.each do |image|
    y = (image.top + image.height)
    while y < @height do
      begin
        img = image.dup
        img.top = y.to_i
        @images << img
        y += image.height
      end 
    end #while
  end 
end