psd 2.1.2 → 3.1.2
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 +4 -4
- data/README.md +1 -1
- data/lib/psd.rb +8 -6
- data/lib/psd/blend_mode.rb +46 -38
- data/lib/psd/channel_image.rb +9 -5
- data/lib/psd/descriptor.rb +39 -16
- data/lib/psd/header.rb +33 -32
- data/lib/psd/image_formats/rle.rb +4 -10
- data/lib/psd/image_modes/rgb.rb +4 -4
- data/lib/psd/layer.rb +1 -15
- data/lib/psd/layer/blend_modes.rb +12 -12
- data/lib/psd/layer/helpers.rb +8 -10
- data/lib/psd/layer/info.rb +9 -7
- data/lib/psd/layer/position_and_channels.rb +0 -4
- data/lib/psd/layer_info.rb +0 -4
- data/lib/psd/layer_info/blend_clipping_elements.rb +4 -2
- data/lib/psd/layer_info/blend_interior_elements.rb +4 -2
- data/lib/psd/layer_info/fill_opacity.rb +4 -2
- data/lib/psd/layer_info/layer_group.rb +4 -2
- data/lib/psd/layer_info/layer_id.rb +4 -2
- data/lib/psd/layer_info/layer_name_source.rb +4 -2
- data/lib/psd/layer_info/layer_section_divider.rb +4 -2
- data/lib/psd/layer_info/legacy_typetool.rb +5 -3
- data/lib/psd/layer_info/locked.rb +4 -2
- data/lib/psd/layer_info/metadata_setting.rb +4 -2
- data/lib/psd/layer_info/object_effects.rb +4 -2
- data/lib/psd/layer_info/pattern.rb +14 -0
- data/lib/psd/layer_info/placed_layer.rb +4 -2
- data/lib/psd/layer_info/reference_point.rb +4 -2
- data/lib/psd/layer_info/sheet_color.rb +18 -0
- data/lib/psd/layer_info/solid_color.rb +36 -0
- data/lib/psd/layer_info/typetool.rb +4 -2
- data/lib/psd/layer_info/unicode_name.rb +4 -2
- data/lib/psd/layer_info/vector_mask.rb +4 -2
- data/lib/psd/layer_info/vector_origination.rb +14 -0
- data/lib/psd/layer_info/vector_stroke.rb +4 -2
- data/lib/psd/layer_info/vector_stroke_content.rb +4 -2
- data/lib/psd/layer_mask.rb +2 -8
- data/lib/psd/lazy_execute.rb +5 -1
- data/lib/psd/node.rb +112 -48
- data/lib/psd/nodes/ancestry.rb +80 -75
- data/lib/psd/nodes/build_preview.rb +4 -4
- data/lib/psd/nodes/group.rb +35 -0
- data/lib/psd/nodes/layer.rb +40 -0
- data/lib/psd/nodes/root.rb +90 -0
- data/lib/psd/nodes/search.rb +19 -19
- data/lib/psd/path_record.rb +1 -71
- data/lib/psd/renderer.rb +6 -5
- data/lib/psd/renderer/blender.rb +10 -5
- data/lib/psd/renderer/cairo_helpers.rb +46 -0
- data/lib/psd/renderer/canvas.rb +39 -19
- data/lib/psd/renderer/canvas_management.rb +2 -2
- data/lib/psd/renderer/clipping_mask.rb +5 -4
- data/lib/psd/renderer/compose.rb +61 -68
- data/lib/psd/renderer/layer_styles.rb +15 -5
- data/lib/psd/renderer/layer_styles/color_overlay.rb +46 -27
- data/lib/psd/renderer/mask.rb +26 -22
- data/lib/psd/renderer/mask_canvas.rb +12 -0
- data/lib/psd/renderer/vector_shape.rb +239 -0
- data/lib/psd/resource_section.rb +4 -7
- data/lib/psd/resources.rb +4 -19
- data/lib/psd/resources/base.rb +27 -0
- data/lib/psd/resources/guides.rb +6 -4
- data/lib/psd/resources/layer_comps.rb +6 -4
- data/lib/psd/resources/slices.rb +7 -5
- data/lib/psd/version.rb +1 -1
- data/psd.gemspec +1 -2
- data/spec/files/blendmodes.psd +0 -0
- data/spec/hierarchy_spec.rb +5 -0
- metadata +27 -26
- data/lib/psd/layer_info/vector_mask_2.rb +0 -10
- data/lib/psd/node_exporting.rb +0 -20
- data/lib/psd/node_group.rb +0 -86
- data/lib/psd/node_layer.rb +0 -81
- data/lib/psd/node_root.rb +0 -93
- data/lib/psd/nodes/has_children.rb +0 -13
- data/lib/psd/nodes/lock_to_origin.rb +0 -7
- data/lib/psd/nodes/parse_layers.rb +0 -18
- data/lib/psd/renderer/layer_styles/drop_shadow.rb +0 -75
- data/lib/psd/section.rb +0 -26
data/lib/psd/resource_section.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
class PSD
|
2
2
|
class Resource
|
3
|
-
|
3
|
+
module Section
|
4
4
|
def self.factory(file, resource)
|
5
5
|
Section.constants.each do |c|
|
6
|
+
next if c == :Base
|
7
|
+
|
6
8
|
section = Section.const_get(c)
|
7
|
-
next unless section.
|
9
|
+
next unless section.resource_id == resource.id
|
8
10
|
|
9
11
|
section.new(file, resource).parse
|
10
12
|
return section.name
|
@@ -12,11 +14,6 @@ class PSD
|
|
12
14
|
|
13
15
|
return nil
|
14
16
|
end
|
15
|
-
|
16
|
-
def initialize(file, resource)
|
17
|
-
@file = file
|
18
|
-
@resource = resource
|
19
|
-
end
|
20
17
|
end
|
21
18
|
end
|
22
19
|
end
|
data/lib/psd/resources.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
class PSD
|
2
2
|
# Parses and reads all of the Resource records in the document.
|
3
3
|
class Resources
|
4
|
-
include Section
|
5
|
-
|
6
4
|
attr_reader :resources
|
7
5
|
alias :data :resources
|
8
6
|
|
@@ -15,14 +13,9 @@ class PSD
|
|
15
13
|
|
16
14
|
# Parses each Resource and stores them.
|
17
15
|
def parse
|
18
|
-
|
19
|
-
|
20
|
-
n = length
|
21
|
-
start = @file.tell
|
22
|
-
|
23
|
-
while n > 0
|
24
|
-
pos = @file.tell
|
16
|
+
finish = length + @file.tell
|
25
17
|
|
18
|
+
while @file.tell < finish
|
26
19
|
resource = Resource.new(@file)
|
27
20
|
resource.parse
|
28
21
|
|
@@ -33,14 +26,9 @@ class PSD
|
|
33
26
|
@type_index[name] = resource.id unless name.nil?
|
34
27
|
|
35
28
|
@file.seek resource_end
|
36
|
-
n -= @file.tell - pos
|
37
29
|
end
|
38
30
|
|
39
|
-
|
40
|
-
@file.seek start + length
|
41
|
-
end
|
42
|
-
|
43
|
-
end_section
|
31
|
+
@file.seek finish if @file.tell != finish
|
44
32
|
end
|
45
33
|
|
46
34
|
def skip
|
@@ -59,11 +47,8 @@ class PSD
|
|
59
47
|
@resources[@type_index[id]]
|
60
48
|
end
|
61
49
|
|
62
|
-
private
|
63
|
-
|
64
50
|
def length
|
65
|
-
|
66
|
-
@length = @file.read_int
|
51
|
+
@length ||= @file.read_int
|
67
52
|
end
|
68
53
|
end
|
69
54
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'psd/resources/base'
|
2
|
+
|
3
|
+
class PSD
|
4
|
+
class Resource
|
5
|
+
module Section
|
6
|
+
class Base
|
7
|
+
def self.resource_id(id = nil)
|
8
|
+
@resource_id = id unless id.nil?
|
9
|
+
@resource_id
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.name(name = nil)
|
13
|
+
@name = name unless name.nil?
|
14
|
+
@name
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(file, resource)
|
18
|
+
@file = file
|
19
|
+
@resource = resource
|
20
|
+
end
|
21
|
+
|
22
|
+
def resource_id; self.class.resource_id; end
|
23
|
+
def name; self.class.name; end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/psd/resources/guides.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'psd/resources/base'
|
2
|
+
|
1
3
|
class PSD
|
2
4
|
class Resource
|
3
|
-
|
4
|
-
class Guides <
|
5
|
-
|
6
|
-
|
5
|
+
module Section
|
6
|
+
class Guides < Base
|
7
|
+
resource_id 1032
|
8
|
+
name :guides
|
7
9
|
|
8
10
|
def parse
|
9
11
|
# Descriptor version
|
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'psd/resources/base'
|
2
|
+
|
1
3
|
class PSD
|
2
4
|
class Resource
|
3
|
-
|
4
|
-
class LayerComps <
|
5
|
-
|
6
|
-
|
5
|
+
module Section
|
6
|
+
class LayerComps < Base
|
7
|
+
resource_id 1065
|
8
|
+
name :layer_comps
|
7
9
|
|
8
10
|
def self.visibility_captured?(comp)
|
9
11
|
comp[:captured_info] & 0b001 > 0
|
data/lib/psd/resources/slices.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
+
require 'psd/resources/base'
|
2
|
+
|
1
3
|
class PSD
|
2
4
|
class Resource
|
3
|
-
|
4
|
-
class Slices <
|
5
|
-
|
5
|
+
module Section
|
6
|
+
class Slices < Base
|
7
|
+
resource_id 1050
|
8
|
+
name :slices
|
6
9
|
|
7
|
-
|
8
|
-
def self.name; :slices; end
|
10
|
+
attr_reader :data, :version
|
9
11
|
|
10
12
|
def parse
|
11
13
|
@version = @file.read_int
|
data/lib/psd/version.rb
CHANGED
data/psd.gemspec
CHANGED
@@ -19,10 +19,9 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
21
|
gem.add_dependency 'rake'
|
22
|
-
gem.add_dependency 'bindata'
|
23
22
|
gem.add_dependency 'psd-enginedata', '~> 1.0'
|
24
|
-
|
25
23
|
gem.add_dependency 'chunky_png'
|
24
|
+
gem.add_dependency 'activesupport', '~> 3.2.7'
|
26
25
|
|
27
26
|
gem.test_files = Dir.glob("spec/**/*")
|
28
27
|
gem.add_development_dependency 'rspec'
|
data/spec/files/blendmodes.psd
CHANGED
Binary file
|
data/spec/hierarchy_spec.rb
CHANGED
@@ -71,6 +71,11 @@ describe "Hierarchy" do
|
|
71
71
|
expect(node.path).to eq('Version A/Matte')
|
72
72
|
end
|
73
73
|
|
74
|
+
it "should be able to return a path as an array" do
|
75
|
+
node = @tree.children_at_path('Version A/Matte').first
|
76
|
+
expect(node.path(:as_array)).to eq(['Version A', 'Matte'])
|
77
|
+
end
|
78
|
+
|
74
79
|
describe "Searching" do
|
75
80
|
it "should find a node given a path" do
|
76
81
|
expect(@tree.children_at_path('Version A/Matte')).to be_an_instance_of(Array)
|
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:
|
4
|
+
version: 3.1.2
|
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-
|
12
|
+
date: 2014-04-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -25,20 +25,6 @@ dependencies:
|
|
25
25
|
- - '>='
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: bindata
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - '>='
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '0'
|
35
|
-
type: :runtime
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - '>='
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
28
|
- !ruby/object:Gem::Dependency
|
43
29
|
name: psd-enginedata
|
44
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,6 +53,20 @@ dependencies:
|
|
67
53
|
- - '>='
|
68
54
|
- !ruby/object:Gem::Version
|
69
55
|
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: activesupport
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 3.2.7
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 3.2.7
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,12 +181,15 @@ files:
|
|
181
181
|
- lib/psd/layer_info/locked.rb
|
182
182
|
- lib/psd/layer_info/metadata_setting.rb
|
183
183
|
- lib/psd/layer_info/object_effects.rb
|
184
|
+
- lib/psd/layer_info/pattern.rb
|
184
185
|
- lib/psd/layer_info/placed_layer.rb
|
185
186
|
- lib/psd/layer_info/reference_point.rb
|
187
|
+
- lib/psd/layer_info/sheet_color.rb
|
188
|
+
- lib/psd/layer_info/solid_color.rb
|
186
189
|
- lib/psd/layer_info/typetool.rb
|
187
190
|
- lib/psd/layer_info/unicode_name.rb
|
188
191
|
- lib/psd/layer_info/vector_mask.rb
|
189
|
-
- lib/psd/layer_info/
|
192
|
+
- lib/psd/layer_info/vector_origination.rb
|
190
193
|
- lib/psd/layer_info/vector_stroke.rb
|
191
194
|
- lib/psd/layer_info/vector_stroke_content.rb
|
192
195
|
- lib/psd/layer_mask.rb
|
@@ -194,34 +197,32 @@ files:
|
|
194
197
|
- lib/psd/logger.rb
|
195
198
|
- lib/psd/mask.rb
|
196
199
|
- lib/psd/node.rb
|
197
|
-
- lib/psd/node_exporting.rb
|
198
|
-
- lib/psd/node_group.rb
|
199
|
-
- lib/psd/node_layer.rb
|
200
|
-
- lib/psd/node_root.rb
|
201
200
|
- lib/psd/nodes/ancestry.rb
|
202
201
|
- lib/psd/nodes/build_preview.rb
|
203
|
-
- lib/psd/nodes/
|
204
|
-
- lib/psd/nodes/
|
205
|
-
- lib/psd/nodes/
|
202
|
+
- lib/psd/nodes/group.rb
|
203
|
+
- lib/psd/nodes/layer.rb
|
204
|
+
- lib/psd/nodes/root.rb
|
206
205
|
- lib/psd/nodes/search.rb
|
207
206
|
- lib/psd/path_record.rb
|
208
207
|
- lib/psd/renderer.rb
|
209
208
|
- lib/psd/renderer/blender.rb
|
209
|
+
- lib/psd/renderer/cairo_helpers.rb
|
210
210
|
- lib/psd/renderer/canvas.rb
|
211
211
|
- lib/psd/renderer/canvas_management.rb
|
212
212
|
- lib/psd/renderer/clipping_mask.rb
|
213
213
|
- lib/psd/renderer/compose.rb
|
214
214
|
- lib/psd/renderer/layer_styles.rb
|
215
215
|
- lib/psd/renderer/layer_styles/color_overlay.rb
|
216
|
-
- lib/psd/renderer/layer_styles/drop_shadow.rb
|
217
216
|
- lib/psd/renderer/mask.rb
|
217
|
+
- lib/psd/renderer/mask_canvas.rb
|
218
|
+
- lib/psd/renderer/vector_shape.rb
|
218
219
|
- lib/psd/resource.rb
|
219
220
|
- lib/psd/resource_section.rb
|
220
221
|
- lib/psd/resources.rb
|
222
|
+
- lib/psd/resources/base.rb
|
221
223
|
- lib/psd/resources/guides.rb
|
222
224
|
- lib/psd/resources/layer_comps.rb
|
223
225
|
- lib/psd/resources/slices.rb
|
224
|
-
- lib/psd/section.rb
|
225
226
|
- lib/psd/util.rb
|
226
227
|
- lib/psd/version.rb
|
227
228
|
- psd.gemspec
|
data/lib/psd/node_exporting.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
class PSD
|
2
|
-
module NodeExporting #:nodoc:
|
3
|
-
def export_node(node, path)
|
4
|
-
hide_all_nodes
|
5
|
-
node.show!
|
6
|
-
node.lock_to_origin
|
7
|
-
|
8
|
-
width_difference_factor = @header.cols.to_f / node.width
|
9
|
-
height_difference_factor = @header.rows.to_f / node.height
|
10
|
-
@header.cols, @header.rows = node.width, node.height
|
11
|
-
|
12
|
-
node.scale_path_components(width_difference_factor, height_difference_factor)
|
13
|
-
export path
|
14
|
-
end
|
15
|
-
|
16
|
-
def hide_all_nodes
|
17
|
-
tree.descendants.map(&:hide!)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/psd/node_group.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
require_relative 'node'
|
2
|
-
|
3
|
-
class PSD::Node
|
4
|
-
# Represents a group, or folder, in the PSD document. It can have
|
5
|
-
# zero or more children nodes.
|
6
|
-
class Group < PSD::Node
|
7
|
-
include PSD::HasChildren
|
8
|
-
include PSD::Node::LockToOrigin
|
9
|
-
|
10
|
-
attr_reader :name, :top, :left, :bottom, :right
|
11
|
-
|
12
|
-
# Parses the descendant tree structure and figures out the bounds
|
13
|
-
# of the layers within this folder.
|
14
|
-
def initialize(folder)
|
15
|
-
@name = folder[:name]
|
16
|
-
@layer = folder[:layer]
|
17
|
-
|
18
|
-
super(folder[:layers])
|
19
|
-
get_dimensions
|
20
|
-
end
|
21
|
-
|
22
|
-
# Calculated height of this folder.
|
23
|
-
def rows
|
24
|
-
@bottom - @top
|
25
|
-
end
|
26
|
-
alias :height :rows
|
27
|
-
|
28
|
-
# Calculated width of this folder.
|
29
|
-
def cols
|
30
|
-
@right - @left
|
31
|
-
end
|
32
|
-
alias :width :cols
|
33
|
-
|
34
|
-
# Attempt to translate this folder and all of the descendants.
|
35
|
-
def translate(x=0, y=0)
|
36
|
-
@children.each{ |c| c.translate(x,y) }
|
37
|
-
end
|
38
|
-
|
39
|
-
# Attempt to hide all children of this layer.
|
40
|
-
def hide!
|
41
|
-
@children.each{ |c| c.hide! }
|
42
|
-
end
|
43
|
-
|
44
|
-
# Attempt to show all children of this layer.
|
45
|
-
def show!
|
46
|
-
@children.each{ |c| c.show! }
|
47
|
-
end
|
48
|
-
|
49
|
-
def passthru_blending?
|
50
|
-
blending_mode == 'passthru'
|
51
|
-
end
|
52
|
-
|
53
|
-
def empty?
|
54
|
-
@children.each do |child|
|
55
|
-
return false unless child.empty?
|
56
|
-
end
|
57
|
-
|
58
|
-
return true
|
59
|
-
end
|
60
|
-
|
61
|
-
# Export this layer and it's children to a hash recursively.
|
62
|
-
def to_hash
|
63
|
-
super.merge({
|
64
|
-
type: :group,
|
65
|
-
visible: visible?,
|
66
|
-
children: children.map(&:to_hash)
|
67
|
-
})
|
68
|
-
end
|
69
|
-
|
70
|
-
# If the method is missing, we blindly send it to the layer.
|
71
|
-
# The layer handles the case in which the method doesn't exist.
|
72
|
-
def method_missing(method, *args, &block)
|
73
|
-
@layer.send(method, *args, &block)
|
74
|
-
end
|
75
|
-
|
76
|
-
private
|
77
|
-
|
78
|
-
def get_dimensions
|
79
|
-
children = @children.reject(&:empty?)
|
80
|
-
@left = children.map(&:left).min || 0
|
81
|
-
@top = children.map(&:top).min || 0
|
82
|
-
@bottom = children.map(&:bottom).max || 0
|
83
|
-
@right = children.map(&:right).max || 0
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
data/lib/psd/node_layer.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
require_relative 'node'
|
2
|
-
|
3
|
-
class PSD::Node
|
4
|
-
class Layer < PSD::Node
|
5
|
-
include PSD::Node::LockToOrigin
|
6
|
-
|
7
|
-
attr_reader :layer
|
8
|
-
|
9
|
-
# Stores a reference to the PSD::Layer
|
10
|
-
def initialize(layer)
|
11
|
-
@layer = layer
|
12
|
-
layer.node = self
|
13
|
-
|
14
|
-
super([])
|
15
|
-
end
|
16
|
-
|
17
|
-
# Delegates some methods to the PSD::Layer
|
18
|
-
[:text, :ref_x, :ref_y].each do |meth|
|
19
|
-
define_method meth do
|
20
|
-
@layer.send(meth)
|
21
|
-
end
|
22
|
-
|
23
|
-
define_method "#{meth}=" do |val|
|
24
|
-
@layer.send("#{meth}=", val)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Attempt to translate the layer.
|
29
|
-
def translate(x=0, y=0)
|
30
|
-
@layer.translate x, y
|
31
|
-
end
|
32
|
-
|
33
|
-
# Attempt to scale the path components of the layer.
|
34
|
-
def scale_path_components(xr, yr)
|
35
|
-
@layer.scale_path_components(xr, yr)
|
36
|
-
end
|
37
|
-
|
38
|
-
# Tries to hide the layer by moving it way off canvas.
|
39
|
-
def hide!
|
40
|
-
# TODO actually mess with the blend modes instead of
|
41
|
-
# just putting things way off canvas
|
42
|
-
return if @hidden_by_kelly
|
43
|
-
translate(100000, 10000)
|
44
|
-
@hidden_by_kelly = true
|
45
|
-
end
|
46
|
-
|
47
|
-
# Tries to re-show the canvas by moving it back to it's original position.
|
48
|
-
def show!
|
49
|
-
if @hidden_by_kelly
|
50
|
-
translate(-100000, -10000)
|
51
|
-
@hidden_by_kelly = false
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def empty?
|
56
|
-
width == 0 || height == 0
|
57
|
-
end
|
58
|
-
|
59
|
-
# Exports this layer to a Hash.
|
60
|
-
def to_hash
|
61
|
-
super.merge({
|
62
|
-
type: :layer,
|
63
|
-
text: @layer.text,
|
64
|
-
ref_x: @layer.reference_point.x,
|
65
|
-
ref_y: @layer.reference_point.y,
|
66
|
-
mask: @layer.mask.to_hash,
|
67
|
-
image: {
|
68
|
-
width: @layer.image.width,
|
69
|
-
height: @layer.image.height,
|
70
|
-
channels: @layer.channels_info
|
71
|
-
}
|
72
|
-
})
|
73
|
-
end
|
74
|
-
|
75
|
-
# If the method is missing, we blindly send it to the layer.
|
76
|
-
# The layer handles the case in which the method doesn't exist.
|
77
|
-
def method_missing(method, *args, &block)
|
78
|
-
@layer.send(method, *args, &block)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|