motion-assets 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fe5eb2bdbee7006a2f514026703af1379f68f9e7
4
- data.tar.gz: dfd66401c31488c6a468ef8f866f0e38d225ac97
3
+ metadata.gz: 42a198c9ee75c5cb11f3ff165059ded24c3df0de
4
+ data.tar.gz: 8b78ee302a50bb9649193d010d92c02aef00f471
5
5
  SHA512:
6
- metadata.gz: 53add8dd45ee8a0d402f60aa305be6d4aef156d91b815ed78650e45cde07fbd7fffd7a0ac235c06f9f18a0346cf88aa3a75fb94bb26e52f1debf326652d0b567
7
- data.tar.gz: 06414c87f84ee31e5f9dbd8ea56f5a92266259ee23a579b6a4b181df976ec3f62ae557858f0cca96a15c8b39e20e26c266d25802491df68501a2076a6ed40296
6
+ metadata.gz: a765cadb43e1d4684a7028a5b48a8a03907866452b18ecaee5db0e7c884bf739345b7559720e516e9780c46a4ddfa120615bfb0ccfb1b95579525828b4ef6775
7
+ data.tar.gz: 19e8f674d082a9ddb50c6782f6d060a131ee6f0eae435879a84d402d82e5706493295da031ce896defd787b3ac5ed0a02c560bc1a524e6b68f30c4e1b5bb0e0b
data/README.md CHANGED
@@ -38,6 +38,9 @@ Motion::Project::App.setup do |app|
38
38
  # ...
39
39
  app.assets.source_icon = "./src_images/icon-1024x1024.png"
40
40
  app.assets.source_splash = "./src_images/splash-1024x1024.png"
41
+
42
+ # optional
43
+ app.assets.output_dir = "./some/directory"
41
44
  end
42
45
  ```
43
46
 
@@ -53,6 +56,8 @@ Motion::Project::App.setup do |app|
53
56
  end
54
57
  ```
55
58
 
59
+ Note : motion-assets will autopopulate your `app.icons` array with the list of created icons.
60
+
56
61
  ## Tasks
57
62
 
58
63
  To tell motion-assets to generate the assets :
