psd_native 0.5.0 → 0.6.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 +4 -4
- data/Gemfile +2 -0
- data/ext/psd_native/build_preview.c +58 -0
- data/ext/psd_native/build_preview.h +6 -0
- data/ext/psd_native/image_mode_rgb.c +15 -9
- data/ext/psd_native/psd_native_ext.c +18 -5
- data/ext/psd_native/psd_native_ext.h +4 -1
- data/ext/psd_native/util.c +17 -0
- data/ext/psd_native/util.h +8 -0
- data/lib/psd_native/version.rb +1 -1
- data/lib/psd_native.rb +2 -0
- data/spec/util_spec.rb +15 -0
- metadata +9 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 960643fec9eb4c5832460760e567953247189174
         | 
| 4 | 
            +
              data.tar.gz: b3000995230c06cad6c95112e30e9be26d70c6aa
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9da0d02c2b6eb361f3750d44d370ed165af072e03f0ee91a66721da8e516d23213d93e30586630dca03aeba5ffbf4581cf691caf3c480d21401bede582ed46de
         | 
| 7 | 
            +
              data.tar.gz: 5d2fc658099b074118b6890bcf0608a2be393fef2a415e1f2aba389500f6d6386bdb53c70b8ac0fca87214bc276d250e1015961082507f94260c3aacb36bde1c
         | 
    
        data/Gemfile
    CHANGED
    
    
| @@ -0,0 +1,58 @@ | |
| 1 | 
            +
            #include "psd_native_ext.h"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            VALUE psd_native_build_preview_blend_pixels(
         | 
| 4 | 
            +
              VALUE self, 
         | 
| 5 | 
            +
              VALUE blending_mode, 
         | 
| 6 | 
            +
              VALUE layer, 
         | 
| 7 | 
            +
              VALUE base, 
         | 
| 8 | 
            +
              VALUE other, 
         | 
| 9 | 
            +
              VALUE r_offset_x, 
         | 
| 10 | 
            +
              VALUE r_offset_y) {
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              int x, y, base_x, base_y, offset_x, offset_y;
         | 
| 13 | 
            +
              uint32_t width, height, base_width, base_height;
         | 
| 14 | 
            +
              VALUE color;
         | 
| 15 | 
            +
              VALUE Compose = rb_const_get(rb_const_get(rb_cObject, rb_intern("PSD")), rb_intern("Compose"));
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              width = FIX2UINT(rb_funcall(other, rb_intern("width"), 0));
         | 
| 18 | 
            +
              height = FIX2UINT(rb_funcall(other, rb_intern("height"), 0));
         | 
| 19 | 
            +
              base_width = FIX2UINT(rb_funcall(base, rb_intern("width"), 0));
         | 
| 20 | 
            +
              base_height = FIX2UINT(rb_funcall(base, rb_intern("height"), 0));
         | 
| 21 | 
            +
              offset_x = FIX2INT(r_offset_x);
         | 
| 22 | 
            +
              offset_y = FIX2INT(r_offset_y);
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
              VALUE opacity = rb_hash_new();
         | 
| 25 | 
            +
              rb_hash_aset(
         | 
| 26 | 
            +
                opacity, 
         | 
| 27 | 
            +
                ID2SYM(rb_intern("opacity")),
         | 
| 28 | 
            +
                rb_funcall(layer, rb_intern("opacity"), 0)
         | 
| 29 | 
            +
              );
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              rb_hash_aset(
         | 
| 32 | 
            +
                opacity,
         | 
| 33 | 
            +
                ID2SYM(rb_intern("fill_opacity")),
         | 
| 34 | 
            +
                rb_funcall(layer, rb_intern("fill_opacity"), 0)
         | 
| 35 | 
            +
              );
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              for (y = 0; y < height; y++) {
         | 
| 38 | 
            +
                for (x = 0; x < width; x++) {
         | 
| 39 | 
            +
                  base_x = x + offset_x;
         | 
| 40 | 
            +
                  base_y = y + offset_y;
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  if (base_x < 0 || base_y < 0 || base_x >= base_width || base_y >= base_height) continue;
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  color = rb_funcall(
         | 
| 45 | 
            +
                    Compose,
         | 
| 46 | 
            +
                    rb_intern_str(blending_mode),
         | 
| 47 | 
            +
                    3,
         | 
| 48 | 
            +
                    rb_funcall(other, rb_intern("[]"), 2, INT2FIX(x), INT2FIX(y)),
         | 
| 49 | 
            +
                    rb_funcall(base, rb_intern("[]"), 2, INT2FIX(base_x), INT2FIX(base_y)),
         | 
| 50 | 
            +
                    opacity
         | 
| 51 | 
            +
                  );
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  rb_funcall(base, rb_intern("[]="), 3, INT2FIX(base_x), INT2FIX(base_y), color);
         | 
| 54 | 
            +
                }
         | 
| 55 | 
            +
              }
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              return Qnil;
         | 
| 58 | 
            +
            }
         | 
| @@ -12,27 +12,33 @@ VALUE psd_native_combine_rgb_channel(VALUE self) { | |
| 12 12 | 
             
              int channel_count = RARRAY_LENINT(rb_iv_get(self, "@channels_info"));
         | 
| 13 13 |  | 
| 14 14 | 
             
              int i, j;
         | 
| 15 | 
            -
              uint32_t val,  | 
| 15 | 
            +
              uint32_t val, color;
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              int channel_ids[channel_count];
         | 
| 18 | 
            +
              for (i = 0; i < channel_count; i++) {
         | 
| 19 | 
            +
                channel_ids[i] = FIX2INT(rb_hash_aref(channels_info[i], ID2SYM(rb_intern("id"))));
         | 
| 20 | 
            +
              }
         | 
| 16 21 |  | 
| 17 22 | 
             
              // Loop through every pixel in the image
         | 
| 18 23 | 
             
              for (i = 0; i < num_pixels; i += pixel_step) {
         | 
| 19 | 
            -
                 | 
| 20 | 
            -
                a = 255;
         | 
| 24 | 
            +
                color = 0x000000ff;
         | 
| 21 25 |  | 
| 22 26 | 
             
                // And every channel for every pixel
         | 
| 23 27 | 
             
                for (j = 0; j < channel_count; j++) {
         | 
| 28 | 
            +
                  if (channel_ids[j] == -2) continue;
         | 
| 29 | 
            +
             | 
| 24 30 | 
             
                  val = FIX2UINT(channel_data[i + (channel_length * j)]);
         | 
| 25 31 |  | 
| 26 32 | 
             
                  // Get the hash containing channel info
         | 
| 27 | 
            -
                  switch ( | 
| 28 | 
            -
                    case -1:  | 
| 29 | 
            -
                    case 0:   | 
| 30 | 
            -
                    case 1:   | 
| 31 | 
            -
                    case 2:   | 
| 33 | 
            +
                  switch (channel_ids[j]) {
         | 
| 34 | 
            +
                    case -1: color = (color & 0xffffff00) | val; break;         // A
         | 
| 35 | 
            +
                    case 0:  color = (color & 0x00ffffff) | (val << 24); break; // R
         | 
| 36 | 
            +
                    case 1:  color = (color & 0xff00ffff) | (val << 16); break; // G
         | 
| 37 | 
            +
                    case 2:  color = (color & 0xffff00ff) | (val << 8); break;  // B
         | 
| 32 38 | 
             
                  }
         | 
| 33 39 | 
             
                }
         | 
| 34 40 |  | 
| 35 | 
            -
                rb_ary_push(rb_iv_get(self, "@pixel_data"), INT2FIX( | 
| 41 | 
            +
                rb_ary_push(rb_iv_get(self, "@pixel_data"), INT2FIX(color));
         | 
| 36 42 | 
             
              }
         | 
| 37 43 |  | 
| 38 44 | 
             
              return Qnil;
         | 
| @@ -1,6 +1,12 @@ | |
| 1 1 | 
             
            #include "psd_native_ext.h"
         | 
| 2 2 |  | 
| 3 | 
            +
            static VALUE psd_class;
         | 
| 4 | 
            +
            static VALUE logger;
         | 
| 5 | 
            +
             | 
| 3 6 | 
             
            void Init_psd_native() {
         | 
| 7 | 
            +
              psd_class = rb_const_get(rb_cObject, rb_intern("PSD"));
         | 
| 8 | 
            +
              logger = rb_funcall(psd_class, rb_intern("logger"), 0);
         | 
| 9 | 
            +
             | 
| 4 10 | 
             
              VALUE PSDNative = rb_define_module("PSDNative");
         | 
| 5 11 | 
             
              VALUE ImageMode = rb_define_module_under(PSDNative, "ImageMode");
         | 
| 6 12 |  | 
| @@ -49,15 +55,22 @@ void Init_psd_native() { | |
| 49 55 | 
             
              VALUE ClippingMask = rb_define_module_under(PSDNative, "ClippingMask");
         | 
| 50 56 | 
             
              rb_define_method(ClippingMask, "apply", psd_native_clipping_mask_apply, 0);
         | 
| 51 57 |  | 
| 52 | 
            -
               | 
| 53 | 
            -
             | 
| 58 | 
            +
              // Build preview
         | 
| 59 | 
            +
              VALUE Node = rb_define_module_under(PSDNative, "Node");
         | 
| 60 | 
            +
              VALUE BuildPreview = rb_define_module_under(Node, "BuildPreview");
         | 
| 61 | 
            +
              rb_define_private_method(BuildPreview, "blend_pixels!", psd_native_build_preview_blend_pixels, 6);
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              // Util
         | 
| 64 | 
            +
              VALUE Util = rb_define_module_under(PSDNative, "Util");
         | 
| 65 | 
            +
              rb_define_method(Util, "pad2", psd_native_util_pad2, 1);
         | 
| 66 | 
            +
              rb_define_method(Util, "pad4", psd_native_util_pad4, 1);
         | 
| 67 | 
            +
              rb_define_method(Util, "clamp", psd_native_util_clamp, 3);
         | 
| 54 68 |  | 
| 55 | 
            -
             | 
| 56 | 
            -
              return rb_const_get(rb_cObject, rb_intern("PSD"));
         | 
| 69 | 
            +
              psd_logger("info", "PSD native mixins enabled!");
         | 
| 57 70 | 
             
            }
         | 
| 58 71 |  | 
| 59 72 | 
             
            void psd_logger(char* level, char* message) {
         | 
| 60 | 
            -
              rb_funcall( | 
| 73 | 
            +
              rb_funcall(logger, rb_intern(level), 1, rb_str_new2(message));
         | 
| 61 74 | 
             
            }
         | 
| 62 75 |  | 
| 63 76 | 
             
            VALUE psd_file(VALUE self) {
         | 
| @@ -4,12 +4,14 @@ | |
| 4 4 | 
             
            #include "ruby.h"
         | 
| 5 5 |  | 
| 6 6 | 
             
            #define RSTRING_NOT_MODIFIED
         | 
| 7 | 
            +
            #define PSD_CONCURRENCY 4
         | 
| 7 8 |  | 
| 8 9 | 
             
            // Pixels use 32 bits unsigned integers
         | 
| 9 10 | 
             
            // We borrow this from OilyPNG
         | 
| 10 11 | 
             
            typedef uint32_t PIXEL;
         | 
| 11 12 |  | 
| 12 13 | 
             
            // Our native mixins
         | 
| 14 | 
            +
            #include "util.h"
         | 
| 13 15 | 
             
            #include "color.h"
         | 
| 14 16 | 
             
            #include "clipping_mask.h"
         | 
| 15 17 | 
             
            #include "compose.h"
         | 
| @@ -17,9 +19,10 @@ typedef uint32_t PIXEL; | |
| 17 19 | 
             
            #include "image_mode_greyscale.h"
         | 
| 18 20 | 
             
            #include "image_mode_rgb.h"
         | 
| 19 21 | 
             
            #include "rle_decoding.h"
         | 
| 22 | 
            +
            #include "build_preview.h"
         | 
| 20 23 |  | 
| 21 24 | 
             
            void Init_psd_native();
         | 
| 22 | 
            -
            VALUE psd_class();
         | 
| 25 | 
            +
            // VALUE psd_class();
         | 
| 23 26 | 
             
            void psd_logger(char* level, char* message);
         | 
| 24 27 | 
             
            VALUE psd_file(VALUE self);
         | 
| 25 28 | 
             
            int psd_file_tell(VALUE self);
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            #include "psd_native_ext.h"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            VALUE psd_native_util_pad2(VALUE self, VALUE i) {
         | 
| 4 | 
            +
              return INT2FIX((FIX2INT(i) + 1) & ~0x01);
         | 
| 5 | 
            +
            }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            VALUE psd_native_util_pad4(VALUE self, VALUE i) {
         | 
| 8 | 
            +
              return INT2FIX(((FIX2INT(i) + 4) & ~0x03) - 1);
         | 
| 9 | 
            +
            }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            VALUE psd_native_util_clamp(VALUE self, VALUE r_num, VALUE r_min, VALUE r_max) {
         | 
| 12 | 
            +
              int num = FIX2INT(r_num);
         | 
| 13 | 
            +
              int min = FIX2INT(r_min);
         | 
| 14 | 
            +
              int max = FIX2INT(r_max);
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              return num > max ? r_max : (num < min ? r_min : r_num);
         | 
| 17 | 
            +
            }
         | 
    
        data/lib/psd_native/version.rb
    CHANGED
    
    
    
        data/lib/psd_native.rb
    CHANGED
    
    | @@ -7,6 +7,8 @@ module PSDNative | |
| 7 7 | 
             
                base::Image.send(:include, PSDNative::ImageMode::Greyscale)
         | 
| 8 8 | 
             
                base::Image.send(:include, PSDNative::ImageFormat::RLE)
         | 
| 9 9 | 
             
                base::Color.send(:include, PSDNative::Color)
         | 
| 10 | 
            +
                base::Node.send(:include, PSDNative::Node::BuildPreview)
         | 
| 11 | 
            +
                base::Util.extend PSDNative::Util
         | 
| 10 12 |  | 
| 11 13 | 
             
                base::ClippingMask.class_eval do
         | 
| 12 14 | 
             
                  remove_method :apply
         | 
    
        data/spec/util_spec.rb
    ADDED
    
    | @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe 'Util' do
         | 
| 4 | 
            +
              it "pad2's correctly" do
         | 
| 5 | 
            +
                expect(PSD::Util.pad2(0)).to eq 0
         | 
| 6 | 
            +
                expect(PSD::Util.pad2(1)).to eq 2
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              # Note, this pad4 is weird but this is expected results
         | 
| 10 | 
            +
              it "pad4's correctly" do
         | 
| 11 | 
            +
                expect(PSD::Util.pad4(0)).to eq 3
         | 
| 12 | 
            +
                expect(PSD::Util.pad4(1)).to eq 3
         | 
| 13 | 
            +
                expect(PSD::Util.pad4(2)).to eq 3
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: psd_native
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.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: 2013-11- | 
| 11 | 
            +
            date: 2013-11-25 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: psd
         | 
| @@ -137,6 +137,8 @@ files: | |
| 137 137 | 
             
            - LICENSE.txt
         | 
| 138 138 | 
             
            - README.md
         | 
| 139 139 | 
             
            - Rakefile
         | 
| 140 | 
            +
            - ext/psd_native/build_preview.c
         | 
| 141 | 
            +
            - ext/psd_native/build_preview.h
         | 
| 140 142 | 
             
            - ext/psd_native/clipping_mask.c
         | 
| 141 143 | 
             
            - ext/psd_native/clipping_mask.h
         | 
| 142 144 | 
             
            - ext/psd_native/color.c
         | 
| @@ -154,6 +156,8 @@ files: | |
| 154 156 | 
             
            - ext/psd_native/psd_native_ext.h
         | 
| 155 157 | 
             
            - ext/psd_native/rle_decoding.c
         | 
| 156 158 | 
             
            - ext/psd_native/rle_decoding.h
         | 
| 159 | 
            +
            - ext/psd_native/util.c
         | 
| 160 | 
            +
            - ext/psd_native/util.h
         | 
| 157 161 | 
             
            - lib/psd_native.rb
         | 
| 158 162 | 
             
            - lib/psd_native/compose.rb
         | 
| 159 163 | 
             
            - lib/psd_native/version.rb
         | 
| @@ -167,6 +171,7 @@ files: | |
| 167 171 | 
             
            - spec/image_spec.rb
         | 
| 168 172 | 
             
            - spec/psd_spec.rb
         | 
| 169 173 | 
             
            - spec/spec_helper.rb
         | 
| 174 | 
            +
            - spec/util_spec.rb
         | 
| 170 175 | 
             
            homepage: http://cosmos.layervault.com/psdrb.html
         | 
| 171 176 | 
             
            licenses:
         | 
| 172 177 | 
             
            - MIT
         | 
| @@ -188,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 188 193 | 
             
                  version: '0'
         | 
| 189 194 | 
             
            requirements: []
         | 
| 190 195 | 
             
            rubyforge_project: 
         | 
| 191 | 
            -
            rubygems_version: 2. | 
| 196 | 
            +
            rubygems_version: 2.1.11
         | 
| 192 197 | 
             
            signing_key: 
         | 
| 193 198 | 
             
            specification_version: 4
         | 
| 194 199 | 
             
            summary: Native C mixins to speed up the slowest parts of PSD.rb
         | 
| @@ -202,3 +207,4 @@ test_files: | |
| 202 207 | 
             
            - spec/image_spec.rb
         | 
| 203 208 | 
             
            - spec/psd_spec.rb
         | 
| 204 209 | 
             
            - spec/spec_helper.rb
         | 
| 210 | 
            +
            - spec/util_spec.rb
         |