psd_native 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/psd_native/mask.c +48 -0
- data/ext/psd_native/mask.h +6 -0
- data/ext/psd_native/psd_native_ext.c +4 -0
- data/ext/psd_native/psd_native_ext.h +1 -0
- data/lib/psd_native/version.rb +1 -1
- data/lib/psd_native.rb +5 -0
- data/psd_native.gemspec +1 -1
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba6252238c0a42264e81b13c9ad094d459f937cc
|
4
|
+
data.tar.gz: a9d7254957111c606e550f1e05217070075c1bc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51b58c58785979aff5206139ba2ba1bdfdb987e464bed797f64922c058c5fd9d286b9b205343f8eee705345b5f2e2a7338ce80bd23f499418cd88d1e7fecc0c4
|
7
|
+
data.tar.gz: e0fb65e4287bb98cd45362549cebb806e0a3450979756fe20d3b34801f27110812a2093c863fff411ad5f18092a34b11e1570023c88950c2addbc8c998037b6f
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#include "psd_native_ext.h"
|
2
|
+
|
3
|
+
VALUE psd_native_mask_apply_bang(VALUE self) {
|
4
|
+
psd_logger("debug", "Applying mask with native code");
|
5
|
+
|
6
|
+
int doc_width = FIX2INT(rb_iv_get(self, "@doc_width"));
|
7
|
+
int doc_height = FIX2INT(rb_iv_get(self, "@doc_height"));
|
8
|
+
|
9
|
+
VALUE layer = rb_iv_get(self, "@layer");
|
10
|
+
VALUE canvas = rb_iv_get(self, "@canvas");
|
11
|
+
VALUE mask = rb_funcall(layer, rb_intern("mask"), 0);
|
12
|
+
VALUE *mask_data = RARRAY_PTR(rb_funcall(rb_funcall(layer, rb_intern("image"), 0), rb_intern("mask_data"), 0));
|
13
|
+
|
14
|
+
int mask_height = FIX2INT(rb_funcall(mask, rb_intern("height"), 0));
|
15
|
+
int mask_width = FIX2INT(rb_funcall(mask, rb_intern("width"), 0));
|
16
|
+
int mask_left = FIX2INT(rb_funcall(mask, rb_intern("left"), 0));
|
17
|
+
int mask_top = FIX2INT(rb_funcall(mask, rb_intern("top"), 0));
|
18
|
+
|
19
|
+
int layer_left = FIX2INT(rb_funcall(layer, rb_intern("left"), 0));
|
20
|
+
int layer_top = FIX2INT(rb_funcall(layer, rb_intern("top"), 0));
|
21
|
+
|
22
|
+
PIXEL color;
|
23
|
+
int x, y, doc_x, doc_y, layer_x, layer_y, alpha;
|
24
|
+
int i = 0;
|
25
|
+
for (y = 0; y < mask_height; y++) {
|
26
|
+
for (x = 0; x < mask_width; x++) {
|
27
|
+
doc_x = mask_left + x;
|
28
|
+
doc_y = mask_top + y;
|
29
|
+
layer_x = doc_x - layer_left;
|
30
|
+
layer_y = doc_y - layer_top;
|
31
|
+
|
32
|
+
color = FIX2UINT(rb_funcall(canvas, rb_intern("[]"), 2, INT2FIX(layer_x), INT2FIX(layer_y)));
|
33
|
+
|
34
|
+
if (doc_x < 0 || doc_x >= doc_width || doc_y < 0 || doc_y > doc_height) {
|
35
|
+
alpha = 0;
|
36
|
+
} else {
|
37
|
+
alpha = mask_data[i];
|
38
|
+
}
|
39
|
+
|
40
|
+
color = (color & 0xffffff00) | (A(color) * alpha / 255);
|
41
|
+
rb_funcall(canvas, rb_intern("[]="), 3, INT2FIX(layer_x), INT2FIX(layer_y), INT2FIX(color));
|
42
|
+
|
43
|
+
i++;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
return Qnil;
|
48
|
+
}
|
@@ -63,6 +63,10 @@ void Init_psd_native() {
|
|
63
63
|
VALUE ClippingMask = rb_define_module_under(Renderer, "ClippingMask");
|
64
64
|
rb_define_method(ClippingMask, "apply!", psd_native_clipping_mask_apply_bang, 0);
|
65
65
|
|
66
|
+
// Mask
|
67
|
+
VALUE Mask = rb_define_module_under(Renderer, "Mask");
|
68
|
+
rb_define_method(Mask, "apply!", psd_native_mask_apply_bang, 0);
|
69
|
+
|
66
70
|
// Blender
|
67
71
|
VALUE Blender = rb_define_module_under(Renderer, "Blender");
|
68
72
|
rb_define_method(Blender, "compose!", psd_native_blender_compose_bang, 0);
|
data/lib/psd_native/version.rb
CHANGED
data/lib/psd_native.rb
CHANGED
@@ -16,6 +16,11 @@ module PSDNative
|
|
16
16
|
end
|
17
17
|
base::Renderer::ClippingMask.send(:include, PSDNative::Renderer::ClippingMask)
|
18
18
|
|
19
|
+
base::Renderer::Mask.class_eval do
|
20
|
+
remove_method :apply!
|
21
|
+
end
|
22
|
+
base::Renderer::Mask.send(:include, PSDNative::Renderer::Mask)
|
23
|
+
|
19
24
|
base::Renderer::Blender.class_eval do
|
20
25
|
remove_method :compose!
|
21
26
|
end
|
data/psd_native.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.extensions = ["ext/psd_native/extconf.rb"]
|
22
22
|
spec.require_paths = ["lib", "ext"]
|
23
23
|
|
24
|
-
spec.add_runtime_dependency "psd", "
|
24
|
+
spec.add_runtime_dependency "psd", "~> 2.1.1"
|
25
25
|
spec.add_runtime_dependency "oily_png", "~> 1.1"
|
26
26
|
|
27
27
|
spec.add_development_dependency "bundler", "~> 1.3"
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: psd_native
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan LeFevre
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: psd
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.1.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
26
|
+
version: 2.1.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: oily_png
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,6 +158,8 @@ files:
|
|
158
158
|
- ext/psd_native/image_mode_rgb.h
|
159
159
|
- ext/psd_native/layer_raw.c
|
160
160
|
- ext/psd_native/layer_raw.h
|
161
|
+
- ext/psd_native/mask.c
|
162
|
+
- ext/psd_native/mask.h
|
161
163
|
- ext/psd_native/psd_native_ext.c
|
162
164
|
- ext/psd_native/psd_native_ext.h
|
163
165
|
- ext/psd_native/rle_decoding.c
|