motion-assets 0.0.1 → 0.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f0d79b4ca17c0c92858a404e3678d39d5abe8ed
4
- data.tar.gz: 8259ef292cb6edece1883c7f5966374b6c474451
3
+ metadata.gz: fe5eb2bdbee7006a2f514026703af1379f68f9e7
4
+ data.tar.gz: dfd66401c31488c6a468ef8f866f0e38d225ac97
5
5
  SHA512:
6
- metadata.gz: 82f7c3b750301d55c06f5ea60286d7c2ff127154276921b04f372befbfe91ddce86faaa5f502b7d23f6b420fc54230f6cb6f298ca5890f4f97f2ea68258229a0
7
- data.tar.gz: 19253e2be55fb04edcd92d3496f469a4f09a47e1fe6f42c50967033f8a226497a59491c145e62b27ed5d3f92422ce1c56ff98ac0281ba02668290b076487c494
6
+ metadata.gz: 53add8dd45ee8a0d402f60aa305be6d4aef156d91b815ed78650e45cde07fbd7fffd7a0ac235c06f9f18a0346cf88aa3a75fb94bb26e52f1debf326652d0b567
7
+ data.tar.gz: 06414c87f84ee31e5f9dbd8ea56f5a92266259ee23a579b6a4b181df976ec3f62ae557858f0cca96a15c8b39e20e26c266d25802491df68501a2076a6ed40296
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ /!\ Alpha code will break a lot in the coming week
2
+
3
+
1
4
  # motion-assets
2
5
 
3
6
  motion-assets allows RubyMotion projects to use ImageMagick to generate all the icons sizes.
@@ -23,15 +26,18 @@ Or if you use Bundler:
23
26
  gem 'motion-assets'
24
27
  ```
25
28
 
29
+ Optional, you can install ImageOption to optimize your images : https://imageoptim.com
30
+
26
31
 
27
32
  ## Setup
28
33
 
29
- In the `Rakefile`, set the path your base image :
34
+ In the `Rakefile`, set paths for your base images :
30
35
 
31
36
  ```ruby
32
37
  Motion::Project::App.setup do |app|
33
38
  # ...
34
- app.assets.base_icon = "./src_images/icon-1024x1024.png"
39
+ app.assets.source_icon = "./src_images/icon-1024x1024.png"
40
+ app.assets.source_splash = "./src_images/splash-1024x1024.png"
35
41
  end
36
42
  ```
37
43
 
@@ -56,4 +62,4 @@ $ [bundle exec] rake assets:generate
56
62
  ```
57
63
 
58
64
 
59
- note : the sample icon comes from the greal Pixemaltor tool, http://www.pixelmator.com/
65
+ note : the sample icon comes from the greal Pixelmator tool, http://www.pixelmator.com/
data/lib/motion-assets.rb CHANGED
@@ -1,2 +1,3 @@
1
+ require 'motion/project/icons'
1
2
  require 'motion/project/assets'
2
3
  require 'motion/project/version'
@@ -8,12 +8,8 @@ module Motion::Project
8
8
  class Config
9
9
  variable :assets
10
10
 
11
- def assets(&block)
11
+ def assets
12
12
  @assets ||= Motion::Project::Assets.new(self)
13
- if block
14
- @assets.instance_eval(&block)
15
- end
16
- @assets
17
13
  end
18
14
  end
19
15
 
@@ -34,48 +30,153 @@ module Motion::Project
34
30
  iTunesArtwork@2x.png|1024x1024
35
31
  }
36
32
 
