psd 2.0.0 → 2.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: 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