@@ -62,4 +67,4 @@ $ [bundle exec] rake assets:generate
62
67
  ```
63
68
 
64
69
 
65
- note : the sample icon comes from the greal Pixelmator tool, http://www.pixelmator.com/
70
+ note : the sample icon comes from the great Pixelmator tool, http://www.pixelmator.com/
@@ -14,6 +14,10 @@ module Motion::Project
14
14
  end
15
15
 
16
16
  class Assets
17
+ BASE_SPLASH_SIZE = [2028, 2028]
18
+ BASE_IOS_ICON_SIZE = [1024, 1024]
19
+ BASE_ANDROID_ICON_SIZE = [512, 512]
20
+
17
21
  IOS_ICONS = %w{
18
22
  Icon-Small.png|29x29
19
23
  Icon-Small@2x.png|58x58
@@ -57,28 +61,36 @@ module Motion::Project
57
61
  drawable-ldpi/splash-land.png|320x200
58
62
  drawable-mdpi/splash-land.png|480x320
59
63
  drawable-xhdpi/splash-land.png|1280x720
64
+ drawable-xxhdpi/splash-land.png|1600x960
65
+ drawable-xxxhdpi/splash-land.png|1920x1280
60
66
  drawable-hdpi/splash-port.png|480x800
61
67
  drawable-ldpi/splash-port.png|200x320
62
68
  drawable-mdpi/splash-port.png|320x480
63
- drawable-xhdpi/splash-port.png|720px1280
69
+ drawable-xhdpi/splash-port.png|720x1280
70
+ drawable-xxhdpi/splash-port.png|960x1600
71
+ drawable-xxxhdpi/splash-port.png|1280x1920
64
72
  }
65
73
 
66
74
  def initialize(config)
67
75
  @config = config
68
76
  @images = []
69
- @icons = Icons.new(config)
77
+ @icons = Icons.new(@config, platform)
70
78
  @image_optim = '/Applications/ImageOptim.app/Contents/MacOS/ImageOptim'
71
79
 
72
80
  if ios?
73
81
  @icons << IOS_ICONS
74
82
  @splashes = IOS_SPLASHES
75
83
  end
84
+
76
85
  if android?
86
+ @config.icon = 'icon.png'
77
87
  @icons << ANDROID_ICONS
78
88
  @splashes = ANDROID_SPLASHES
79
89
  end
90
+
80
91
  @source_icon = "./src_images/icon.png"
81
92
  @source_splash = "./src_images/splash.png"
93
+ @output_dir = @config.resources_dirs.first
82
94
  end
83
95
 
84
96
  def source_icon=(source_icon)
@@ -89,17 +101,30 @@ module Motion::Project
89
101
  @source_splash = source_splash
90
102
  end
91
103
 
104
+ def output_dir=(output_dir)
105
+ @output_dir = output_dir
106
+ end
107
+
92
108
  def icons
93
109
  @icons
94
110
  end
95
111
 
112
+ def icons=(icons)
113
+ @icons = Icons.new(@config, platform)
114
+ if ios?
115
+ @config.icons = []
116
+ end
117
+ @icons << icons
118
+ end
119
+
96
120
  def splashes
97
121
  @splashes
98
122
  end
99
123
 
100
124
  def generate!
101
- validate_source_icon!
102
- validate_source_splash!
125
+ validate_source_icon
126
+ validate_source_splash
127
+ validate_output_dir
103
128
  generate_icons
104
129
  generate_splashes
105
130
  optimize_images
@@ -107,11 +132,17 @@ module Motion::Project
107
132
 
108
133
  protected
109
134
 
135
+ def validate_output_dir
136
+ unless File.exist?(@output_dir)
137
+ App.fail "Output directory : #{@output_dir} doesn't exist, please create it."
138
+ end
139
+ end
140
+
110
141
  def generate_splashes
111
142
  App.info "[info]", "Generating splashes..."
112
143
  @splashes.each do |splash|
113
144
  parts = splash.split('|')
114
- path = File.join(@config.resources_dirs.first, parts[0])
145
+ path = File.join(@output_dir, parts[0])
115
146
  FileUtils.mkdir_p(File.dirname(path))
116
147
  generate_image(@source_splash, path, parts[1])
117
148
  @images << path
@@ -122,12 +153,11 @@ module Motion::Project
122
153
  def generate_icons
123
154
  App.info "[info]", "Generating icons..."
124
155
  @icons.each do |icon|
125
- parts = icon.split('|')
126
- path = File.join(@config.resources_dirs.first, parts[0])
156
+ path = File.join(@output_dir, icon.name)
127
157
  FileUtils.mkdir_p(File.dirname(path))
128
- generate_image(@source_icon, path, parts[1])
158
+ generate_image(@source_icon, path, icon.dimensions)
129
159
  @images << path
130
- App.info "-", parts[0]
160
+ App.info "-", icon.name
131
161
  end
132
162
  end
133
163
 
@@ -147,35 +177,39 @@ module Motion::Project
147
177
  image.write(path)
148
178
  end
149
179
 
150
- def validate_source_icon!
180
+ def validate_source_icon
151
181
  unless File.exist?(@source_icon)
152
182
  App.fail "You have to provide a valid base icon in your rakefile : app.assets.source_icon = './some/path/image.png"
153
183
  end
154
184
  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]"
185
+ if ios? && image.dimensions != BASE_IOS_ICON_SIZE
186
+ App.info "[warning]", "Your source icon image dimensions #{image.dimensions} is different from recommended dimensions : #{BASE_IOS_ICON_SIZE}"
157
187
  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]"
188
+ if android? && image.dimensions != BASE_ANDROID_ICON_SIZE
189
+ App.info "[warning]", "Your source icon image dimensions #{image.dimensions} is different from recommended dimensions : #{BASE_ANDROID_ICON_SIZE}"
160
190
  end
161
191
  end
162
192
 
163
- def validate_source_splash!
193
+ def validate_source_splash
164
194
  unless File.exist?(@source_splash)
165
195
  App.fail "You have to provide a valid base splash in your rakefile : app.assets.source_splash = './some/path/image.png"
166
196
  end
167
197
  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]"
198
+ if image.dimensions != BASE_SPLASH_SIZE
199
+ App.info "[warning]", "Your source splash image dimensions #{image.dimensions} is different from recommended dimensions : #{BASE_SPLASH_SIZE}"
170
200
  end
171
201
  end
172
202
 
173
203
  def android?
174
- Motion::Project::App.template == :android
204
+ platform == :android
175
205
  end
176
206
 
177
207
  def ios?
178
- Motion::Project::App.template == :ios
208
+ platform == :ios
209
+ end
210
+
211
+ def platform
212
+ Motion::Project::App.template
179
213
  end
180
214
  end
181
215
  end
@@ -1,9 +1,11 @@
1
1
  class Icons
2
2
  include Enumerable
3
+ Struct.new("Icon", :name, :dimensions)
3
4
 
4
- def initialize(config)
5
+ def initialize(config, platform)
5
6
  @list = []
6
7
  @config = config
8
+ @platform = platform
7
9
  end
8
10
 
9
11
  def list
@@ -11,20 +13,27 @@ class Icons
11
13
  end
12
14
 
13
15
  def <<(*icons)
14
- @list << icons
15
- @list.flatten!
16
- icons.flatten.each do |icon|
17
- @config.icons << icon.split('|').first
16
+ icons.flatten.each do |icon_string|
17
+ icon = create_icon(icon_string)
18
+ @list << icon
19
+
20
+ if @platform == :ios
21
+ @config.icons << icon.name
22
+ end
18
23
  end
19
24
  self
20
25
  end
21
26
  alias_method :push, :<<
22
27
 
23
28
  def delete(*icons)
24
- @list.delete(icons)
25
- @list.flatten!
26
- icons.flatten.each do |icon|
27
- @config.icons.delete icon.split('|').first
29
+ icons.flatten.each do |icon_string|
30
+ icon = @list.find {|icon| icon.name == icon_string}
31
+
32
+ if @platform == :ios
33
+ @config.icons.delete icon.name
34
+ end
35
+
36
+ @list.delete(icon)
28
37
  end
29
38
  self
30
39
  end
@@ -32,4 +41,11 @@ class Icons
32
41
  def each(&block)
33
42
  @list.each(&block)
34
43
  end
44
+
45
+ protected
46
+
47
+ def create_icon(icon_string)
48
+ parts = icon_string.split('|')
49
+ Struct::Icon.new(parts[0], parts[1])
50
+ end
35
51
  end
@@ -1,5 +1,5 @@
1
1
  module Motion::Project
2
2
  class Assets
3
- VERSION = '0.1.0'
3
+ VERSION = '0.1.1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joffrey Jaffeux