lash-sprites 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +165 -0
  4. data/README +38 -0
  5. data/Rakefile +38 -0
  6. data/examples/css/css.rb +17 -0
  7. data/examples/css/css_cli.rb +29 -0
  8. data/examples/example_imgs/1.png +0 -0
  9. data/examples/example_imgs/10.png +0 -0
  10. data/examples/example_imgs/11.png +0 -0
  11. data/examples/example_imgs/12.png +0 -0
  12. data/examples/example_imgs/13.png +0 -0
  13. data/examples/example_imgs/14.png +0 -0
  14. data/examples/example_imgs/15.png +0 -0
  15. data/examples/example_imgs/16.png +0 -0
  16. data/examples/example_imgs/17.png +0 -0
  17. data/examples/example_imgs/18.png +0 -0
  18. data/examples/example_imgs/19.png +0 -0
  19. data/examples/example_imgs/2.png +0 -0
  20. data/examples/example_imgs/20.png +0 -0
  21. data/examples/example_imgs/21.png +0 -0
  22. data/examples/example_imgs/22.png +0 -0
  23. data/examples/example_imgs/23.png +0 -0
  24. data/examples/example_imgs/24.png +0 -0
  25. data/examples/example_imgs/25.png +0 -0
  26. data/examples/example_imgs/26.png +0 -0
  27. data/examples/example_imgs/27.png +0 -0
  28. data/examples/example_imgs/28.png +0 -0
  29. data/examples/example_imgs/29.png +0 -0
  30. data/examples/example_imgs/3.png +0 -0
  31. data/examples/example_imgs/30.png +0 -0
  32. data/examples/example_imgs/31.png +0 -0
  33. data/examples/example_imgs/32.png +0 -0
  34. data/examples/example_imgs/33.png +0 -0
  35. data/examples/example_imgs/34.png +0 -0
  36. data/examples/example_imgs/35.png +0 -0
  37. data/examples/example_imgs/36.png +0 -0
  38. data/examples/example_imgs/37.png +0 -0
  39. data/examples/example_imgs/38.png +0 -0
  40. data/examples/example_imgs/39.png +0 -0
  41. data/examples/example_imgs/4.png +0 -0
  42. data/examples/example_imgs/40.png +0 -0
  43. data/examples/example_imgs/41.png +0 -0
  44. data/examples/example_imgs/42.png +0 -0
  45. data/examples/example_imgs/43.png +0 -0
  46. data/examples/example_imgs/44.png +0 -0
  47. data/examples/example_imgs/45.png +0 -0
  48. data/examples/example_imgs/46.png +0 -0
  49. data/examples/example_imgs/47.png +0 -0
  50. data/examples/example_imgs/48.png +0 -0
  51. data/examples/example_imgs/49.png +0 -0
  52. data/examples/example_imgs/5.png +0 -0
  53. data/examples/example_imgs/50.png +0 -0
  54. data/examples/example_imgs/51.png +0 -0
  55. data/examples/example_imgs/52.png +0 -0
  56. data/examples/example_imgs/53.png +0 -0
  57. data/examples/example_imgs/54.png +0 -0
  58. data/examples/example_imgs/55.png +0 -0
  59. data/examples/example_imgs/56.png +0 -0
  60. data/examples/example_imgs/57.png +0 -0
  61. data/examples/example_imgs/58.png +0 -0
  62. data/examples/example_imgs/59.png +0 -0
  63. data/examples/example_imgs/6.png +0 -0
  64. data/examples/example_imgs/60.png +0 -0
  65. data/examples/example_imgs/7.png +0 -0
  66. data/examples/example_imgs/8.png +0 -0
  67. data/examples/example_imgs/9.png +0 -0
  68. data/examples/packing/packing.rb +19 -0
  69. data/lash-sprites.gemspec +21 -0
  70. data/lib/.DS_Store +0 -0
  71. data/lib/lash-sprites/.DS_Store +0 -0
  72. data/lib/lash-sprites/block.rb +34 -0
  73. data/lib/lash-sprites/css.rb +27 -0
  74. data/lib/lash-sprites/graphics_manager/gd2.rb +43 -0
  75. data/lib/lash-sprites/graphics_manager/graphics_manager.rb +22 -0
  76. data/lib/lash-sprites/graphics_manager/rmagick.rb +45 -0
  77. data/lib/lash-sprites/image.rb +46 -0
  78. data/lib/lash-sprites/packer/both_smart.rb +90 -0
  79. data/lib/lash-sprites/packer/both_split.rb +171 -0
  80. data/lib/lash-sprites/packer/even.rb +78 -0
  81. data/lib/lash-sprites/packer/horizontal_smart.rb +72 -0
  82. data/lib/lash-sprites/packer/horizontal_split.rb +156 -0
  83. data/lib/lash-sprites/packer/horizontal_stack.rb +22 -0
  84. data/lib/lash-sprites/packer/ratio.rb +94 -0
  85. data/lib/lash-sprites/packer/vertical_smart.rb +72 -0
  86. data/lib/lash-sprites/packer/vertical_split.rb +164 -0
  87. data/lib/lash-sprites/packer/vertical_stack.rb +23 -0
  88. data/lib/lash-sprites/sprite.rb +272 -0
  89. data/lib/lash-sprites/version.rb +5 -0
  90. data/test/b_graphics.rb +37 -0
  91. data/test/b_packers.rb +53 -0
  92. data/test/imgs/1.png +0 -0
  93. data/test/imgs/10.png +0 -0
  94. data/test/imgs/11.png +0 -0
  95. data/test/imgs/12.png +0 -0
  96. data/test/imgs/13.png +0 -0
  97. data/test/imgs/14.png +0 -0
  98. data/test/imgs/15.png +0 -0
  99. data/test/imgs/16.png +0 -0
  100. data/test/imgs/17.png +0 -0
  101. data/test/imgs/18.png +0 -0
  102. data/test/imgs/19.png +0 -0
  103. data/test/imgs/2.png +0 -0
  104. data/test/imgs/20.png +0 -0
  105. data/test/imgs/21.png +0 -0
  106. data/test/imgs/22.png +0 -0
  107. data/test/imgs/23.png +0 -0
  108. data/test/imgs/24.png +0 -0
  109. data/test/imgs/25.png +0 -0
  110. data/test/imgs/26.png +0 -0
  111. data/test/imgs/27.png +0 -0
  112. data/test/imgs/28.png +0 -0
  113. data/test/imgs/29.png +0 -0
  114. data/test/imgs/3.png +0 -0
  115. data/test/imgs/30.png +0 -0
  116. data/test/imgs/31.png +0 -0
  117. data/test/imgs/32.png +0 -0
  118. data/test/imgs/33.png +0 -0
  119. data/test/imgs/34.png +0 -0
  120. data/test/imgs/35.png +0 -0
  121. data/test/imgs/36.png +0 -0
  122. data/test/imgs/37.png +0 -0
  123. data/test/imgs/38.png +0 -0
  124. data/test/imgs/39.png +0 -0
  125. data/test/imgs/4.png +0 -0
  126. data/test/imgs/40.png +0 -0
  127. data/test/imgs/41.png +0 -0
  128. data/test/imgs/42.png +0 -0
  129. data/test/imgs/43.png +0 -0
  130. data/test/imgs/44.png +0 -0
  131. data/test/imgs/45.png +0 -0
  132. data/test/imgs/46.png +0 -0
  133. data/test/imgs/47.png +0 -0
  134. data/test/imgs/48.png +0 -0
  135. data/test/imgs/49.png +0 -0
  136. data/test/imgs/5.png +0 -0
  137. data/test/imgs/50.png +0 -0
  138. data/test/imgs/51.png +0 -0
  139. data/test/imgs/52.png +0 -0
  140. data/test/imgs/53.png +0 -0
  141. data/test/imgs/54.png +0 -0
  142. data/test/imgs/55.png +0 -0
  143. data/test/imgs/56.png +0 -0
  144. data/test/imgs/57.png +0 -0
  145. data/test/imgs/58.png +0 -0
  146. data/test/imgs/59.png +0 -0
  147. data/test/imgs/6.png +0 -0
  148. data/test/imgs/60.png +0 -0
  149. data/test/imgs/7.png +0 -0
  150. data/test/imgs/8.png +0 -0
  151. data/test/imgs/9.png +0 -0
  152. data/test/t_gd2.rb +28 -0
  153. data/test/t_generic.rb +183 -0
  154. data/test/t_rmagick.rb +29 -0
  155. metadata +269 -0
data/test/b_packers.rb ADDED
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/ruby
2
+
3
+ test_dir = File.dirname(__FILE__)
4
+
5
+ $:.unshift File.join(test_dir, '../lib')
6
+
7
+ require 'ruby_sprites/sprite'
8
+ require 'benchmark'
9
+
10
+ n = 50
11
+ puts "#{n} Iterations"
12
+
13
+ file_data = []
14
+
15
+ Benchmark.bmbm(17) do |r|
16
+ Dir.entries(File.join(test_dir, '../lib/ruby_sprites/packer')).sort.each do |f|
17
+ next unless f.match(/\.rb$/)
18
+
19
+ class_name = f.gsub('.rb', '').capitalize.gsub(/_([a-z]+)/) {|x| $1.capitalize}
20
+ file_name = f.gsub('.rb', '')
21
+
22
+ require "ruby_sprites/packer/#{file_name}"
23
+
24
+ sprite = RubySprites::Sprite.new("#{class_name}.png", test_dir, {:force_update => true, :pack_type => file_name})
25
+
26
+ (1..60).each do |x|
27
+ sprite.add_image("imgs/#{x}.png")
28
+ end
29
+
30
+ sprite.update
31
+
32
+ file_data.push [class_name, sprite.width, sprite.height, File.size(File.join(test_dir, "#{class_name}.png"))]
33
+
34
+ r.report(class_name) {
35
+ n.times {
36
+ sprite = RubySprites::Sprite.new("#{class_name}.png", test_dir, {:force_update => true, :write_files => false, :pack_type => file_name})
37
+ (1..60).each do |x|
38
+ sprite.add_image("imgs/#{x}.png")
39
+ end
40
+
41
+ sprite.update
42
+ }
43
+ }
44
+ end
45
+ end
46
+
47
+ puts ""
48
+ puts "File size Results"
49
+
50
+ file_data.each do |data|
51
+ printf("%17s %8d x %5d (%d bytes)\n", data[0], data[1], data[2], data[3])
52
+ end
53
+
data/test/imgs/1.png ADDED
Binary file
data/test/imgs/10.png ADDED
Binary file
data/test/imgs/11.png ADDED
Binary file
data/test/imgs/12.png ADDED
Binary file
data/test/imgs/13.png ADDED
Binary file
data/test/imgs/14.png ADDED
Binary file
data/test/imgs/15.png ADDED
Binary file
data/test/imgs/16.png ADDED
Binary file
data/test/imgs/17.png ADDED
Binary file
data/test/imgs/18.png ADDED
Binary file
data/test/imgs/19.png ADDED
Binary file
data/test/imgs/2.png ADDED
Binary file
data/test/imgs/20.png ADDED
Binary file
data/test/imgs/21.png ADDED
Binary file
data/test/imgs/22.png ADDED
Binary file
data/test/imgs/23.png ADDED
Binary file
data/test/imgs/24.png ADDED
Binary file
data/test/imgs/25.png ADDED
Binary file
data/test/imgs/26.png ADDED
Binary file
data/test/imgs/27.png ADDED
Binary file
data/test/imgs/28.png ADDED
Binary file
data/test/imgs/29.png ADDED
Binary file
data/test/imgs/3.png ADDED
Binary file
data/test/imgs/30.png ADDED
Binary file
data/test/imgs/31.png ADDED
Binary file
data/test/imgs/32.png ADDED
Binary file
data/test/imgs/33.png ADDED
Binary file
data/test/imgs/34.png ADDED
Binary file
data/test/imgs/35.png ADDED
Binary file
data/test/imgs/36.png ADDED
Binary file
data/test/imgs/37.png ADDED
Binary file
data/test/imgs/38.png ADDED
Binary file
data/test/imgs/39.png ADDED
Binary file
data/test/imgs/4.png ADDED
Binary file
data/test/imgs/40.png ADDED
Binary file
data/test/imgs/41.png ADDED
Binary file
data/test/imgs/42.png ADDED
Binary file
data/test/imgs/43.png ADDED
Binary file
data/test/imgs/44.png ADDED
Binary file
data/test/imgs/45.png ADDED
Binary file
data/test/imgs/46.png ADDED
Binary file
data/test/imgs/47.png ADDED
Binary file
data/test/imgs/48.png ADDED
Binary file
data/test/imgs/49.png ADDED
Binary file
data/test/imgs/5.png ADDED
Binary file
data/test/imgs/50.png ADDED
Binary file
data/test/imgs/51.png ADDED
Binary file
data/test/imgs/52.png ADDED
Binary file
data/test/imgs/53.png ADDED
Binary file
data/test/imgs/54.png ADDED
Binary file
data/test/imgs/55.png ADDED
Binary file
data/test/imgs/56.png ADDED
Binary file
data/test/imgs/57.png ADDED
Binary file
data/test/imgs/58.png ADDED
Binary file
data/test/imgs/59.png ADDED
Binary file
data/test/imgs/6.png ADDED
Binary file
data/test/imgs/60.png ADDED
Binary file
data/test/imgs/7.png ADDED
Binary file
data/test/imgs/8.png ADDED
Binary file
data/test/imgs/9.png ADDED
Binary file
data/test/t_gd2.rb ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $test_dir = File.dirname(__FILE__)
4
+ $:.unshift File.join($test_dir, '../lib')
5
+
6
+ require 'test/unit'
7
+ require 'test/unit/ui/console/testrunner'
8
+ require 'ruby_sprites/sprite'
9
+ require 'test/t_generic'
10
+
11
+ unless RubySprites::Sprite.graphics_managers[:gd2].nil?
12
+
13
+ class TestGD2 < Test::Unit::TestCase
14
+ include TestGeneric
15
+
16
+ def initialize(test_suite)
17
+ super test_suite
18
+ end
19
+
20
+ def setup
21
+ File.unlink($test_dir + '/test.png') if File.exists?($test_dir + '/test.png')
22
+ File.unlink($test_dir + '/test.png.sprite') if File.exists?($test_dir + '/test.png.sprite')
23
+
24
+ @sprite = RubySprites::Sprite.new('test.png', $test_dir, {:graphics_manager => :gd2})
25
+ end
26
+ end
27
+ Test::Unit::UI::Console::TestRunner.run(TestGD2)
28
+ end
data/test/t_generic.rb ADDED
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'ruby_sprites/sprite'
4
+
5
+ module TestGeneric
6
+
7
+ def setup
8
+ File.unlink($test_dir + '/test.png') if File.exists?($test_dir + '/test.png')
9
+ File.unlink($test_dir + '/test.png.sprite') if File.exists?($test_dir + '/test.png.sprite')
10
+
11
+ @sprite = RubySprites::Sprite.new('test.png', $test_dir)
12
+ end
13
+
14
+ def teardown
15
+ File.unlink($test_dir + 'test.png') if File.exists?($test_dir + 'test.png')
16
+ File.unlink($test_dir + 'test.png.sprite') if File.exists?($test_dir + 'test.png.sprite')
17
+ @sprite.destroy!
18
+ end
19
+
20
+ def test_add_image
21
+ @sprite.add_image('imgs/1.png')
22
+ assert_equal(0, @sprite.images.length)
23
+ @sprite.update
24
+ assert_equal(1, @sprite.images.length)
25
+ @sprite.add_image('imgs/2.png')
26
+ assert_equal(1, @sprite.images.length)
27
+ @sprite.update
28
+ assert_equal(2, @sprite.images.length)
29
+ @sprite.add_image('imgs/2.png')
30
+ assert_equal(2, @sprite.images.length)
31
+ @sprite.update
32
+ assert_equal(2, @sprite.images.length)
33
+ end
34
+
35
+ def test_add_images
36
+ imgs = []
37
+ (1..20).each do |n|
38
+ imgs.push "imgs/#{n}.png"
39
+ end
40
+
41
+ @sprite.add_images(imgs)
42
+ assert_equal(0, @sprite.images.length)
43
+
44
+ @sprite.update
45
+ assert_equal(20, @sprite.images.length)
46
+
47
+ imgs = []
48
+ (11..30).each do |n|
49
+ imgs.push "imgs/#{n}.png"
50
+ end
51
+
52
+ @sprite.add_images(imgs)
53
+ assert_equal(20, @sprite.images.length)
54
+
55
+ @sprite.update
56
+ assert_equal(30, @sprite.images.length)
57
+ end
58
+
59
+ def test_image_info
60
+ assert_equal(nil, @sprite.image_info('imgs/1.png'))
61
+
62
+ @sprite.add_image('imgs/1.png')
63
+ assert_equal(nil, @sprite.image_info('imgs/1.png'))
64
+
65
+ @sprite.update
66
+
67
+ info = @sprite.image_info('imgs/1.png')
68
+ assert_equal(0, info[:x])
69
+ assert_equal(0, info[:y])
70
+ assert_equal(11, info[:width])
71
+ assert_equal(51, info[:height])
72
+ assert_equal('imgs/1.png', info[:path])
73
+ assert_equal(File.mtime($test_dir + '/imgs/1.png'), info[:mtime])
74
+ end
75
+
76
+ def test_image_current?
77
+ @sprite.add_image('imgs/1.png')
78
+
79
+ orig_ctime = File.ctime($test_dir + '/imgs/1.png').to_i
80
+ File.utime(orig_ctime, Time.now.to_i - 1000, $test_dir + '/imgs/1.png')
81
+
82
+ assert_equal(false, @sprite.image_current?('imgs/1.png'))
83
+
84
+ @sprite.update
85
+ assert_equal(true, @sprite.image_current?('imgs/1.png'))
86
+
87
+ File.utime(orig_ctime, Time.now.to_i + 1000, $test_dir + '/imgs/1.png')
88
+
89
+ assert_equal(false, @sprite.image_current?('imgs/1.png'))
90
+
91
+ @sprite.update
92
+
93
+ File.utime(orig_ctime, Time.now.to_i, $test_dir + '/imgs/1.png')
94
+
95
+
96
+ assert_equal(true, @sprite.image_current?('imgs/1.png'))
97
+
98
+ end
99
+
100
+ def test_pack_vertical
101
+ @sprite.set_option(:pack_type, :vertical_stack)
102
+
103
+ (1..20).each do |n|
104
+ @sprite.add_image("imgs/#{n}.png")
105
+ end
106
+
107
+ @sprite.update
108
+ end
109
+
110
+ def test_pack_horizontal
111
+ @sprite.set_option(:pack_type, :horizontal_stack)
112
+
113
+ (1..20).each do |n|
114
+ @sprite.add_image("imgs/#{n}.png")
115
+ end
116
+
117
+ @sprite.update
118
+ end
119
+
120
+ def test_pack_vertical_smart
121
+ @sprite.set_option(:pack_type, :vertical_smart)
122
+
123
+ (1..20).each do |n|
124
+ @sprite.add_image("imgs/#{n}.png")
125
+ end
126
+
127
+ @sprite.update
128
+ end
129
+
130
+ def test_pack_horizontal_smart
131
+ @sprite.set_option(:pack_type, :horizontal_smart)
132
+
133
+ (1..20).each do |n|
134
+ @sprite.add_image("imgs/#{n}.png")
135
+ end
136
+
137
+ @sprite.update
138
+ end
139
+
140
+ def test_pack_vertical_split
141
+ @sprite.set_option(:pack_type, :vertical_split)
142
+
143
+ (1..20).each do |n|
144
+ @sprite.add_image("imgs/#{n}.png")
145
+ end
146
+
147
+ @sprite.update
148
+ end
149
+
150
+ def test_pack_horizontal_split
151
+ @sprite.set_option(:pack_type, :horizontal_split)
152
+
153
+ (1..20).each do |n|
154
+ @sprite.add_image("imgs/#{n}.png")
155
+ end
156
+
157
+ @sprite.update
158
+ end
159
+
160
+ def test_vertical_repeat
161
+ @sprite.set_option(:repeat, :vertical)
162
+
163
+ (1..20).each do |n|
164
+ @sprite.add_image("imgs/#{n}.png")
165
+ end
166
+
167
+ @sprite.update
168
+
169
+ assert_equal(1, @sprite.height)
170
+ end
171
+
172
+ def test_horizontal_repeat
173
+ @sprite.set_option(:repeat, :horizontal)
174
+
175
+ (1..20).each do |n|
176
+ @sprite.add_image("imgs/#{n}.png")
177
+ end
178
+
179
+ @sprite.update
180
+
181
+ assert_equal(1, @sprite.width)
182
+ end
183
+ end
data/test/t_rmagick.rb ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $test_dir = File.dirname(__FILE__)
4
+ $:.unshift File.join($test_dir, '../lib')
5
+
6
+ require 'test/unit'
7
+ require 'test/unit/ui/console/testrunner'
8
+ require 'ruby_sprites/sprite'
9
+ require 'test/t_generic'
10
+
11
+ unless RubySprites::Sprite.graphics_managers[:rmagick].nil?
12
+
13
+ class TestRMagick < Test::Unit::TestCase
14
+ include TestGeneric
15
+
16
+ def initialize(test_suite)
17
+ super test_suite
18
+ end
19
+
20
+ def setup
21
+ File.unlink($test_dir + '/test.png') if File.exists?($test_dir + '/test.png')
22
+ File.unlink($test_dir + '/test.png.sprite') if File.exists?($test_dir + '/test.png.sprite')
23
+
24
+ @sprite = RubySprites::Sprite.new('test.png', $test_dir, {:graphics_manager => :rmagick})
25
+ end
26
+ end
27
+
28
+ Test::Unit::UI::Console::TestRunner.run(TestRMagick)
29
+ end