33
+ IOS_SPLASHES = %w{
34
+ Default~iphone.png|320x480
35
+ Default@2x~iphone.png|640x960
36
+ Default-Portrait~ipad.png|768x1024
37
+ Default-Portrait@2x~ipad.png|1536x2048
38
+ Default-Landscape~ipad.png|1024x768
39
+ Default-Landscape@2x~ipad.png|2048x1536
40
+ Default-568h@2x~iphone.png|640x1136
41
+ Default-667h.png|750x1334
42
+ Default-736h.png|1242x2208
43
+ Default-Landscape-736h.png|2208x1242
44
+ }
45
+
37
46
  ANDROID_ICONS = %w{
38
- drawable-xxxhdpi/icon.png|192x192x
39
- drawable-xxhdpi/icon.png|144x144x
40
- drawable-xhdpi/icon.png|96x96x
41
- drawable-hdpi/icon.png|72x72x
42
- drawable-mdpi/icon.png|48x48x
43
- drawable-ldpi/icon.png|36x36x
47
+ drawable-xxxhdpi/icon.png|192x192
48
+ drawable-xxhdpi/icon.png|144x144
49
+ drawable-xhdpi/icon.png|96x96
50
+ drawable-hdpi/icon.png|72x72
51
+ drawable-mdpi/icon.png|48x48
52
+ drawable-ldpi/icon.png|36x36
53
+ }
54
+
55
+ ANDROID_SPLASHES = %w{
56
+ drawable-hdpi/splash-land.png|800x480
57
+ drawable-ldpi/splash-land.png|320x200
58
+ drawable-mdpi/splash-land.png|480x320
59
+ drawable-xhdpi/splash-land.png|1280x720
60
+ drawable-hdpi/splash-port.png|480x800
61
+ drawable-ldpi/splash-port.png|200x320
62
+ drawable-mdpi/splash-port.png|320x480
63
+ drawable-xhdpi/splash-port.png|720px1280
44
64
  }
45
65
 
46
66
  def initialize(config)
47
67
  @config = config
48
- if Motion::Project::App.template != :android
49
- @icons = IOS_ICONS
50
- else
51
- @icons = ANDROID_ICONS
68
+ @images = []
69
+ @icons = Icons.new(config)
70
+ @image_optim = '/Applications/ImageOptim.app/Contents/MacOS/ImageOptim'
71
+
72
+ if ios?
73
+ @icons << IOS_ICONS
74
+ @splashes = IOS_SPLASHES
75
+ end
76
+ if android?
77
+ @icons << ANDROID_ICONS
78
+ @splashes = ANDROID_SPLASHES
52
79
  end
53
- @base_icon = "./src_images/base_icon.png"
80
+ @source_icon = "./src_images/icon.png"
81
+ @source_splash = "./src_images/splash.png"
82
+ end
83
+
84
+ def source_icon=(source_icon)
85
+ @source_icon = source_icon
54
86
  end
55
87
 
56
- def base_icon=(base_icon)
57
- @base_icon = base_icon
88
+ def source_splash=(source_splash)
89
+ @source_splash = source_splash
58
90
  end
59
91
 
60
92
  def icons
61
93
  @icons
62
94
  end
63
95
 
96
+ def splashes
97
+ @splashes
98
+ end
99
+
64
100
  def generate!
65
- unless File.exist?(@base_icon)
66
- App.fail "You have to provide a valid base icon in your rakefile : app.assets.base_icon = './some/path/image.png"
101
+ validate_source_icon!
102
+ validate_source_splash!
103
+ generate_icons
104
+ generate_splashes
105
+ optimize_images
106
+ end
107
+
108
+ protected
109
+
110
+ def generate_splashes
111
+ App.info "[info]", "Generating splashes..."
112
+ @splashes.each do |splash|
113
+ parts = splash.split('|')
114
+ path = File.join(@config.resources_dirs.first, parts[0])
115
+ FileUtils.mkdir_p(File.dirname(path))
116
+ generate_image(@source_splash, path, parts[1])
117
+ @images << path
118
+ App.info "-", parts[0]
67
119
  end
120
+ end
68
121
 
122
+ def generate_icons
123
+ App.info "[info]", "Generating icons..."
69
124
  @icons.each do |icon|
70
125
  parts = icon.split('|')
71
- image = MiniMagick::Image.open(@base_icon)
72
- image.resize(parts[1])
73
- image.format("png")
74
- destination = File.join(@config.resources_dirs.first, parts[0])
75
- FileUtils.mkdir_p(File.dirname(destination))
76
- image.write(destination)
126
+ path = File.join(@config.resources_dirs.first, parts[0])
127
+ FileUtils.mkdir_p(File.dirname(path))
128
+ generate_image(@source_icon, path, parts[1])
129
+ @images << path
130
+ App.info "-", parts[0]
131
+ end
132
+ end
133
+
134
+ def optimize_images
135
+ if File.exist?(@image_optim)
136
+ App.info "[info]", "Optimizing images..."
137
+ system("#{@image_optim} #{@images.join(' ')}")
138
+ else
139
+ App.info "[warning]", "motion-assets uses ImageOptim to optimize your images, please install it : https://imageoptim.com"
140
+ end
141
+ end
142
+
143
+ def generate_image(source, path, dimensions)
144
+ image = MiniMagick::Image.open(source)
145
+ image.resize(dimensions)
146
+ image.format("png")
147
+ image.write(path)
148
+ end
149
+
150
+ def validate_source_icon!
151
+ unless File.exist?(@source_icon)
152
+ App.fail "You have to provide a valid base icon in your rakefile : app.assets.source_icon = './some/path/image.png"
153
+ end
154
+ image = MiniMagick::Image.open(@source_icon)
155
+ if ios? && image.dimensions != [1024, 1024]
156
+ App.info "[warning]", "Your source icon image dimensions #{image.dimensions} is different from recommended dimensions : [1024, 1024]"
157
+ end
158
+ if android? && image.dimensions != [512, 512]
159
+ App.info "[warning]", "Your source icon image dimensions #{image.dimensions} is different from recommended dimensions : [512, 512]"
77
160
  end
78
161
  end
162
+
163
+ def validate_source_splash!
164
+ unless File.exist?(@source_splash)
165
+ App.fail "You have to provide a valid base splash in your rakefile : app.assets.source_splash = './some/path/image.png"
166
+ end
167
+ image = MiniMagick::Image.open(@source_splash)
168
+ if image.dimensions != [2028, 2028]
169
+ App.info "[warning]", "Your source splash image dimensions #{image.dimensions} is different from recommended dimensions : [2028, 2028]"
170
+ end
171
+ end
172
+
173
+ def android?
174
+ Motion::Project::App.template == :android
175
+ end
176
+
177
+ def ios?
178
+ Motion::Project::App.template == :ios
179
+ end
79
180
  end
80
181
  end
81
182
 
@@ -0,0 +1,35 @@
1
+ class Icons
2
+ include Enumerable
3
+
4
+ def initialize(config)
5
+ @list = []
6
+ @config = config
7
+ end
8
+
9
+ def list
10
+ @list
11
+ end
12
+
13
+ def <<(*icons)
14
+ @list << icons
15
+ @list.flatten!
16
+ icons.flatten.each do |icon|
17
+ @config.icons << icon.split('|').first
18
+ end
19
+ self
20
+ end
21
+ alias_method :push, :<<
22
+
23
+ def delete(*icons)
24
+ @list.delete(icons)
25
+ @list.flatten!
26
+ icons.flatten.each do |icon|
27
+ @config.icons.delete icon.split('|').first
28
+ end
29
+ self
30
+ end
31
+
32
+ def each(&block)
33
+ @list.each(&block)
34
+ end
35
+ end
@@ -1,5 +1,5 @@
1
1
  module Motion::Project
2
2
  class Assets
3
- VERSION = '0.0.1'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joffrey Jaffeux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-20 00:00:00.000000000 Z
11
+ date: 2015-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mini_magick
@@ -35,6 +35,7 @@ files:
35
35
  - README.md
36
36
  - lib/motion-assets.rb
37
37
  - lib/motion/project/assets.rb
38
+ - lib/motion/project/icons.rb
38
39
  - lib/motion/project/version.rb
39
40
  homepage: http://www.rubymotion.com
40
41
  licenses: