horizontal sprite layout
This commit is contained in:
parent
8d2ad57e18
commit
18c79f51a2
@ -9,6 +9,7 @@ module Compass
|
||||
end
|
||||
|
||||
require 'compass/sass_extensions/sprites/image'
|
||||
require 'compass/sass_extensions/sprites/layout_methods'
|
||||
require 'compass/sass_extensions/sprites/sprite_methods'
|
||||
require 'compass/sass_extensions/sprites/image_methods'
|
||||
require 'compass/sass_extensions/sprites/sprite_map'
|
||||
|
85
lib/compass/sass_extensions/sprites/layout_methods.rb
Normal file
85
lib/compass/sass_extensions/sprites/layout_methods.rb
Normal file
@ -0,0 +1,85 @@
|
||||
module Compass
|
||||
module SassExtensions
|
||||
module Sprites
|
||||
module LayoutMethods
|
||||
HORIZONTAL = 'horizontal'
|
||||
|
||||
def horizontal?
|
||||
@kwargs.get_var('layout').value == HORIZONTAL
|
||||
end
|
||||
|
||||
# Calculates the overal image dimensions
|
||||
# collects image sizes and input parameters for each sprite
|
||||
def compute_image_positions!
|
||||
if horizontal?
|
||||
calculate_height
|
||||
calculate_horizontal_positions
|
||||
calculate_width
|
||||
else
|
||||
calculate_width
|
||||
calulate_vertical_postions
|
||||
calculate_height
|
||||
end
|
||||
end
|
||||
|
||||
def calculate_horizontal_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.offset, last_image.offset].max
|
||||
end
|
||||
end
|
||||
|
||||
def calulate_vertical_postions
|
||||
@images.each_with_index do |image, index|
|
||||
image.left = image.position.unit_str == "%" ? (@width - image.width) * (image.position.value / 100.0) : image.position.value
|
||||
next if index == 0
|
||||
last_image = @images[index-1]
|
||||
image.top = last_image.top + last_image.height + [image.spacing, last_image.spacing].max
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def calculate_dimensions!
|
||||
calculate_width
|
||||
calculate_height
|
||||
end
|
||||
|
||||
def calculate_height
|
||||
@height = if horizontal?
|
||||
height_for_horizontal_layout
|
||||
else
|
||||
height_for_vertical_layout
|
||||
end
|
||||
end
|
||||
|
||||
def height_for_vertical_layout
|
||||
last = @images.last
|
||||
last.top + last.height
|
||||
end
|
||||
|
||||
def height_for_horizontal_layout
|
||||
@height = @images.map {|image| image.height + image.spacing}.max
|
||||
end
|
||||
|
||||
def calculate_width
|
||||
@width = if horizontal?
|
||||
width_for_horizontal_layout
|
||||
else
|
||||
width_for_vertical_layout
|
||||
end
|
||||
end
|
||||
|
||||
def width_for_horizontal_layout
|
||||
@images.inject(0) { |sum, image| sum += (image.width + image.offset) }
|
||||
end
|
||||
|
||||
def width_for_vertical_layout
|
||||
@images.map { |image| image.width + image.offset }.max
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -7,6 +7,7 @@ module Compass
|
||||
|
||||
include SpriteMethods
|
||||
include ImageMethods
|
||||
include LayoutMethods
|
||||
|
||||
|
||||
# Initialize a new sprite object from a relative file path
|
||||
@ -27,6 +28,7 @@ module Compass
|
||||
@name = name
|
||||
@kwargs = kwargs
|
||||
@kwargs['cleanup'] ||= Sass::Script::Bool.new(true)
|
||||
@kwargs['layout'] ||= Sass::Script::String.new('vertical')
|
||||
@images = nil
|
||||
@width = nil
|
||||
@height = nil
|
||||
|
@ -14,7 +14,6 @@ module Compass
|
||||
@width = 0
|
||||
init_images
|
||||
compute_image_positions!
|
||||
@height = @images.last.top + @images.last.height
|
||||
init_engine
|
||||
end
|
||||
|
||||
@ -29,22 +28,10 @@ module Compass
|
||||
def init_images
|
||||
@images = image_names.collect do |relative_file|
|
||||
image = Compass::SassExtensions::Sprites::Image.new(self, relative_file, kwargs)
|
||||
@width = [ @width, image.width + image.offset ].max
|
||||
image
|
||||
end
|
||||
end
|
||||
|
||||
# Calculates the overal image dimensions
|
||||
# collects image sizes and input parameters for each sprite
|
||||
def compute_image_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
|
||||
next if index == 0
|
||||
last_image = @images[index-1]
|
||||
image.top = last_image.top + last_image.height + [image.spacing, last_image.spacing].max
|
||||
end
|
||||
end
|
||||
|
||||
# Validates that the sprite_names are valid sass
|
||||
def validate!
|
||||
for sprite_name in sprite_names
|
||||
|
Loading…
Reference in New Issue
Block a user