psd 2.0.0 → 2.1.0

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: ef242e267a313a38f9ef7cebab141f870c85555e
4
- data.tar.gz: ee3814e3f35306f61b9b26d6124ef021ec22cc00
3
+ metadata.gz: d9b96175c4675aceb277aa64cf381aa9d7f20561
4
+ data.tar.gz: 1c4d5d7d68921e1a1dbd222f8022d3f02e3b9d2c
5
5
  SHA512:
6
- metadata.gz: d7260fadf4dc3a2e99126427a85ce355832a897a058d681e7afe708116c427cf76210f766fcc7641b5c43e889c9c295f8a38c269af16d6ffc96ce861ac21565b
7
- data.tar.gz: e97f791180a8452ed959fd72c831929d95d0666f7178d8f4d7dcf92bf229c6004e761782b251a8d3958e324d3a0de139be746db609d21921dd81947f27c37ae2
6
+ metadata.gz: 9b86b19b017831e85e3c8b28a0d045a3858cc96a7c03e6c501c61225d32c7018f58e03dc4fbfd5252e2016ef67e593435493960cb9eabf76fcfba2cb85487666
7
+ data.tar.gz: 65e4d1d26be0132d00e4215803dbb709a4af2c39f8ca604ac470daedc5dce5b7ecc5cbadaa134f0a392986c7b8c4f3cbb5fbc322fc660a9fc4649a8f93a634bd
data/lib/psd/node.rb CHANGED
@@ -5,6 +5,7 @@ require_relative 'nodes/search'
5
5
  # A lot of method names borrowed from the Ruby ancestry gem.
6
6
  class PSD
7
7
  class Node
8
+ include ParseLayers
8
9
  include Ancestry
9
10
  include Search
10
11
  include BuildPreview
@@ -12,16 +13,14 @@ class PSD
12
13
  # Default properties that all nodes contain
13
14
  PROPERTIES = [:name, :left, :right, :top, :bottom, :height, :width]
14
15
 
15
- attr_accessor :parent, :children, :layer, :force_visible
16
+ attr_accessor :parent, :children, :layer, :force_visible, :top, :left
16
17
 
17
18
  def initialize(layers=[])
18
- @children = []
19
- layers.each do |layer|
20
- layer.parent = self
21
- @children << layer
22
- end
19
+ parse_layers(layers)
23
20
 
24
21
  @force_visible = nil
22
+ @top = @layer.top
23
+ @left = @layer.left
25
24
  end
26
25
 
27
26
  def hidden?
@@ -29,6 +28,7 @@ class PSD
29
28
  end
30
29
 
31
30
  def visible?
31
+ return false if @layer.clipped? && !next_sibling.visible?
32
32
  force_visible.nil? ? @layer.visible? : force_visible
33
33
  end
34
34
 
@@ -5,7 +5,6 @@ class PSD::Node
5
5
  # zero or more children nodes.
6
6
  class Group < PSD::Node
7
7
  include PSD::HasChildren
8
- include PSD::Node::ParseLayers
9
8
  include PSD::Node::LockToOrigin
10
9
 
11
10
  attr_reader :name, :top, :left, :bottom, :right
@@ -15,7 +14,8 @@ class PSD::Node
15
14
  def initialize(folder)
16
15
  @name = folder[:name]
17
16
  @layer = folder[:layer]
18
- parse_layers(folder[:layers])
17
+
18
+ super(folder[:layers])
19
19
  get_dimensions
20
20
  end
21
21
 
@@ -8,14 +8,14 @@ class PSD::Node
8
8
 
9
9
  # Stores a reference to the PSD::Layer
10
10
  def initialize(layer)
11
- super([])
12
-
13
11
  @layer = layer
14
12
  layer.node = self
13
+
14
+ super([])
15
15
  end
16
16
 
17
17
  # Delegates some methods to the PSD::Layer
18
- (PROPERTIES + [:text, :ref_x, :ref_y]).each do |meth|
18
+ [:text, :ref_x, :ref_y].each do |meth|
19
19
  define_method meth do
20
20
  @layer.send(meth)
21
21
  end
@@ -33,34 +33,59 @@ class PSD
33
33
  raise "Layer comp not found" if comp.nil?
34
34
 
35
35
  id = comp[:id]
36
- elsif id == :last
37
- id = 0
36
+ else
37
+ comp = psd.layer_comps.select { |c| c[:id] == id }.first
38
+ raise "Layer comp not found" if comp.nil?
38
39
  end
39
40
 
40
41
  root = PSD::Node::Root.new(psd)
41
- filter_for_comp!(id, root)
42
+ filter_for_comp!(comp, root)
42
43
 
43
44
  return root
44
45
  end
45
46
 
46
47
  private
47
48
 
48
- def filter_for_comp!(id, node)
49
+ def filter_for_comp!(comp, node)
49
50
  # Force layers to be visible if they are enabled for the comp
50
51
  node.children.each do |c|
51
- enabled = c.visible?
52
+ set_visibility(comp, c) if Resource::Section::LayerComps.visibility_captured?(comp)
53
+ set_position(comp, c) if Resource::Section::LayerComps.position_captured?(comp)
52
54
 
53
- c
54
- .metadata
55
- .data[:layer_comp]['layerSettings'].each do |l|
56
- enabled = l['enab'] if l.has_key?('enab')
57
- break if l['compList'].include?(id)
58
- end
59
-
60
- c.force_visible = enabled
61
- filter_for_comp!(id, c) if c.group?
55
+ filter_for_comp!(comp, c) if c.group?
62
56
  end
63
57
  end
58
+
59
+ def set_visibility(comp, c)
60
+ visible = true
61
+
62
+ c
63
+ .metadata
64
+ .data[:layer_comp]['layerSettings'].each do |l|
65
+ visible = l['enab'] if l.has_key?('enab')
66
+ break if l['compList'].include?(comp[:id])
67
+ end
68
+
69
+ c.force_visible = visible
70
+ end
71
+
72
+ def set_position(comp, c)
73
+ x = 0
74
+ y = 0
75
+
76
+ c
77
+ .metadata
78
+ .data[:layer_comp]['layerSettings'].each do |l|
79
+ next unless l.has_key?('Ofst')
80
+
81
+ x = l['Ofst']['Hrzn']
82
+ y = l['Ofst']['Vrtc']
83
+ break if l['compList'].include?(comp[:id])
84
+ end
85
+
86
+ c.left += x
87
+ c.top += y
88
+ end
64
89
  end
65
90
  end
66
91
  end
@@ -5,6 +5,18 @@ class PSD
5
5
  def self.id; 1065; end
6
6
  def self.name; :layer_comps; end
7
7
 
8
+ def self.visibility_captured?(comp)
9
+ comp[:captured_info] & 0b001 > 0
10
+ end
11
+
12
+ def self.position_captured?(comp)
13
+ comp[:captured_info] & 0b010 > 0
14
+ end
15
+
16
+ def self.appearance_captured?(comp)
17
+ comp[:captured_info] & 0b100 > 0
18
+ end
19
+
8
20
  def parse
9
21
  # Descriptor version
10
22
  @file.seek 4, IO::SEEK_CUR
data/lib/psd/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class PSD
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
data/psd.gemspec CHANGED
@@ -28,8 +28,5 @@ Gem::Specification.new do |gem|
28
28
  gem.add_development_dependency 'rspec'
29
29
  gem.add_development_dependency 'guard'
30
30
  gem.add_development_dependency 'guard-rspec'
31
-
32
- if RUBY_PLATFORM =~ /darwin/
33
- gem.add_development_dependency 'rb-fsevent', '~> 0.9'
34
- end
31
+ gem.add_development_dependency 'rb-fsevent', '~> 0.9'
35
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: psd
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan LeFevre
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-03 00:00:00.000000000 Z
12
+ date: 2014-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake